Назад | Перейти на главную страницу

как узнать все PID процессов Apache httpd, находящихся в состоянии чтения?

Веб-сервер Apache в моем RHEL показывает множество запросов в состоянии R (..reading ..). Я хочу найти клиентские IP-адреса, которые заставляют Apache ждать в состоянии чтения. В частности: я хочу узнать все IP-адреса клиентов, которые тратить слишком много времени на отправку запроса.

В Статус сервера модуля не хватает. Статус сервера не показывает информацию о клиенте, когда PID находится в состоянии чтения.

Попробуйте использовать netstat программа с -l флаг, чтобы получить список прослушиваемых процессов. Вы, вероятно, захотите запустить его с sudo так что вы можете использовать -p флаг для получения PID процесса. Вы также можете захотеть -t флаг, чтобы показывать только сокеты tcp вместо tcp и udp. Иногда -n flag удобен для отображения только номеров портов и IP-адресов, не разрешая их в службы и имена.

После этого нужно выполнить greping только для вашего процесса apache, а затем извлечь PID из выходных столбцов:

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

Чтобы узнать подробности о соединениях, которые тратят более 15 секунд на чтение HTTP-запроса, я написал эту команду:

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