我有一个运行 WordPress 网站的 Apache 盒子。
由于某种原因,似乎一些 apache 线程使用了大部分 CPU (10%+),而剩余的只使用了很少 (0.1~)。
该盒子是双CPU,Intel(R) Xeon(R) CPU E5620 @ 2.40GHz(每个 CPU 有 4 个核心和 8 个线程)。
线程这样显示的原因是什么?每个用户的 CPU 不应该是相等的吗?
是否有任何一组 apache 优化可以帮助减少负载(CentOS,使用 PHP 和 MySQL 安装的基本 apache2)?
prefork 和 worker MPM 设置如下为默认设置
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
答案1
由于某种原因,似乎一些 apache 线程使用了大部分 CPU (10%+),而剩余的只使用了很少 (0.1~)。
这里需要特别注意的是您的实际活动。在您提供的快照中,正在运行的任务数为 7,负载为 4。
因此,此时需要服务的进程数为 7(可能 —— 但我只能看到 6 个归因于 httpd)。其余进程处于休眠状态,除非发生某些事件,否则不会唤醒。
某些进程的 CPU 使用率较高而其他进程的 CPU 使用率较低的原因是,在给定的秒内,只有这么多进程有事可做top
。
是否有任何一组 apache 优化可以帮助减少负载?
嗯,您的负载可能在 3 到 4 左右徘徊,因为您一半的正在运行的进程可能无法在 5 秒内完成(每五秒内部测量一次负载)。
那里有太多活动的 Apache 进程。您的预分叉设置是什么?尝试将其设置为更可行的值。最大 72 可能是一个合理的起点,然后从那里开始调整。即使您可以使用该数量的进程为所有人提供服务,您也会导致所有进程的速度以相同的比例减慢,并且负载会随着被服务的人数而增加。最好快速提供您可以提供的服务并拒绝您无法提供的服务,而不是非常缓慢地为所有人提供服务。
我感觉你的 WordPress 页面的某些部分计算量很大。尝试缓存一些计算量较大的内容。