我在 Google Cloud 上托管了一台服务器,配置为在 LAMP 堆栈上提供网站服务。目前,所有这些网站都是基于 WordPress 的,其中只有 5 个。
我有一台n1-standard-1
服务器,它有 1 个 vCPU 和 3.75 GB 内存。考虑到服务器上的网站负载很小(即访客数量),这应该足够了。
现在,CPU 几乎总是处于 100% 或以上。见图。
服务器使用mpm_prefork
及配置如下所示:
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers 50
ServerLimit 50
MaxConnectionsPerChild 0
</IfModule>
当我重新启动时apache2
,总是出现以下错误/var/log/apache2/error.log
:
[Mon Jun 06 15:01:58.204747 2016] [mpm_prefork:notice] [pid 18177] AH00163: Apache/2.4.10 (Debian) configured -- resuming normal operations
[Mon Jun 06 15:01:58.204791 2016] [core:notice] [pid 18177] AH00094: Command line: '/usr/sbin/apache2'
[Mon Jun 06 15:02:18.815485 2016] [mpm_prefork:error] [pid 18177] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
此时运行htop
,我看到 50 个线程已启动,每个线程的 CPU 使用率约为 2%(范围是 1.9% - 2.9%,但大多数线程为 1.9% 或 2.0%)。我确信此时访客流量不会造成很大负担 - 事实上,如果有的话。
然而,在我使用的另一台几乎完全相同但为不同公司服务的服务器上,我只看到少数几个 apache2 线程htop
,每个线程几乎不使用 CPU。这台服务器没有问题,并且处理流量正常。
因此,我相信某些东西正在耗尽第一台机器上的所有资源 - 要么是恶意软件,要么是应用程序级的东西,例如 WP 插件。
所以,我的问题是:
我该如何具体查看导致此问题的原因?问题是 apache2 线程本身就占用了 100% 以上的 CPU。
我推测是某个插件导致了问题,例如缓存插件或图像处理插件或类似的东西,这些插件占用大量 CPU。如果有帮助的话,我可以提供完整的插件列表,但我如何从服务器级别开始工作,而不是从应用程序级别开始工作?
编辑:
参见顶部输出图像:
查看 XML-RPC 攻击,我发现 All In One WP Security 插件周围有大约 2000 个错误。我想这就是我可以从这里开始寻找问题的地方。如果需要,我会问一些新问题,如果我可以更具体一点。谢谢
答案1
事实证明该网站已从另一台服务器迁移过来,但旧服务器仍保留着。
wp-cron.php
旧服务器每秒调用大约 10 次通过域名并因此调用新的服务器。
这会导致大量的 CPU 占用。
我关闭了旧服务器。