什么可能导致 apache 服务器锁定“发送回复”进程?

bla*_*arg 5 centos apache-2.2

我将 CentOS 服务器作为 LAMP 堆栈运行,为自定义 php 应用程序提供服务。在看似随机的时间间隔内,它会减慢速度。查看服务器状态页面,我看到 PID 列表被锁定,其中有几个相同的 ajax 调用都是从一个用户的客户端 IP 请求的。(IP 变了,但始终只有一个)

我看到 'M' 参数状态是 W for "Sending Reply",这意味着什么?

缓慢通常会在 5 分钟到一个小时后自行解决。然而前几天我决定执行一个:

service httpd restart graceful.
Run Code Online (Sandbox Code Playgroud)

这完全解决了问题 - 10 分钟。以下是 14 分钟后的服务器状态,缓慢且锁定。请求似乎很快增加到 50,服务器速度变慢。

需要考虑的要点:

  • 多个请求总是来自同一个 IP
  • 请求的最长持续时间 (SS) 约为 200 秒
  • 所有请求都发送到一个 ajax.php 脚本
  • 放缓有时不会在几周内发生,然后在几天内发生几次
  • 用户在服务器地址的浏览器中只打开了几个标签 ~ 总共 25 个
  • 显然最糟糕的问题发生在下午晚些时候

在此处输入图片说明

所以我的问题是什么可能导致这种锁定,为什么所有的请求"Sending Reply"

这是httpd.conf

<IfModule worker.c>
StartServers         2
MaxClients          50
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
Run Code Online (Sandbox Code Playgroud)

peh*_*hrs 4

看起来这些连接卡住了很长一段时间(SS 是请求所花费的时间,其中一些连接持续了几分钟)。

我的直觉告诉我查看数据库和 PHP 应用程序。检查池中是否有足够的可用连接,检查维护任务(完全真空可能会长时间锁定数据库!)并记录长查询以查看您是否正在执行可能锁定重要表的操作。它也可能是 PHP 脚本中的一个问题,导致其无法及时终止。

是一个页面,其中包含针对此类情况的一些有用的调试技巧。