我不擅长使用 Linux,但我很享受这种有限的接触。我们使用虚拟化的 Red Hat 服务器进行软件开发,我必须做的一件事就是检查谁占用了 CPU,看看我们如何才能避免这种情况。我可以很容易地破译用户和进程,但如果系统列使用了(比如说)50.8% 的 CPU,我如何才能找出它在做什么,并尽量减少它?我知道这都是内核的东西,但它似乎至少运行在 20% 左右,通常更高。这是一个示例输出:
245 processes: 232 sleeping, 8 running, 4 zombie, 1 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 47.9% 0.0% 50.8% 0.3% 0.7% 0.0% 0.0%
cpu00 68.9% 0.0% 29.2% 0.3% 1.3% 0.0% 0.0%
cpu01 26.8% 0.0% 72.5% 0.3% 0.1% 0.0% 0.0%
Mem: 3816924k av, 3795652k used, 21272k free, 0k shrd, 266548k buff
2836408k actv, 541432k in_d, 58992k in_c
Swap: 2097136k av, 0k used, 2097136k free 3080380k
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
23447 romanmur 25 0 6896 6896 356 R 33.4 0.1 0:09 1 bzip2
23961 tomjose 25 0 1076 1076 960 S 5.4 0.0 0:00 1 make_headers.
23887 paulhewl 25 0 3996 3996 348 R 4.4 0.1 0:00 0 bzip2
3902 romanmur 15 0 4112 4108 1628 S 2.1 0.1 0:23 0 smbd
23446 romanmur 15 0 708 708 616 S 0.5 0.0 0:00 1 tar
24541 damianwy 24 0 1776 1776 960 S 0.4 0.0 0:00 0 sh
24493 root 24 -1 1372 1372 1100 R < 0.3 0.0 0:00 1 X
1771 root 15 0 1108 1108 496 S 0.2 0.0 14:26 1 cmaperfd
23262 root 15 0 1308 1308 884 R 0.2 0.0 0:03 1 top
15209 paulhewl 15 0 488 488 428 S 0.2 0.0 0:00 1 tee
2719 richardp 15 0 6108 6104 2108 S 0.1 0.1 1:02 0 smbd
23857 paulhewl 22 0 1900 1900 652 S 0.1 0.0 0:00 1 make
23886 paulhewl 19 0 712 712 624 S 0.1 0.0 0:00 0 tar
24431 root 23 0 1052 1052 936 S 0.1 0.0 0:00 1 startx
24521 paulhewl 24 0 1056 1056 896 S 0.1 0.0 0:00 1 sh
24523 paulhewl 25 0 416 416 344 R 0.1 0.0 0:00 1 mips-linux-gc
谢谢!
答案1
我对于这种困境深表同情。
top
很棒,但理解起来也有点棘手,主要是因为系统太复杂了。例如,如果你有双核 CPU,那么 CPU 在 top 上以 100% 的速度运行一个命令通常不是问题 - 这只是意味着一个命令正在完全使用一个核心,但另一个核心应该能够接管并无延迟地执行其他命令。
系统负载的良好起点(一目了然)是手册页(同样适用于)右侧最上面的三个数字(w
如果您的顶部没有显示,请输入)。它们基本上是系统开始处理队列中的下一个命令之前需要多长时间……1.01 秒、3.26 秒等。首先,我会更关注这些值,而不是其他详细的信息来告诉您系统是否繁忙。w
system load averages for the past 1, 5, and 15 minutes
top
上面的输出表明,这bzip2
是拍摄快照时 CPU 占用最高的用户。
我建议进一步阅读有关系统 IO、RAM 和 CPU 监控工具的解释。
以下是一些希望能够简化搜寻的起点:顶部列,SysStat 和其他工具和更有效地使用 top。