Назад | Перейти на главную страницу

какой pid использовать для настройки моего apache

Мой apache2 работает медленно. Обработка одного файла PHP занимает много времени. Сервер жив. Я не хочу его перезапускать. Я подумал, что прикрепляю strace к нему и проверьте, что происходит.

Так что я бегу

strace -p `cat /var/run/apache2.pid `

После этого я загружаю несколько тестовых URL. Загрузите потом много раз. Но я не видел вывода на strace приставка!

Затем я вспоминаю, что есть много дочерних процессов. Я проверил их

$ ps ax | grep apache[2] -i
 1877 ?        Ss     0:02 /usr/sbin/apache2 -k start
 2006 ?        S      0:00 /usr/sbin/apache2 -k start
 2007 ?        S      0:00 /usr/sbin/apache2 -k start
 2008 ?        S      0:00 /usr/sbin/apache2 -k start
 2009 ?        S      0:00 /usr/sbin/apache2 -k start
 2010 ?        S      0:00 /usr/sbin/apache2 -k start
 9985 ?        S      0:00 /usr/sbin/apache2 -k start
 9988 ?        S      0:00 /usr/sbin/apache2 -k start
 9997 ?        S      0:00 /usr/sbin/apache2 -k start
 9998 ?        S      0:00 /usr/sbin/apache2 -k start
 9999 ?        S      0:00 /usr/sbin/apache2 -k start

Теперь у меня вопрос: как связать все эти дочерние процессы? Как узнать, какой дочерний процесс обрабатывает запрос прямо сейчас?

Короткий ответ: вы не можете предсказать, какой процесс apache обработает запрос.

Самый простой способ решить эту проблему - выделить xterm для каждого процесса apache и запустить strace -p <pid> в нем для каждого pid apache.

Когда я в такой ситуации, я обычно делаю это в своем httpd.conf (на коробке разработки):

<IfModule prefork.c>
StartServers       1  <--------
MinSpareServers    1  <--------
#StartServers       8
#MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

Это уменьшает количество процессов, которые мне нужно отслеживать ... очевидно, это не лучшее решение для производственной среды.

К вашему сведению, если вам нужно strace процесс, который разветвляется после запуска stracing (например, wsgi процесс) вы можете использовать strace -fp <pid_of_future_forker> и это будет strace раздвоенные дети автоматически.