![Ubuntu apache 进程消耗 100% CPU PHP/MySQL 应用程序](https://linux22.com/image/651965/Ubuntu%20apache%20%E8%BF%9B%E7%A8%8B%E6%B6%88%E8%80%97%20100%25%20CPU%20PHP%2FMySQL%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我在 Rackspace 有一台服务器,连接到运行 MySQL 的 Cloud DB 实例。我不是服务器管理员,因此很抱歉没有足够的数据。我很难确定是什么导致我的 apache 服务器在 10 个并发用户的负载下 CPU 占用率达到 100%(我使用 Neustar 设置了负载测试)。
我的mod_status
输出:
我的mpm_prefork.conf
:
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 10
MaxRequestWorkers 150
MaxClients 10
MaxConnectionsPerChild 0
</IfModule>
我知道我的问题出在代码上,但我不清楚从哪里开始,也不清楚代码中是否有mod_status
我不明白的细节。我们使用 PDO 连接数据库,而 Rackspace 让我们使用 DNS,所以我不确定执行反向查找是否会损害 CPU。我还有 2 张来自 New Relic 的屏幕截图,显示了服务器的使用情况。这是一个小型暂存服务器,这就是为什么我只有 1 个 CPU 和 1G 内存 - 以及为什么我只测试了 10 个用户。
请让我知道我还可以发布什么来帮助诊断问题。
答案1
正确回答这个问题需要几万字(我知道,我已经之前尝试回答过)。但查看您提供的数字确实能提供一些线索。
使用大量 CPU 意味着您可以消除很多潜在问题。LAMP 平台上的高 CPU 使用率通常是一个很好的信号 - 这意味着系统不是花费大量时间等待网络、数据库和磁盘 I/O 的发生。
话虽如此,当并发连接数只有 10 个时,平均负载超过 3 是非常糟糕的。响应速度为 2.7/秒是非常糟糕的。而且我怀疑平均响应时间非常非常糟糕。
这太糟糕了,我要做的第一件事就是检查是否配置了任何操作码缓存。如果有,那么你应该检查它的大小是否正确。
仅 1CPU 和 1G 内存
我运行过 LAMP 服务器,每个实例有 120 个并发客户端,内存量如此之大(还有足够的空间用于 VFS 和 DB)。当然,很大程度上取决于你的代码是什么样子的——这当然不是其他人可以在这里给出明智意见的事情。一旦你检查了操作码缓存,你可能想要安装西哈尔滨工业大学并开始调查你的代码出了什么问题。
(顺便说一句,您的 httpd 配置中似乎混合了 2.2 和 2.4 配置指令 - 您可能也想花一些时间清理它们)。