我怎么知道哪个页面正在创build一个高CPU负载的httpd进程?

我有一个LAMP服务器(基于CentOS的MediaTemple(DV)至尊2GB内存)运行一个自定义的WordPress的+ bbPress组合。

每天大约有30k的浏览量,服务器开始呻吟。 今天早些时候大约5分钟,当时有大量的车stream。 即使在正常情况下,我可以看到虚拟服务器有时在90%+ CPU负载。 使用顶部我经常可以看到5-7个httpd进程,每个进程都使用15-30%(有时甚至是50%)的CPU。

在我们做一个大的优化传递(我们使用MySQL可能是罪魁祸首)之前,我希望find主要的犯罪者页面并首先处理它们。 有没有一种方法可以找出哪些特定的请求负责最耗尽CPU的httpd进程? 一般来说,我发现了很多关于优化的信息,但在这个特定的问题上没有任何信息。

其次,我知道有一百万个variables,但是如果您对于是否应该在具有这种大小的站点的单个专用虚拟服务器的性能边界上有任何了解,那么我很乐意听取您的意见。 我们应该考虑转向更强大的服务器,还是应该专注于当前服务器的优化?

strace是开始debugging这种问题的好方法。 尝试对使用更多CPU的Apache进程之一的pid进行strace:

 strace -f -t -o strace.output -p PID 

这将显示在该过程中进行的系统调用。 看看strace.output,看看这个过程在做什么。 这可能会启发你的方式,并告诉你的过程挂在哪里。 “-t”标志在这里是非常重要的,因为它将在一天中的时间前面对strace输出的每一行加上前缀。 所以,寻找一个飞跃。

另一方面,当你认为MySQL可能是罪魁祸首,我会启用慢查询日志,看看它,并尝试优化查询。 有关这里的慢查询日志的更多信息。

此外,不要忘记看看你的networking服务器的日志文件。

关于你的第二个问题,我认为只有这个信息很难说。 将前端(networking服务器)与后端(数据库)分开始终是一个很好的做法,如果你有它的预算。 另一方面,我认为在添加更多硬件之前,应该着重于使用当前硬件来优化性能。 否则,问题可能只是被推迟。

希望这可以帮助。

与磨床试用 – 这将帮助您find瓶颈。