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

Скрипт Apache для установки с низким объемом памяти

Я работал над улучшением использования памяти на нашем Centos 5.5 VDS, который теперь имеет 512 МБ ОЗУ. Я смог использовать сценарий настройки, чтобы значительно улучшить конфигурацию MySQL, но у меня немного больше проблем с уменьшением использования памяти Apache. Частично моя проблема заключается в противоречивых рекомендациях на различных веб-сайтах, форумах и т. Д. Будучи производственным сервером, обычный цикл модификации и тестирования, который я бы использовал на тестовой машине, был бы слишком разрушительным.

Чтобы добавить к моему недоумению, у меня есть машина разработчика, настроенная настолько близко, что я могу сделать ее клоном VDS, и она использует меньше оперативной памяти с той же самой конфигурацией Apache. Хотя, очевидно, сложно применить одну и ту же нагрузку, я очень близок, сравнивая их в спокойное время дня или ночи.

Есть ли сценарий настройки для Apache, подобный тем, которые доступны для MySQL, который может помочь оптимизировать конфигурацию, анализируя, что происходит во время работы сервера?

Редактировать:

Либо я не понял, либо люди не читают вопрос, поэтому я уточню.

Я не прошу никого давать рекомендации или предлагать альтернативы. Я спрашиваю, знает ли кто-нибудь здесь сценарий, который может анализировать, что происходит на сервере, и давать рекомендации относительно конфигурации Apache на основе этой информации.

Я не знаю ни одного такого сценария для Apache, вероятно, потому что, по сравнению с MySQL, есть только несколько вещей, которые влияют на использование памяти Apache:

  1. MaxClients: чем больше клиентов, тем больше памяти используется.
  2. Моды: аналогично, чем больше модов / расширений установлено, тем больше требуется памяти.
  3. Динамические сценарии: выполнение динамических сценариев, таких как PHP, может увеличить использование памяти в зависимости от ваших настроек Apache. Например, предположим, что у вас есть 10 небольших файлов PHP и один редко используемый большой / файл с интенсивным использованием памяти. В конечном итоге все клиенты Apache будут запускать этот большой PHP-скрипт и использовать больше памяти.
  4. Время компиляции: я мало играл с настройками времени компиляции Apache, но я не удивился бы, если бы там можно было найти некоторую экономию памяти.

Ниже перечислены некоторые конкретные вещи, которые вы можете попробовать. Попробуйте сначала измерить эффект и протестировать на своей платформе разработки, если это возможно, и / или постепенно внедряйте любые изменения на рабочем сайте.

  1. Держать MaxClients как можно ниже. На сайтах с небольшим объемом вам, вероятно, сойдет с рук цифры меньше 10. Вы также можете оставить другие связанные настройки лайк MaxSpareServers низкий.
  2. Сравните предварительные и рабочие режимы Apache, чтобы увидеть, есть ли какие-либо существенные различия в использовании памяти.
  3. Удалите все моды / расширения, которые вы фактически не используете. Это может быть сложнее, чем кажется, поскольку не всегда легко определить, какие из них вы используете.
  4. Используйте низкое значение (100–1000) для MaxRequestsPerChild если вы используете какие-либо динамические сценарии или видите, что экземпляры Apache замедляют увеличение использования памяти с течением времени. Это предотвращает чрезмерное использование памяти скриптами, страдающими от недостатка памяти или утечки.
  5. Изучите оптимизацию памяти во время компиляции только в том случае, если вам это действительно нужно или если у вас есть большой опыт компиляции Apache. Лично я бы изучил альтернативные серверы перед этим шагом.

Почему бы не взглянуть на веб-сервер с небольшим объемом памяти: NGINX? Он известен тем, что использует мало памяти и рекомендуется для сайтов, работающих на VPS.

В любом случае, 400 МБ в наши дни - это немного для веб-сервера, и вы можете подумать о замене коробки! Apache2 съедает много памяти. Он должен быть настроен, а параметры конфигурации сбивают с толку.

Отредактируйте свои конфигурации apache, обычно в /etc/apache2/apache2.conf

В настройках mpm_prefork_module установите StartServers на 1, MinSpares на 1 или 0, а MaxSpares на что-то вроде 3. Например, 10 запущенных процессов будут перегружать сервер размером 512 МБ (минимум по умолчанию для Apache2 составляет 256 МБ, но вы ничего не можете сделать. с этим!). Для уменьшения занимаемой площади / небольшого трафика на сервере вы можете попробовать что-то вроде этого:

<IfModule mpm_prefork_module>
     StartServers          2
     MinSpareServers       2
     MaxSpareServers       3
     MaxClients          150
     MaxRequestsPerChild   500
</IfModule>

Измените указанные выше настройки при тестировании нагрузки трафика, чтобы увидеть, могут ли новые настройки справиться с этим.

Вы можете настроить Apache KeepAlive на более низкое значение (2 ~ 5 в моем случае), что может ожидать меньше серверных процессов, ожидающих соединений незанятых клиентов, которые могут не запрашивать больше контента.

 KeepAlive On
 KeepAliveTimeout 2
 MaxKeepAliveRequests 80

Уменьшите время ожидания сервера перед ошибкой запроса:

 Timeout 45

Вы также можете прочитать это: http://httpd.apache.org/docs/2.0/misc/perf-tuning.html

Но опять же, эта настройка предназначена для очень небольшого трафика. и NGINX может делать гораздо больше с тем же оборудованием ..