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

как понять, чем занят апач?

У меня есть Apache на сервере Linux и скрипт Python внутри него (точнее, Trac). При минимальном трафике он потребляет 99% ЦП, а средняя нагрузка превышает 3,00. Можно как-то понять, что он там делает - диск, сеть, какие файлы и т.д.? Есть ли какие-то инструменты для анализа того, чем занят конкретный процесс?

Редактировать: strace apache2 -X показал мне много строк с похожим содержанием:

stat("/home/foo/apache/conf.d/trac-XXX.conf", {st_mode=S_IFREG|0644, st_size=1014, ...}) = 0
open("/home/foo/apache/conf.d/trac-XXX.conf", O_RDONLY|O_CLOEXEC) = 6
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a93021000
fstat(6, {st_mode=S_IFREG|0644, st_size=1014, ...}) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a9301e000
read(6, "contents of my trac-XXX.conf"..., 4096) = 1014
read(6, "", 4096)                       = 0
close(6)               

И те же строки для каждого файла в /home/foo/apache/conf.d/ каталог (у меня их сотни). Вы знаете, как интерпретировать эту информацию и решить проблему? Похоже, Apache перезагружает все файлы конфигурации при каждом HTTP-запросе.

Ты можешь использовать strace (man strace). Как root попробуйте

strace `ps -e | grep apache2 | awk '{ print "-p"$1 }'`

или подобное с trac вместо того apache2. Вы также можете настроить LogLevel к debug.

Следующее редактирование - дикий снимок в темноте, незнакомого с Trac.

В комментариях после Билет на поезд 3833 Osimons утверждает:

Если вы, например, не используете mod_python, а вместо этого используете простую настройку CGI, Environment полностью перезагружается для каждого запроса. Такой запрос практически не имеет истории - запускается процесс Python, загружаются модули, начинается обработка Trac, а когда запрос выполняется, весь процесс Python умирает.

Причина, по которой это также работает, заключается в том, что конкретная информация запроса (например, ваш пример предварительного просмотра) передается в качестве аргументов объекту запроса - доступному внутри контекста req.

Итак, вопрос в том, используете ли вы mod_python или простой CGI для запуска Trac? Если вы используете простой CGI, тогда понятно, почему файлы конфигурации Trac читаются при каждом запросе.