top - 04:36:16 up 32 days, 2:33, 1 user, load average: 251.72, 250.54, 231.19
Tasks: 785 total, 249 running, 522 sleeping, 2 stopped, 12 zombie
Cpu(s): 8.9%us, 90.5%sy, 0.4%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 16313868k total, 7021336k used, 9292532k free, 432196k buffers
Swap: 4194296k total, 295012k used, 3899284k free, 514320k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18873 nudenude 20 0 97.8m 26m 4944 R 4.0 0.2 0:09.35 php
18140 nudenude 20 0 93984 22m 4940 R 3.7 0.1 0:11.04 php
18178 nudenude 20 0 99.6m 26m 4912 R 3.7 0.2 0:11.11 php
18537 nudenude 20 0 100m 26m 4936 R 3.7 0.2 0:10.31 php
18726 nudenude 20 0 98.3m 25m 4868 R 3.7 0.2 0:09.82 php
18977 nudenude 20 0 101m 25m 4952 R 3.7 0.2 0:09.14 php
19049 nudenude 20 0 99.5m 28m 4920 R 3.7 0.2 0:08.87 php
19852 nudenude 20 0 100m 30m 4912 R 3.7 0.2 0:07.08 php
20504 nudenude 20 0 93024 18m 4880 R 3.7 0.1 0:04.86 php
20562 nudenude 20 0 100m 31m 4940 R 3.7 0.2 0:04.73 php
20681 nudenude 20 0 90912 14m 4940 R 3.7 0.1 0:04.40 php
20685 nudenude 20 0 90656 15m 4928 R 3.7 0.1 0:04.38 php
有些事情很奇怪。
为什么系统会为 %sy 使用大量 CPU?
在我看来,即使仍然有足够的内存,任务也使用了大量的虚拟内存。所以我想知道为什么?
还有res和VIRT中的15m、14m是什么意思。 man top 中没有显示任何内容。
我检查了http://unixhelp.ed.ac.uk/CGI/man-cgi?top并且没有显示。
注:负载曾经为50%。此外,列 VIRT 通常为 0。但是,偶尔它会进入这种卡住模式,其中 90% 的 CPU 被内核使用。不知道那个内核到底在做什么。
用户使用的CPU很少。难怪负载非常高。但什么?内核在做什么>
答案1
我从我为其编写的手册页中复制了此内容普洛格,因为我试图在那里说清楚:
在解释上述一些统计数据时,了解虚拟地址空间和物理内存之间的差异非常重要。顾名思义,虚拟地址空间不是真实的;它基本上是当前分配给进程的所有内存的映射。该映射的大小限制对于每个进程都是相同的(一般为 2-4 GB),并且不会累积(即,您可能有数十个或数百个进程,每个进程都有自己的 2-4 GB 虚拟地址空间(在实际只有 512 MB 物理内存的系统上)。
实际上无法从虚拟地址空间存储或检索数据;真实数据需要真实的物理内存。管理一个与另一个的关系是内核的工作。虚拟空间统计信息(VirtualSz、Data+Stack 和 Priv&Write)对于考虑进程的结构以及与物理内存使用的关系非常有用,但对于实际使用的 RAM 量,物理内存统计信息(ResidentSz、Share 和比例)才是最重要的。
Top 并不完全具有所有这些指标,但 VIRT 分数是虚拟地址空间,RES 与 SHR 一样是指物理内存。如果您关心相对内存使用情况(即一个进程与另一个进程相比),RES 分数更相关。
VIRT 的某些部分与其他流程相关;诸如 openVZ 之类的监控器根据总量来限制容器私有可写地址空间,而不是RSS。 Top 不会报告这一点,但 pmap 和 plog 会报告(请参阅“Priv&Write”的 plog 联机帮助页;这实际上是我编写它时的动机的一部分)。
答案2
根据您的 top 输出,您的 php 脚本似乎存在问题,您可以检查
- 确保 php 脚本是否正常工作
- 检查apache的错误日志
- 有时检查 cron 条目,许多 php 脚本通过 cron 运行
- 还尝试找出僵尸进程的原因
- 调整 Apache 和 PHP
我确信由于 php 的高负载,您可以通过执行简单地杀死 php 进程
killall -9 php
或者pkill -9 php
然后在顶部观察。