我有一台 LAMP 服务器(基于 CentOS 的 MediaTemple (DV) Extreme,配备 2GB RAM),运行定制的 Wordpress+bbPress 组合。
每天大约有 3 万个页面浏览量,服务器就开始发出警报。今天早些时候,当流量涌入时,服务器大约瘫痪了 5 分钟。即使在正常情况下,我也可以看到虚拟服务器的 CPU 负载有时达到 90% 以上。使用 Top,我经常可以看到 5-7 个 httpd 进程,每个进程使用 15-30%(有时甚至 50%)的 CPU。
在我们进行大规模优化之前(我们使用的 MySQL 可能是罪魁祸首),我希望先找到主要罪魁祸首页面并处理它们。有没有什么方法可以让我找出哪些特定请求导致了最耗 CPU 的 httpd 进程?我发现了很多关于一般优化的信息,但没有关于这个具体问题的信息。
其次,我知道有无数个变量,但如果您知道我们是否应该使用单个专用虚拟服务器来处理这种规模的网站,那么我很乐意听听您的意见。我们应该考虑迁移到更强大的服务器,还是应该专注于优化当前服务器?
答案1
strace
是开始调试此类问题的好方法。尝试跟踪消耗更多 CPU 的某个 Apache 进程的 pid:
strace -f -t -o strace.output -p PID
这将向您显示该进程内进行的系统调用。查看 strace.output 并查看进程正在做什么。这可能会启发您并向您显示进程挂起的位置。“-t”标志在这里非常重要,因为它会在 strace 输出的每一行前面加上当天的时间。因此,搜索跳跃。
另一方面,如果你认为 MySQL 可能是罪魁祸首,我会启用慢查询日志,查看它并尝试优化该查询。有关慢查询日志的更多信息这里。
另外,不要忘记查看您的网络服务器的日志文件。
关于你的第二个问题,我认为仅凭这些信息很难判断。如果你有预算,将前端(Web 服务器)与后端(数据库)分开始终是一个好习惯。另一方面,我认为在添加更多硬件之前,应该专注于尝试使用现有硬件优化性能。否则,问题可能只是被推迟了。
希望这可以帮助。
答案2
尝试研磨机- 它将帮助您找到瓶颈。