Если вы решили увеличить производительность Apache (а на сегодняшний день это – один из самых популярных веб-серверов Сети), то вам пригодятся те советы, которые мы собираемся дать в этой статье.
1. Работайте только с действительно нужными вам модулями, а все остальное, сразу же и не задумываясь, удаляйте! Дело в том, что в этом случае вы сразу же уменьшите потребления памяти, что и повлечет за собой увеличение скорости. Второй вариант – скомпилировать модули как DSO, при помощи apxs (в apache 1) и apxs 2 в (apache 2), что сократить скорость работы примерно на 11-15%.
2. Правильно выберите MPM (Multi-processing module). Так как главная задача MPM – прослушивать порты, соответствующие установленным требованиям по безопасности, количеству свободной памяти или наличии поддержки потоков в ОС, то следует ограничить выбор на двух MPM – worker и prefork.
Worker – переносит обслуживание запросов в отдельный поток.
Perfork - работаете с несколькими дочерними процессами, каждый из которых отвечает за обработку одного подключения.
Чтобы сменить MPM, вы должны будете перекомпилировать apache при помощи source-based, что сразу же улучшит скорость работы всей системы.
3. Настройка DNS запросов. Во-первых, включите директиву «HostnameLookups» . Во-вторых, сделайте так, чтобы Allow from и Deny From директивах использовались не доменные имена, а IP-адреса, чтобы избавить apache от двойных запросов, которые он будет делать для того, чтобы проверять достоверность данных клиента.
4. Установить AllowOverride директиву в режим «None», иначе apache будет открывать (или пытаться сделать это) все htaccess-файлы в каждой посещаемой директории, а так же файлы выше ее:
Потому если вам нужен .htaccess только какой-нибудь одной директории, то поступите так:
Так же нужно отметит, что при включении для директории:
FollowSymLinks - сервер всегда будет следовать по символическим ссылкам в данной директории;
SymLinksIfOwnerMatch – сервер будет отслеживать ссылки только в случае если данные владельца директории совпадают с данными владельца директории, на которую указывает ссылка.
5. Так же откажитесь от Content Negotiatio.
6. Правильно задайте параметры MaxClients, определяющий количество одновременно обрабатываемых запросов. Найдите для себя оптимальное значение MaxClients, чтобы обслуживать оптимальное число клиентов. При этом следует помнить, что для статических файлов apache требуется 2-3 Мб на процесс, для динамики - 16-32 Мб.
7. Установка MinSpareServers, MaxSpareServers, и StartServers – а она должна привести к тому, чтобы apache отказался от создания 4-х потоков/процессов в 1-у секунду, что позволит не перегружать систему даже при максимальном числе клиентов.
8. Измените значение MaxRequestsPerChild при определении того, сколько запросов должен обработать 1 дочерний поток/процесс до своего завершения. Помните, что это значение (по умолчанию) выставлено как «ноль», потому лучше изменить его на 1000 и больше, что избавит вас от утечки памяти в дочерние процессы, что имеет огромное значение при использовании нестабильной версию PHP.
9. Активируйте KeepAlive и KeepAliveTimeout, которые в отключенном режиме создают отдельный поток для каждого размещенного на html-странице изображения, и «тормозит» страницы с большим числом изображений большого размера. В случаях с download-серверами KeepAlive лучше отключить, что сразу же избавит вас от долго ожидания перед закрытием сервером соединений.
10. Используйте сжатие, что позволит вам уменьшить количество передаваемого трафика на 75 процентов. И делайте это без всякой опаски, так как на сегодня все новейшие клиентские программы и сервера поддерживают HTTP-сжатие в стандарте HTTP/1.1. А постарастья сжать следует видео, музыку, и все jpg, gif png файлы.
Следует отметить, что параметры кэширование задаются директивами модуля mod_deflate. При этом не стоит устанавливать степень сжатия gzip более 4 или 5, так как это увеличит время CPU, и снизит общий эффект.
11. И конечно же не забывайте устанавливать на статических файлах (для этого применяется модуль mod_expires) Expires заголовки. Или закэшируйте его на клиенте в том случае, если файл не изменяется, что освободит сервер от лишних запросов, а клиент получит более быстро загружаемую страницу.
На новых VPS часто появляются проблемы с производительность работы Apache. Дело в том, что конфигурационные файлы которые создаются после установки Apache далеко не оптимизированы.
Симптомы плохой настройки могут быть работа VPS с обжорством RAM на 100% или CPU на 100%. После выполнения команды top или htop(если не работает выполните apt-get install htop) на первых строках будет процесс apache.
Я покажу оптимальный конфиг. файл для VPS
Оперативная память: 512 MB
Процессор: 2267 MHz
ОС: Debian 5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# # Timeout: The number of seconds before receives and sends time out. # Timeout 300 # # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On # # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # MaxKeepAliveRequests 100 # # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 15 ## ## Server-Pool Size Regulation (MPM specific) ## # prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <ifmodule mpm_prefork_module=""> StartServers 3 MinSpareServers 3 MaxSpareServers 10 MaxClients 100 MaxRequestsPerChild 0 </ifmodule> # worker MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <ifmodule mpm_worker_module=""> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </ifmodule> <pre class="lang:default decode:true"> |
В этом файле настроек можно поменять следующие параметры:
- MaxClients – ограничение максимального числа
одновременно запущенных процессов httpd. т.е. по сути установка лимита
на сжирание памяти самым “голодным” процессом httpd - StartServers -устанавливает число дочерних процессов при запуске сервера.
- MinSpareServers – минимальное число неиспользуемых дочерних процессов.
- MaxSpareServers - соответственно максимальное число неиспользуемых дочерних процессов.
- MaxRequestsPerChild – максимальное количество запросов, которое разрешено обрабатывать дочернему процессу до переполнения. Нужен данный параметр, чтобы избежать утечку памяти или других ресурсов Apache, так как при переполнении дочерний процесс будет
принудительно завершен. В большенстве случаев изменение не требуется. Значение 0 – озхначает отсутствие ограничений.