우분투 10.04 및 512Mb RAM을 갖춘 vps 시스템이 있습니다. mongodb 데몬을 실행한 후 사용 가능한 메모리가 얼마나 되는지 추측하려고 합니다.
내가 달리면 free -m
나는 얻는다.
total used free shared buffers cached
Mem: 496 489 6 0 4 452
-/+ buffers/cache: 33 462
Swap: 511 4 507
내가 달리면 ps euf
나는 얻는다.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 948 0.0 0.0 5928 472 tty6 Ss+ Aug25 0:00 /sbin/getty 384
root 947 0.0 0.0 5928 472 tty5 Ss+ Aug25 0:00 /sbin/getty 384
root 946 0.0 0.0 5928 472 tty4 Ss+ Aug25 0:00 /sbin/getty 384
root 945 0.0 0.0 5928 472 tty3 Ss+ Aug25 0:00 /sbin/getty 384
root 944 0.0 0.0 5928 472 tty2 Ss+ Aug25 0:00 /sbin/getty 384
root 943 0.0 0.1 51856 536 hvc0 Ss Aug25 0:00 /bin/login --
root 978 0.0 0.4 20580 2424 hvc0 S Aug25 0:01 \_ -bash TERM=
root 7593 0.0 0.1 10332 524 hvc0 T Aug25 0:00 \_ nano he
root 12576 0.7 3.1 122520 16220 hvc0 Sl 07:42 0:12 \_ ./mongo
root 12599 0.0 0.2 16300 1060 hvc0 R+ 08:09 0:00 \_ ps euf
그러면 프로세스가 메모리의 5% 미만을 사용하고 있는 것 같지만 사용 가능한 메모리는 6MB밖에 없습니다. 왜일까요?
답변1
버퍼 및 캐시 크기는 동적으로 조정됩니다. 프로세스에 더 많은 공간이 필요하면 버퍼와 캐시에서 공간을 가져옵니다.
핵심은 두 번째 줄("-/+ buffers/cache")을 살펴보는 것입니다.
Mem: 496 489 6 0 4 452
-/+ buffers/cache: 33 462
두 번째 줄의 free(462)는 6(free), 4(buffer), 452(cache)의 합입니다. 이는 실제 여유 공간의 양입니다. 이 값이 너무 낮으면 시스템은 메모리의 프로세스를 스왑 공간으로 스왑하기 시작합니다.
실제로 33MB의 메모리를 사용하고 있으며쓸 수 있는462MB - 여전히 일부 I/O 버퍼가 필요하므로 약간 적을 수 있습니다.
답변2
정확한 설명과는 별개로작성자: alce게다가 당신의 설명에는 또 다른 두 가지 오해가 숨겨져 있습니다 ps euf
.
이 명령은
ps euf
모든 프로세스를 나열하지는 않습니다.ps axeuf
대신 이 명령을 사용해야 합니다.보시다시피, 각 프로세스에 사용된 메모리의 백분율이 반올림되어 제공됩니다
0.1%
. 따라서 이를 추가하면 잘못된 결과가 발생합니다. (대략) 모든 프로세스가 사용합니다.일부RAM – 더 적더라도0.1%
. 예를 들어, 이를 사용하는 20개의 프로세스가 있는 경우 가 아닌 까지0.05%
합산됩니다 .1%
0%