
2GB RAM이 있고 CentOS를 사용하는 MediaTemple의 DV 관리 서버에서 실행되는 서버가 있습니다. 이 명령은 free -m
다음을 제공합니다.
total used free shared buffers cached
Mem: 2048 1948 99 0 0 140
-/+ buffers/cache: 1808 239
Swap: 1536 288 1247
그러나 를 사용하여 어떤 프로세스가 메모리를 사용하고 있는지 알아내려고 하면 top
다음과 같은 결과가 나타납니다.
1417 mysql 20 0 496m 496m 7512 S 1.3 24.3 42:10.92 mysqld
3259 okgo 20 0 49436 48m 11m S 0.0 2.4 0:21.96 php-cgi
3175 root 20 0 49144 47m 3196 S 0.0 2.3 0:01.80 spamd
3176 popuser 20 0 46940 45m 992 S 0.0 2.2 0:00.00 spamd
3269 okgo 20 0 44372 43m 10m S 19.2 2.1 0:02.11 php-cgi
3272 okgo_for 20 0 23808 23m 10m S 0.0 1.1 0:00.79 php-cgi
27161 root 20 0 10816 10m 9460 S 0.0 0.5 0:01.97 httpd
786 root 20 0 4844 4844 2140 S 0.0 0.2 2:28.96 newrelic-daemon
1017 apache 20 0 4552 4552 2228 S 0.0 0.2 0:01.38 httpd
3277 postfix 20 0 4432 4432 2548 S 0.0 0.2 0:00.00 trivial-rewrite
free -m
여기서 나를 혼란스럽게 하는 것은 명령이 이 메모리가 캐시되지 않았음을 표시하는 것처럼 보인다 는 사실입니다. 즉, 해당 -/+ buffers/cache
행에는 1827이 사용된 것으로 표시됩니다! 내가 여기서 무엇을 놓치고 있는 걸까요?
편집하다
요청 시 /proc/meminfo의 출력은 다음과 같습니다(free -m과 모순되는 것 같나요?).
MemTotal: 2097152 kB
MemFree: 55808 kB
Cached: 158656 kB
Buffers: 0 kB
Active: 368924 kB
Inactive: 428580 kB
Active(anon): 273480 kB
Inactive(anon): 365368 kB
Active(file): 95444 kB
Inactive(file): 63212 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1572864 kB
SwapFree: 1277160 kB
Dirty: 68 kB
Writeback: 0 kB
AnonPages: 638848 kB
Shmem: 4424 kB
Slab: 1243780 kB
SReclaimable: 1222584 kB
SUnreclaim: 21196 kB
또한,이 게시물상황을 밝힐 수 있지만 여기의 /proc/meminfo는 매우 많은 양의 메모리가 사용되었음을 암시하며 이는 맨 위에 나열되지 않습니다.
답변1
Slab은 커널에서 사용하는 메모리이므로 커널에 표시되지 않습니다.맨 위. 현재 약 1,2GB이며 이는 귀하의 컴퓨터에 올바르게 추가됩니다.맨 위에 의해 주어진 것으로 출력무료. 다음을 사용하여 사용된 위치를 더 자세히 검사할 수 있습니다.석판명령.
PS 시스템에 많은 파일이 있고 해당 파일을 상당히 많이 읽고 쓸 때 많은 슬래브 메모리가 사용되는 가장 일반적인 시나리오 중 하나입니다. 그러면 많은 메모리가 inode 정보를 캐시하는 데 사용됩니다. 이 캐싱은 약간 조정할 수 있지만 성능이 저하됩니다.