简单进程中 Apache CPU 占用非常高

简单进程中 Apache CPU 占用非常高

我的 Apache 服务器处于停滞状态,连接数达到最大值,CPU 使用率达到 500%。几个月来它一直运行良好,但今天发生了一些事情,让它变得异常。非常简单的 Apache 进程占用了大量 CPU:

Srv PID Acc M   CPU SS  Req Conn    Child   Slot    Client  VHost   Request
0-0 31154   0/45/45 R   23.85   3   1   0.0 0.47    0.47    ?   ?   ..reading..
0-0 31154   0/36/36 _   24.66   0   1   0.0 0.43    0.43    81.152.251.175  mysite.net  GET /css/dwn.css    HTTP/1.1
0-0 31154   0/33/33 R   23.92   2   179 0.0 0.69    0.69    ?   ?   ..reading..
0-0 31154   0/1/1   W   0.07    119 0   0.0 0.00    0.00    117.102.163.190 mysite.net  POST    /includes/offers/ajax.php   HTTP/1.1
0-0 31154   1/64/64 C   24.74   0   1   26.8    1.85    1.85    24.127.122.188  mysite.net  GET /images/soc.png HTTP/1.1
0-0 31154   0/51/51 _   24.87   0   899 0.0 0.78    0.78    86.111.144.194  mysite.net  GET /includes/offers/window.php?file=57860&tooltip=true HTTP/1.
0-0 31154   0/18/18 R   11.00   77  1   0.0 0.27    0.27    ?   ?   ..reading..

如您所见,简单请求..reading..和类似请求GET /images/soc.png HTTP/1.1占用了 24.5+ 的 CPU 量。我想知道这是否是某种日志记录错误,服务器试图处理巨大的日志文件。请告诉我你们对此的看法。

答案1

您提供的样本很小,但我以前见过类似的事情。问题可能实际上不是 Web 服务器,请进一步查看上游的数据库等。数据库是否已达到最大连接数或正在受到惩罚?

如果您有很多进程处于发送回复状态,您会看到类似的症状,例如...

> 0-0 31154   0/1/1   W   0.07    119 0   0.0 0.00    0.00   
> 117.102.163.190 mysite.net  POST    /includes/offers/ajax.php   HTTP/1.1

请注意,在“发送回复状态”(W) 中,自最近请求开始以来的秒数 (SS) 时间很高。

答案2

请提供您的 httpd.conf 文件,我可以看到所有线程都使用相同的 PID,这可能会导致每个线程的子进程数量受到限制。另外,正如您所提到的,您的服务器在尝试读取时卡住了,这可能表明尝试从没有响应的数据库获取某些数据时出现了问题,但这也可能表明您的配置存在问题,您应该调整请求 TTL。如果您愿意,可以在 php 级别完成此操作。

相关内容