У меня есть веб-сервер linux. Он запускает Apache и веб-приложение на основе Python и postgres. Это довольно медленно. Бегом ab
(тест apache) и vmstat
Я видел, что он менял местами, пока поступали запросы.
Есть ли какая-нибудь программа, которая динамически сообщит мне, какие процессы вызывают эту подкачку?
iotop вероятно, то, что вам нужно. Вероятно, вам понадобится установленный Python 2.5 или выше. Вам также понадобится несколько включенных опций ядра (2.6.20 или новее) (TASK_DELAY_ACCT и TASK_IO_ACCOUNTING), чтобы нужные метрики были представлены в / proc, чтобы iotop мог их использовать.
Вы обязательно должны удалить все ненужные модули из apache. Это имеет значение много. Отключите расширенный статус, автоматическое индексирование и т. Д.
установка AllowOverride как «None» и выполнение любых действий с htaccess в конфигурации сервера поможет с вводом-выводом и уменьшит время отклика, что приведет к меньшему использованию памяти в минуту.
Видеть руководство по производительности apache.
Также ищите документацию postgresql, чтобы повысить производительность и уменьшить использование памяти.
Вероятно, ваша самая большая проблема с памятью - это программа python, поскольку python не очень оптимизирован для использования с низким объемом памяти. Вы можете попробовать профилировщик в приложении.
Если активность выполняется при выполнении большого количества HTTP-запросов, а не в другое время, то это будут процессы Apache и python, которые активно вызывают активность подкачки.
Без дополнительной информации мы не можем сказать ничего больше.
В целом, чтобы уменьшить использование памяти Apache, вам необходимо уменьшить количество дочерних процессов, которые он запускает, путем изменения файлов конфигурации, то же самое для количества процессов python, если вы используете FastCGI.
Но основная проблема ...
Мы не можем видеть или много знать о том, как Linux обрабатывает память с помощью текущих команд ps или top. Это тайна.
И даже более того, с многоядерными системами, приложения системного учета в Linux должны улучшаться.