Найдите процесс, который тормозит Apache

Найдите процесс, который тормозит Apache

Я программирую веб-страницу на PHP и начал замечать странное поведение своего компьютера. В какой-то момент Apache / PHP слишком долго отображает веб-страницу в браузере (8 секунд). Сначала я подумал, что это ошибка в моем приложении, поэтому создал функцию отладки, чтобы отслеживать время, необходимое для завершения моего скрипта. Но когда я начал перезагружать страницу несколько раз (нажимая F5), я заметил, что это не мой скрипт, а какой-то другой процесс останавливает Apache (или PHP, или MySQL), а затем отпускает его. Несколько нажатий F5 показывают, что иногда скрипт завершается быстро, а иногда — долго:

[time_start] => Array
    (
        [0] => 1446841239.1471
        [1] => 0.0581
        [2] => 0.0589
        [3] => 0.0564
        [4] => 8.0531
        [5] => 0.0574
        [6] => 0.0621
        [7] => 8.0582
        [8] => 0.0548
        [9] => 8.0457
        [10] => 0.0755
        [11] => 8.0555
        [12] => 0.0512
        [13] => 8.0447
        [14] => 0.062
        [15] => 8.0905
        [16] => 0.0602
        [17] => 8.0556
        [18] => 0.0582
        [19] => 8.0492
        [20] => 0.0551
    )

Каждый шаг — это один и тот же скрипт, который запускается после нажатия F5, и он должен всегда занимать одно и то же время, но иногда для его завершения требуется 8 секунд, и это меня раздражает, потому что когда он останавливается, он ВСЕГДА занимает около 8 секунд.

Итак, вопрос в том, есть ли у меня идеи, как найти процесс, который тормозит мой скрипт?

P.S. У меня много приложений запущено на переднем плане, так как это мой персональный компьютер, но даже когда я использую только браузер без запущенных других приложений, он все равно зависает, так что это должно быть что-то работающее в фоновом режиме. Как мне это найти?

решение1

Постоянные 8 секунд означают, что для какой-то потенциально длительной процедуры установлен тайм-аут. Не зная, что делает код PHP, я предполагаю, что у вас есть время DNS. Если PHP выполняет сетевой ввод-вывод или что-то в этом роде, он, вероятно, запускает поиск DNS. Время от времени вы видите, что запрос DNS истекает, и PHP продолжает делать то, что он делает в этом случае.

Единственное место, где я вижу, что установлены тайм-ауты DNS, это в /etc/resolv.conf, или, может быть, когда resolver(3)код в GNU libc компилируется. К сожалению, страница руководства resolv.confутверждает, что 5-секундный тайм-аут — это скомпилированное значение по умолчанию, поэтому я могу только предположить.

Связанный контент