Веб-сервер 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)"