我的 Web 服务器目前负载非常高,出现了问题。没有正在运行的 cron 作业,但我可以看到任何使用 CPU 的进程。我如何找出发生了什么?
答案1
从您的顶部输出来看,问题似乎是高 IO(RAM/CPU 使用率低、IOWait% 高、负载高,并且有多个状态为“D”的 httpd 进程)。您正在运行哪种应用程序?您是否使用 MySQL 之类的数据库层?如果是,数据库正在经历哪种负载,并且是否正确配置/优化?
您可以尝试iostat -x 5
在 IOWait% 较高时运行,以查看正在使用哪个驱动器以及该驱动器是否读/写量很大。下一步(更耗时)是找出 IO 负载的来源以及如何修复它。
答案2
如我所见,您正在使用 apache prefork 配置,并且您的服务器上有很多客户端。首先尝试通过键入sudo /etc/init.d/apache stop
然后重新启动 apache sudo /etc/init.d/apache start
。您可以考虑切换到 apache mpm 配置,这样您就不会拥有那么多进程,并且负载将分布在线程之间,这样您可能会看到消耗 CPU 时间的瓶颈进程并将它们杀死或追踪出来。
另一种方法是切换到 lighthttpd 或 nginx Web 服务器,它们都消耗更少的内存,并且可以处理更多同时连接的客户端