Strace опрос, пытаясь диагностировать узкое место

У меня нет навыков и знаний, но я пытаюсь решить проблему, когда приложение для клиентов работает очень медленно. И я пытаюсь выяснить, где может быть узкое место / проблема.

Итак, я побежал

/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 не может быть установлено? Является ли опрос даже БД связанным.

1 ответ

Сначала сделайте шаг назад - вы получаете очень низкий уровень, прежде чем узнаете, в чем проблема. Простой способ сделать это - проверить, работают ли статические HTTP-страницы медленно от Apache - если нет, то, возможно, медленная БД. Следующий шаг, который я хотел бы сделать, это посмотреть, сколько времени занимают запросы к БД.

Кроме того, если это все в одной системе, вы можете посмотреть на системные ресурсы, такие инструменты, как top, iotop, а также iostat,


Учитывая poll системный вызов:

Я бы попробовал добавить -c переключитесь на полосу 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()", что имеет гораздо больше смысла.

Так что на самом деле это всего лишь некоторые детали того, что, скорее всего, не является вашей реальной проблемой - снова сделайте несколько шагов назад.

Другие вопросы по тегам