如何解释这个top命令

如何解释这个top命令
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然后在顶部观察。

相关内容