Я не могу вернуть свой веб-сервер в онлайн. Сервер просто продолжает зависать, и мне приходится его перезагружать.
Я пользуюсь общим хостингом, поэтому найти виновника еще сложнее.
Как узнать, какая именно страница (или, по крайней мере, какой виртуальный хост) загружает процессор особенно сильно?
У меня CentOS с довольно стандартным набором Apache+MySQL+PHP.
Спасибо!
решение1
Вероятно, лучшей идеей будет установить apachetop.https://code.google.com/p/apachetop/, вы также можете использовать server-status Apache, но apachetop сделает его намного более читабельным.
решение2
Страница на самом деле не имеет никакого отношения к этой проблеме.
Следующая команда должна вывести список pid для httpd, отсортированный по проценту загрузки ЦП, с текущим рабочим каталогом, в котором находится httpd worker.
Конечно, это предполагает, что виновником является httpd.
IFS=" "; ps -A ho pcpu,comm,pid | grep httpd | sort -k1n \
while read pcpu comm pid; do \
echo -n "${pcpu"}: "l pwdx "${pid}";
done
Я получаю вывод, похожий на:
0.0: 1850: /
0.0: 1852: /
0.0: 1854: /
0.0: 1853: /
0.0: 1855: /
0.0: 1856: /
0.0: 1857: /
0.0: 1858: /
Это работает, потому что apache изменит каталоги на корневой каталог документов виртуальных хостов перед выполнением любой работы внутри виртуального хоста. Так что любой виртуальный хост, у которого есть этот корневой каталог документов, является виновником.
Если у вас несколько виртуальных хостов, использующих один и тот же корневой каталог документов, вам придется исследовать оба виртуальных хоста, чтобы узнать, что они делают.
Поскольку у меня нет рабочих процессов Apache, потребляющих процессорное время, все они равны 0,0 и, следовательно, упорядочивание не выполняется.
Если проблема действительно в SQL-запросе, не ждите, что это что-то покажет.