Оптимизация использования памяти для Apache
October 6th, 2010
Памяти никогда много не бывает. И по мере роста трафика сервер может начать свопиться, а это очень плохо. Посмотрим что же можно сделать:
- Во-первых, сначала надо убедиться, что перед апачем установлен nginx (ну или лайти) и он отдает напрямую всю статику: графику, видео, js, css, какие-либо архивы и прочее. Для контроля очень удобно воспользоваться встроенными возможностями апача просмотра статуса:
<Location /server-status>
SetHandler server-status
</Location>
ExtendedStatus On - Обязательно нужно внимательно пройтись по конфигу апача и закомментировать загрузку неиспользуемых модулей
- Так же нужно проконтролировать, чтобы максимальное одновременное количество клиентов апача не превышало объема установленной на сервере памяти. Просто делим общее количество памяти на количество занимаемое одним процессом апача за минусом памяти под mysql и прочее. Иначе система уйдет в своп и катастрофически деградирует.
StartServers 3
MinSpareServers 3
MaxSpareServers 5
ServerLimit 12
MaxClients 12 - Так же можно поставить MaxRequestsPerChild поменьше (~500) чтобы форки апача почаще перезапускались и освобождали память.
- Если используется Eaccelerator, то надо проверить что eaccelerator.shm_size не очень большое, = “64″ вполне подойдет
- Если ничего не помогает, то нужно попытаться определить какой из виртуалхостов самый прожорливый. Можно просто по очереди тестировать сайты на сервере при помощи и наблюдать за нагрузкой. Скорее всего найдется код создающий максимальную нагрузку по памяти. Далее можно пойти путем оптимизации кода либо попрбовать перенести именно этот виртуалхост на php в режиме fast cgi.
- Так же нужно не забывать про возможность просто взять более мощный сервер. Благо, например, у Hetzner за смешные деньги можно арендовать сервер с 8 и более ГБ памяти. Часто это может оказаться самым “дешовым” решением.

А если известно какой сайт поедает память больше всего, как увидеть какие именно процессы этого сайта сколько поедают?
Тут уже речь идет не о процессах, а о конкретных скриптах. Надо смотреть как написан сайт. Если это CMS, то пробовать отключать плагины, модули. Спросить в сообществе разработчиков этой CMS, что в ее движке любит память больше всего.
Если сайт самописный то сложнее, надо просто анализировать код, искать не оптимальные места. Может быть где-то в память грузится каталог товаров на несколько тысяч наименований и память не освобождается.
Привет!
Слушай, ты веб-морду к server-status ставил? А то ищу Visualize Apache Server Status , не могу скачать.
Не ставил, а какие он дает преимущества по сравнению с server-status?
Просто можно наблюдать на графиках что творилось с апачем вчера, и т.д..
admin – там работает тот же сервер-статус, просто скачиваются пара файлов которые генерируют графики
Спасибо большое за статью.
Буду разбираться, у меня 8Гб памяти стоит, но много сайтов на вордпрессе.
Что ни день, то система по несколько раз в коллапс уходит.
Уже и так и сяк сайты оптимизирую, и кешевские плагины понаставил и все равно система слетает от перегрузок.
Млин, уже больше года как мучаюсь.
Еще раз спасибо большое !
Пробуйте найти какой плагин больше всего памяти жрет.