我有一台服务器,内存为2GB,正在使用CentOS的MediaTemple的DV托pipe服务器上运行。 该命令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命令似乎表明这个内存没有被caching,也就是说-/+ buffers/cache行也显示出来了。 我在这里错过了什么?
根据请求,这里是/ 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在这里提示,有很大比例的内存使用,这并没有列在最上面。
Slab是内核使用的内存,它不会显示在最上面 。 这个时候大约是1,2GB,并且正确地将您的最高输出添加到免费赠送的输出。 您可以使用slabtop命令更详细地检查它的使用位置 。
PS当系统有很多文件并且读/写它们的时候,大量的slab内存被使用的最常见的情况之一。 然后很多内存去cachinginode信息。 这个caching可以稍微调整,但是以性能为代价。