메모리가 최대치에 도달했지만 이 메모리를 사용하는 프로세스가 표시되지 않습니다.

메모리가 최대치에 도달했지만 이 메모리를 사용하는 프로세스가 표시되지 않습니다.

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 정보를 캐시하는 데 사용됩니다. 이 캐싱은 약간 조정할 수 있지만 성능이 저하됩니다.

관련 정보