如何找出所有处于读取状态的 Apache httpd 进程的 PID?

如何找出所有处于读取状态的 Apache httpd 进程的 PID?

我的 RHEL 中的 Apache Web 服务器显示许多请求处于 R(正在读取)状态。我想找出使 Apache 处于读取状态的客户端 IP。具体来说:我想找出所有处于读取状态的客户端 IP发送请求的时间太长

服务器状态模块不够,当PID处于读取状态时,服务器状态不显示客户端信息。

答案1

尝试使用netstat带有标志的程序-l来获取监听进程列表。您可能希望使用标志来运行它,sudo以便可以使用-p标志获取进程 PID。您可能还希望标志-t仅显示 tcp 套接字而不是 tcp 和 udp。有时标志-n可以很好地显示端口号和 IP,而无需将它们解析为服务和名称。

之后,只需对 apache 进程进行 grep,然后从输出列中提取 PID:

sudo netstat -lntp | grep httpd | awk -F '[/ ]*' '{print $7}'

答案2

为了找出在 HTTP 请求读取阶段花费超过 15 秒的连接的详细信息,我编写了这个命令:

links http://localhost/server-status | tee | grep "..reading.." | awk '{if ($6>15) print "lsof -a -n -i TCP -p"$2}' | sh |  grep -E "TCP.*(ESTABLISHED)"

相关内容