У меня нет навыков и знаний, но я пытаюсь решить проблему, когда приложение моего клиента работает ужасно медленно. И я пытаюсь выяснить, где может быть узкое место / проблема.
Так что я побежал
/etc/init.d/apache2 stop && strace -Tf -o /tmp/trace.txt /etc/init.d/apache2 start
И просматривая /tmp/trace.txt, я вижу довольно много следующего.
2540 poll([{fd=21, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) <0.000052>
Кому-нибудь понравится то, что я вижу, и как я могу привязать это к тому, где проблема. Сайт использует MySQL, означает ли это, что невозможно установить соединение с MySQL? Связан ли опрос даже с БД.
Сначала сделайте шаг назад - вы становитесь очень низким, прежде чем обнаружите, в чем проблема. Простой способ сделать это - проверить, не работают ли статические HTTP-страницы из Apache - если это не так, возможно, БД работает медленно. Следующий шаг, который я бы сделал, - это посмотреть, сколько времени занимают запросы к БД.
Кроме того, если все это находится в одной системе, вы можете посмотреть системные ресурсы, такие инструменты, как top
, iotop
, и iostat
.
Учитывая poll
системный вызов:
Я бы попробовал добавить -c
переключитесь на Strace Apache, чтобы узнать, какое у вас время для каждого системного вызова если вы сузите его до apache прежде чем сосредоточиться на системном вызове. Например, верхняя часть моего вывода от работоспособного HAProxy:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
38.79 0.001152 0 6089 epoll_wait
В poll
системный вызов используется для ожидания для доступного событие в файловом дескрипторе. Мое первое предположение, так как таймаут настолько мал, что это нормальное функционирование Apache. Возможно, в Apache заканчиваются файловые дескрипторы, поскольку файловый дескриптор необходим для каждого сетевого сокета, если это действительно проблема. Вы могли посмотреть на Раздел руководства Apache по файловым дескрипторам если вы дойдете до этого момента. Но, по словам DerkK, «это приведет к сбою при open () или socket ()», что имеет гораздо больший смысл.
Так что на самом деле это лишь некоторые подробности о том, что, скорее всего, не является вашей реальной проблемой - снова сделайте несколько шагов назад.