我的 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)"