Top 没有准确显示我的内存使用情况,还是我的 VPS 提供商做了一些奇怪的事情?正如您在下图中看到的,它使用了 90% 以上的内存,但当您查看实际使用内存的进程时,它的总和甚至不超过 30%。我知道当进程有共享内存时 top 无法正确显示,但例如,使用共享内存的 httpd 进程即使加起来也几乎不占用任何可用内存的百分比。
图中顶部的命令是按照内存使用量排序的,因此没有大的进程隐藏。
https://i.stack.imgur.com/4h2aW.png (显然我的声誉不足以发布图片问题。)
使用顶部输出作为文本进行更新:
Tasks: 49 total, 1 running, 48 sleeping, 0 stopped, 0 zombie
Cpu(s): 17.7%us, 1.1%sy, 0.0%ni, 81.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Mem: 2097152k total, 1858988k used, 238164k free, 0k buffers
Swap: 2097152k total, 140740k used, 1956412k free, 1089504k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
812 mysql 20 0 513m 241m 5104 S 4.7 11.8 108:32.39 mysqld
882 root 20 0 344m 219m 6116 S 0.0 10.7 1:08.81 clamd
26111 root 20 0 851m 34m 9720 S 0.0 1.7 1:30.03 java
22155 cpanelro 20 0 94272 10m 2392 S 0.0 0.5 0:00.04 cpsrvd-ssl
22260 cpanelro 20 0 94092 9792 2272 S 0.0 0.5 0:00.02 cpsrvd-ssl
21175 cpanelro 20 0 94092 9704 2276 S 0.0 0.5 0:00.03 cpsrvd-ssl
7491 root 20 0 47732 8520 2176 S 0.0 0.4 0:00.10 leechprotect
623 named 20 0 245m 5256 1940 S 0.3 0.3 11:58.59 named
1639 root 20 0 46644 5172 1408 S 0.0 0.2 1:46.64 tailwatchd
1472 root 20 0 93828 4972 1352 S 0.0 0.2 0:17.42 cpsrvd-ssl
23781 root 20 0 38800 4928 2160 S 0.0 0.2 0:00.57 zsh
17788 nobody 20 0 69072 4336 2488 S 0.0 0.2 0:00.21 httpd
917 root 20 0 68588 4288 3000 S 0.0 0.2 0:28.16 httpd
21152 nobody 20 0 69124 4224 2456 S 0.0 0.2 0:00.05 httpd
20549 nobody 20 0 68992 3716 1996 S 0.0 0.2 0:00.07 httpd
20550 nobody 20 0 68992 3536 1792 S 0.0 0.2 0:00.06 httpd
21996 nobody 20 0 68992 3508 1788 S 0.0 0.2 0:00.02 httpd
20544 nobody 20 0 68992 3484 1804 S 0.0 0.2 0:00.05 httpd
21995 nobody 20 0 68992 3432 1704 S 0.3 0.2 0:00.02 httpd
22228 nobody 20 0 68992 3396 1704 S 0.0 0.2 0:00.00 httpd
22226 nobody 20 0 68588 3300 1924 S 0.0 0.2 0:00.00 httpd
21154 nobody 20 0 68720 3172 1716 S 0.0 0.2 0:00.03 httpd
使用 free -m 进行更新:
free -m
total used free shared buffers cached
Mem: 2048 1864 183 0 0 1063
-/+ buffers/cache: 800 1247
Swap: 2048 137 1910
答案1
请记住,“活动”内存和“已消耗”内存之间存在区别。Linux 倾向于将大量数据存储在内存中,以备将来需要。但进程可能不会主动使用这些内存 - 在这种情况下,它们会报告较低的“已使用”内存量。
如果某个进程突然需要更多内存,那么内核就会释放一些缓存数据,并允许该进程使用它。
因此从技术上来说,内存同时处于“已使用”和“空闲”状态。
你应该熟悉'自由的' 命令。我还喜欢使用顶部而不是 top,因为它显示了这些差异。
这是之前的一个问题,已经得到很好的回答。阅读一下,您应该会更好地理解如何解释“顶部”数据。