Home > Apache > Оптимизация использования памяти для Apache

Оптимизация использования памяти для 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” вполне подойдет
  • Если ничего не помогает, то нужно попытаться определить какой из виртуалхостов самый прожорливый. Можно просто по очереди тестировать сайты на сервере при помощи loadimpact и наблюдать за нагрузкой. Скорее всего найдется код создающий максимальную нагрузку по памяти. Далее можно пойти путем оптимизации кода либо попрбовать перенести именно этот виртуалхост на php в режиме fast cgi.
  • Так же нужно не забывать про возможность просто взять более мощный сервер. Благо, например, у Hetzner за смешные деньги можно арендовать сервер с 8 и более ГБ памяти. Часто это может оказаться самым “дешовым” решением.

Apache ,

  1. February 21st, 2011 at 13:24 | #1

    А если известно какой сайт поедает память больше всего, как увидеть какие именно процессы этого сайта сколько поедают?

  2. admin
    February 21st, 2011 at 15:16 | #2

    Тут уже речь идет не о процессах, а о конкретных скриптах. Надо смотреть как написан сайт. Если это CMS, то пробовать отключать плагины, модули. Спросить в сообществе разработчиков этой CMS, что в ее движке любит память больше всего.
    Если сайт самописный то сложнее, надо просто анализировать код, искать не оптимальные места. Может быть где-то в память грузится каталог товаров на несколько тысяч наименований и память не освобождается.

  3. June 17th, 2011 at 20:16 | #3

    Привет!
    Слушай, ты веб-морду к server-status ставил? А то ищу Visualize Apache Server Status , не могу скачать.

  4. admin
    June 18th, 2011 at 05:06 | #4

    Не ставил, а какие он дает преимущества по сравнению с server-status?

  5. June 18th, 2011 at 22:55 | #5

    Просто можно наблюдать на графиках что творилось с апачем вчера, и т.д..

  6. June 23rd, 2011 at 16:11 | #6

    admin – там работает тот же сервер-статус, просто скачиваются пара файлов которые генерируют графики

  7. September 20th, 2011 at 19:18 | #7

    Спасибо большое за статью.
    Буду разбираться, у меня 8Гб памяти стоит, но много сайтов на вордпрессе.
    Что ни день, то система по несколько раз в коллапс уходит.
    Уже и так и сяк сайты оптимизирую, и кешевские плагины понаставил и все равно система слетает от перегрузок.
    Млин, уже больше года как мучаюсь.
    Еще раз спасибо большое !

  8. admin
    September 21st, 2011 at 07:52 | #8

    Пробуйте найти какой плагин больше всего памяти жрет.

  1. No trackbacks yet.