Я подозреваю, что часто используется какой-то конкретный большой файл или URL, но я не могу понять, какой именно. Рекомендуются ли какие-либо стандартные инструменты или шаги для устранения неполадок? Спасибо!
Ну, моим первым инстинктом, если бы я считал, что замедление происходило из-за чрезмерного трафика по URL-адресу или файлу, было бы проверить журналы веб-сервера или любую имеющуюся аналитику. Это расскажет вам, какой трафик вы испытываете.
Если вы считаете, что проблема связана с пропускной способностью, вы можете проверить несколько вещей:
Следующие два сценария я использую, чтобы получить общее представление о статусе соединений на сервере с помощью netstat. Первый просто отображает количество подключений в зависимости от типа подключения:
#!/bin/sh
# Display number of connections on a server
#
echo -n $"Established: "
netstat -an | grep ESTABLISHED | wc -l
echo -n $" Syn Recv: "
netstat -an | grep SYN | wc -l
echo -n $" Wait: "
netstat -an | grep WAIT | wc -l
echo -n $" Listen: "
netstat -an | grep LISTEN | wc -l
echo -n $" Total: "
netstat -an | wc -l
Обратите внимание, что наличие большого количества соединений в состоянии WAIT является нормальным (по крайней мере, из того, что я наблюдал). Большое количество SYN-соединений может использоваться для DOS-атаки SYN-флуда.
Следующий сценарий подсчитывает количество установленных подключений по IP-адресу и полезен, чтобы увидеть, есть ли один конкретный некорректный IP-адрес.
#!/bin/sh
# Counts the number of connections by IP address
netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Если ваш сервер находится под большой нагрузкой и у вас есть 1000 подключений, этот скрипт может занять немного времени (~ 1 минуту в худшем случае, который я видел).
Обратите внимание, что в зависимости от вашего приложения несколько записей на IP - это не обязательно плохо. Например, в моем случае 10-20 записей / IP - это нормально, но превышение этого количества подозрительно. Я видел «плохие» IP-адреса, которые либо запрашивали один и тот же документ / файл 100 раз, либо просматривали каждый файл на сайте и загружали его. Последний скрипт позволяет относительно легко определить эти IP-адреса, которые вы затем можете использовать для просмотра в своих журналах более подробной информации, если это необходимо.
Не существует общего способа отладки плохой производительности веб-сервера, но есть некоторые инструменты, которые могут быть вам полезны. Я предполагаю, что вы используете какой-то HTTP-стек под Linux.
LogFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" % T /% D combined
Затем попробуйте определить самые длинные GET или POST из файла журнала. apachetop -f /var/log/apache2/access.log
даст вам хороший обзор ожидающих запросовКаждый системный администратор, который боролся с такими проблемами, как ваш, вероятно, перечислил бы еще много быстрых подсказок, но факт в том, что все эти правила очень сильно зависят от среды (оборудование, операционная система, веб-сервер, приложение, база данных) и могут быть только изучены. по опыту. Часто довольно болезненно.
Рассмотрите возможность мониторинга системы с помощью такого инструмента, как sar
или Munin
. Это даст вам информацию о том, какой компонент наиболее загружен. Мне нравится Munin за его графические отчеты, а также за возможность устанавливать оповещения. sar дает подробную информацию о диске и свопинге.
Включение времени обслуживания в журнал Apache полезно. Я обычно меняю поле удаленного логина (идент) (%l
) со временем, затраченным на обслуживание запроса (%T
) в расширенном формате журнала.