![我如何确定哪些进程占用了最多的 CPU?](https://linux22.com/image/512047/%E6%88%91%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E5%93%AA%E4%BA%9B%E8%BF%9B%E7%A8%8B%E5%8D%A0%E7%94%A8%E4%BA%86%E6%9C%80%E5%A4%9A%E7%9A%84%20CPU%EF%BC%9F.png)
05:54:17 启动 6 天,9:54,1 个用户,平均负载:15.70、8.04、4.56
平均负载比应有的要高很多。刚才只有一半,我使用 ps aux 查看哪些进程占用了大量 CPU,结果 httpd 占用了大量 CPU。它运行了几个进程,每个进程占用 0.9。所以我重新启动了 httpd,现在这些进程都消失了,但平均负载却翻了一番。
你知道,仔细想想,我可能对平均负载的含义理解错了,我从来没有真正研究过它,只是从一个朋友那里得到了它的定义,他告诉我它是 CPU 消耗,比如有多少进程在等待使用 CPU,所以如果我也能得到一个解释这是什么,以及如何使它回落。
但我真正来这里的问题是:有没有办法可以列出消耗最多 CPU 的进程?
答案1
htop 或者只是 top
答案2
负载是资源争用的一种衡量标准,而不仅仅是 CPU 使用率。如果许多进程处于“等待”状态(例如由于高磁盘 IO 或内存交换),这可能会导致高负载,而实际 CPU 使用率不会出现相应的峰值。top 和 ps 等工具在一定程度上会有所帮助,特别是如果您使用某些选项来自定义输出。对于磁盘和内存利用率,您可以尝试解释 iostat 和 vmstat 的输出,或者安装 iotop 等实用程序
答案3
loadav 仅告诉您有多少个进程正在排队运行;您可能会受到磁盘、网络、NFS、锁争用、交换或一系列其他条件的限制。
我倾向于安装 sar(并使用 -d 选项获取磁盘统计信息)来收集一段时间内的数据并查看发生的情况;这将为您提供有关 CPU、内存配置文件和磁盘行为的合理详细的细分。
一个简单的经验法则是,如果在 vmstat、top、atop、dstat、sar 和此类工具中显示有大量“空闲”时间,则您并没有耗尽 CPU,而是耗尽了其他资源。
您还可以看看 dstat,它有一些不错的插件可以检查应用程序的不当行为。