web-dev-qa-db-ja.com

読み取り状態にあるApache httpdプロセスのすべてのPIDを見つける方法

私のRHELのApache Webサーバーは、R(..reading ..)状態の多くのリクエストを表示します。 Apacheを読み取り状態で待機させているクライアントIPを見つけたい。具体的には、要求を送信するのに時間がかかりすぎているすべてのクライアントIPを調べたいと思います。

server-status モジュールでは不十分です。 PIDが読み取り状態の場合、サーバーのステータスにはクライアント情報が表示されません。

3
Sabya

-lフラグを指定したnetstatプログラムを使用して、リスニングプロセスのリストを取得してください。 -pフラグを使用してプロセスPIDを取得できるように、Sudoを指定して実行することをお勧めします。また、-tフラグに、tcpとudpではなくtcpソケットのみを表示することもできます。場合によっては、-nフラグは、ポート番号とIPだけを表示して、サービスと名前に解決せずにいいです。

その後、Apacheプロセスだけをgrepし、出力列からPIDを抽出するだけです。

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

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)"
0
Sabya