У меня есть 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 читаются при каждом запросе.