Apache не хватает памяти

Обновлено: 05.07.2024

В наши дни все ждут от сайтов молниеносной скорости загрузки. В этой статье мы рассмотрим лучшие методы оптимизации сервера Apache.

Что замедляет сервер?

Работа веб-серверов может замедляться из-за вредоносных программ, больших объемов трафика или из-за неправильного распределения ресурсов. Есть два пути ускорения работы веб-сервера Apache:

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

Отслеживание производительности, завершение процесса-нарушителя и установление лимитов выделенных ресурсов, чтобы в будущем предотвратить возникновение подобных проблем.

Периодический аудит производительности и настройка Apache.

Позволяет найти уязвимости сервера и защитить их.

Как ускорить работу Apache?

Настроить производительность Apache таким образом, чтобы она соответствовала объемам получаемого трафика. Таким образом можно добиться 50% ускорения работы.

5 шагов для ускорения работы Apache

Ускорить работу Apache можно на двух основных стадиях:

Настройки для ускорения Apache во время компиляции

Нужно выбирать вариант установки Apache, исходя из ваших требований. Это поможет создать быстрый и эффективный веб-сервер.

Загружайте только нужные модули

В Apache функциональность реализуется путем добавления модулей. Они бывают двух типов: статические и динамические (общие).

Статические и динамические модули : ключевые различия

Статические модулиДинамические модули
Компилируются в бинарные файлыДобавляются во время выполнения
Требуют перекомпиляции кодаПерекомпиляция не требуется
Быстро загружаютсяЗамедляют веб-сервер

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

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

Чтобы увеличить скорость работы и производительность, используйте минимальное количество динамических модулей, поскольку они уменьшают объем доступной памяти.

Выберите правильный MPM

В Apache используются MPM (мульти-процессинговые модули), которые обрабатывают запросы, приходящие на сервер. Они прослушивают сетевые порты сервера, принимая запросы и создавая дочерние процессы.

MPM – Prefork и Worker

MPM Prefork MPM Worker
Один потокНесколько потоков
Использует больше ресурсовИспользует меньше памяти
ОтказоустойчивСправляется с большим трафиком

При использовании MPM Worker Apache работает в режиме многопоточного сервера, где каждый отвечает за свой запрос. Этот вариант подходит для обработки большего трафика при ограниченных мощностях сервера.

По умолчанию большинство установок Apache используют модуль Prefork. Он применяется для обработки больших объемов трафика. Вы можете проверить, какой модуль MPM использует ваш сервер при помощи следующей команды:

Выберите правильный MPM

В Apache 2.4 появилась поддержка э MPM модуля Event, который может обрабатывать множественные запросы внутри одного потока. Поэтому он работает даже быстрее, чем модуль Worker.

Ускорение работы Apache изменениями во время выполнения

Чтобы повысить производительность сервера, нужно регулярно измерять производительность и осуществлять тонкую настройку конфигурации. Наиболее важные параметры, которые нужно оптимизировать:

Поиск DNS

Apache может тратить время на определение хоста каждого IP, с которого приходит запрос. Это замедляет обработку запроса, а также приводит к пустой трате ресурсов. Чтобы избежать этого, нужно отключить опцию HostnameLookups.

При настройке директив Allow from или Deny from используйте IP-адреса вместо доменных имён. Иначе будет осуществляться двойной поиск имени DNS, который уменьшит производительность сервера.

Настройка AllowOverride

Если задана опция AllowOverride, то Apache попытается открыть файл .htaccess в каждой папке, которую он посещает. Эти дополнительные запросы к файловой системе увеличивают время отправки ответа с сервера.

Поэтому лучше отключить эту опцию. Если переопределение настроек в файлах .htaccess необходимо в определённой папке, нужно разрешить это только для данного каталога.

Настройки FollowSymLinks и SymLinksIfOwnerMatch

Настройка Apache FollowSymLinks сообщает серверу, что нужно проверять символические ссылки и проходить по ним. Если она имеет значение Off, Apache придётся выполнять дополнительные проверки, что замедлит его работу.

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

Лучше всего активировать директиву FollowSymLinks и выключить директиву ‘SymLinksIfOwnerMatch’. Но это может привести к проблемам с безопасностью, поэтому окончательное решение остается за вами.

Согласование содержимого (Content Negotiation)

Согласование содержимого позволяет клиентам выбирать формат данных, получаемых от сервера. Рекомендуется избегать согласования содержимого для быстрого ответа.

Если согласование содержимого необходимо для сайта, можно снизить задержки, используя файлы type-map вместо директивы Options MultiViews. Ее применение увеличивает задержку.

Настройка MaxClients

Настройка MaxClients устанавливает лимит количества одновременных запросов, которое может поддерживаться Apache. Если это значение слишком мало, запросы станут в очередь, и не будут обрабатываться.

Настройки MinSpareServers, MaxSpareServers и StartServers

MaxSpareServers и MinSpareServers определяют количество дочерних процессов, которые будут находиться в состоянии ожидания обработки запросов. Эти параметры важны, потому что создание дочернего процесса отнимает ресурсы.

Если значение MinSpareServers слишком низкое, и на сервер поступает одновременно несколько запросов, Apache создаст дополнительные дочерние процессы. Это снижает возможность быстрого ответа на запрос клиента.

Значение MaxSpareServers не должно быть слишком большим. Так как стоящие в очереди на обработку дочерние процессы потребляют лишние серверные мощности. Нужно установить эти значения в оптимальном диапазоне, чтобы сбалансировать использование ресурсов и производительность.

Директива StartServers устанавливает количество дочерних серверных процессов, которые создаются при старте сервера. Если запросов много, а Apache часто перезагружается, нужно установить относительно большое значение.

Настройка MaxRequestsPerChild

Директива MaxRequestsPerChild устанавливает лимит количества запросов, которое будет обрабатывать каждый дочерний процесс. Слишком малое значения может привести к перегрузке сервера при создании новых процессов. Поэтому нужно установить это значение в диапазоне нескольких тысяч, чтобы ускорить работу Apache.

Настройка KeepAlive и KeepAliveTimeout

KeepAlive используется для поддержки единого соединения для передачи данных веб-страницы. Благодаря чему не тратится время на создание нового подключения для каждого файла.

KeepAliveTimeout определяет время ожидания следующего запроса. Если значение большое, дочерние процессы могут расходовать ресурсы, ожидая следующего запроса. Оптимальное значение – 2-5 секунд для небольших объемов трафика и 10 секунд для высоконагруженных серверов.

Timeout

Устанавливает время ожидания запроса от посетителя. При больших объемах трафика значение параметра должно быть не менее 120 секунд. Но лучше держать это значение минимальным. Это позволяет предотвратить излишнее расходование ресурсов.

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

Также можно использовать кэширование на стороне сервера, когда часто запрашиваемый контент хранится в памяти. Для настройки данного типа кэширования используется модуль mod_cache.

Разные серверы для статического и динамического контента

Процессы Apache, которые управляют динамическим контентом, потребляют от 3 до 20 Мб памяти. Статический контент требуют всего лишь 1Мб памяти. Процесс, управляющий динамическим контентом, при следующем запросе может предоставлять статический контент.

Что приводит к расходам памяти и замедлению работы сервера. Поэтому рекомендуется разделить серверы на управляющие статическим контентом и динамическим контентом.

Например, можно использовать небольшой Apache в качестве frontend-сервера, предоставляющего статический контент. Запросы на динамический контент будут перенаправляться к другому серверу Apache со всеми необходимыми модулями.

Для подобного перенаправления запросов используются модули mod_proxy и mod_rewrite. Клиент не заметит разницы, и будет считать, что все запросы выполняются одним сервером.

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

Тонкая настройка MySQL и PHP

Не менее важно оптимизировать сервер баз данных, чтобы избежать задержек в его работе. Также необходимо улучшить производительность PHP-страниц, используя механизм кэширования, такой как Zend OPcache.

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

Заключение

Настройка производительности Apache – нелёгкое дело. Поэтому важно иметь чёткое понимание технических требований веб-сервера и принципа его работы.

Дайте знать, что вы думаете по данной теме в комментариях. За комментарии, отклики, дизлайки, лайки, подписки огромное вам спасибо!

Пожалуйста, оставляйте свои отзывы по текущей теме статьи. За комментарии, дизлайки, подписки, отклики, лайки огромное вам спасибо!

Добрый день, столкнулся с проблемой: Есть сервер - Centos 7, на нем крутятся базы 1С, так как почти все базы перешли на управляемые формы, решил опубликовать базы на Apache. Все хорошо, пользователи счастливы, но есть один момент - счастливы до момента пока память есть. Суть проблемы: всего порядка 40 баз. Каждое подключение к каждой базе - нагружает Apache примерно на 1Гб, после закрытия 1С и открытия другой базы - еще 1Гб. Итого каждое подключение к каждой базе 1Гб.. Если за день они откроют порядка 30 баз (на сервере 32Гб памяти) - память на сервере кончается и нужен ребут.

Настроен mpm-worker, но особого эффекта это не дало. память не выгружается. Пока решил проблему в лоб, swap увеличил до 30Гб, перенес на raid 0, включил zswap. В принципе до конца дня сервер кое как справляется..но это хрень какая то.

Изучив вопрос я понял что Apache глубоко пофигу, он запускает 1совскую so, и уже она запускает базы, и по большому счету это проблема 1с. Но зная 1с эту проблему не решить.

По этому вопрос: можно ли как то со стороны Apache понять какой процесс уже не нужен, и выгрузить их?


Попробуй в конфигураторе 1С
Администрирование -> Параметры информационной базы
Там задать время меньше.
Debian 8 полет нормальный.

У тебя файловые базы что-ли?

Вечером проверю, отпишусь

Да, размер баз до 1,5гб, одновременно пользуется только 1 человек. Смысла в клиент-сервере нет. Но если проблему решить не получится..буду думать в эту сторону..


У меня правда PGSql стоит.

Смысел как раз есть. В клиент-серверном режиме воркеров (rphost) должно стать намнооого меньше — вангую один-три.

Всё время какие-то проблемы у людей были, в т.ч. с параллельной работой нескольких пользователей.

Если решишь всё-таки на клиент-сервер, то лучше 64-битный (память) и если у тебя все базы с одной-двумя конфами без особых изменений, то можешь посмотреть в сторону технологии Fresh.

Кстати, 3 года назад столкнулся с такой же проблемой, но не смог её решить и в итоге отказался от этого эксперимента:
Как безопасно разместить много баз 1С:Предприятия на одном сервере?

Но у меня удачно получилось разделить базы по правам (если тебя волнует безопасность, чтобы клиенты не могли шариться по базам других клиентов через ФС) с помощью mod_apparmor.

Протестировал на разных платформах с разными параметрами, на сколько я понял - проблема в 1С.

Запустил тот же apache на Win10, ту же платформу 1С - память освободилась ровно через 20 минут (как и заявлено в описании платформы)..

Каждый запуск PHP скрипта требует использования системных ресурсов: оперативной памяти и времени центрального процессора. Если запущено слишком много PHP скриптов, то в операционной системе, в которой работает веб-сервер, может закончиться память, и система зависнет. Такое может произойти, если накопиться слишком много запущенных PHP скриптов. Некоторые скрипты написаны плохо (содержат логические ошибки приводящие к бесконечным циклам и бесконечной работе) и поэтому со временем даже на малопосещаемом сервере может накопиться слишком много запущенных процессов, которые израсходовали все ресурсы.

Именно по этой причине в PHP установлены лимиты на максимальное время выполнение скриптов и на максимальное потребление ими памяти — лучше закрыть несколько дочерних процессов веб-сервера (которые, возможно, просто зависли), чем допустить полное зависание всего сервера.

Но бывают и обратные ситуации — по своим задачам PHP скрипт может требовать длительного времени выполнения и (или) большого объёма оперативной памяти. По этой причине возникает необходимость увеличить лимиты.

Для увеличения лимитов нужно изменить значение директив в главном конфигурационном файле PHP у которого имя php.ini и если вы устанавливали веб-сервер по этой инструкции, то путь до данного файла c:\Server\bin\PHP\php.ini.

Итак, откройте данный файл текстовым редактором:


Для увеличения максимального времени выполнения скрипта измените значение (цифра означает секунды):

Для установки максимального количество памяти, которое может использовать скрипт (цифра без буквы означает размер в байтах, также можно использовать буквы: K (для килобайт), M (для мегабайт) и G (для гигабайт)):

Директива для установки максимального размера загружаемого на сервер файла. Изначально установлен очень маленький размер – только два мегабайта. Например, при загрузке базы данных в phpMyAdmin, не получится загрузить файл больше 2 мегабайт до тех пор, пока не будет изменён этот пункт настройки:

Следующая опция устанавливает максимальное количество данных, которые будут приняты при отправке методом POST:

Максимальное количество файлов для загрузки за один раз

После внесения изменений в файл php.ini необходимо перезагрузить веб-сервер, чтобы изменения вступили в силу:

Если вас интересуют подробности по данным директивам, а также описание способов, которыми можно поменять время на выполнение скрипта прямо в самом скрипте, то смотрите более подробный материал «Как увеличить память и время для PHP скриптов».

Примечание: Некоторые рекомендации, перечисленные в этом руководстве, могут не сработать в новых версиях системы Ubuntu. Возможно, в настройке вам также пригодятся статьи:

Apache – очень производительный веб-сервер. Чтобы упростить начальную настройку, он предлагает большое количество предварительно установленных модулей. Потому Apache отлично подходит для развертывания новых проектов – с его помощью можно быстро настроить надежную среду производства. Однако по мере роста сайта (и, соответственно, объема трафика) вы можете столкнуться с проблемами.

Это руководство поможет увеличить производительность Apache на вашем виртуальном сервере.

1: Отключите ненужные модули

В Ubuntu и Debian-подобных системах есть каталоги etc/apache2/mods-enabled и /etc/apache2/mods-available/. В последнем хранится список всех модулей, установленных на данном сервере. А в каталоге mods-enabled находятся модули, включенные в данный момент.

Ситуация по умолчанию может отличаться на каждом сервере. Предположим, что на сервере по умолчанию включено 17 модулей. Как правило, этого слишком много для среднестатистического приложения. Кроме того, довольно сложно сразу определить ненужные модули, которые можно отключить, так как отдельные модули являются зависимостями других.

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

В Ubuntu и Debian модули отключаются с помощью этой команды:

sudo a2dismod autoindex

Отдельные модули потребляют очень много ресурсов; если вы не используете следующие модули, просто отключите их:

  • PHP
  • SSL
  • Rewrite
  • Perl
  • Python
  • Rack / Ruby / Passenger

Не все эти модули включены по умолчанию, однако ситуация индивидуальна для каждого сервера.

Примечание: Обычно Apache по умолчанию включает модуль rewrite, хотя его можно заменить модулем alias. Если вашему приложению подходит alias, отключите rewrite – это один из самых тяжелых модулей. Чтобы перейти с rewrite на alias, обратитесь к документации модуля. Даже если вы не сможете полностью отключить rewrite, вы сможете оптимизировать отдельные правила модуля.

Отключив модуль, перезапустите Apache, а затем проверьте лог ошибок, чтобы убедиться, что отключение модуля не навредило работе веб-сервера.

К примеру, вы можете получить такую ошибку:

Syntax error on line 6 of /etc/apache2/sites-enabled/site1:
Invalid command 'DAVLockDB', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.

Это значит, что отключенный модуль необходим для корректной работы веб-сервера. Включите его.

sudo a2enmod dav_fs

2: Переместите код

На сайтах PHP часто используется популярный модуль mod_php, а на сайтах ruby – Passenger Phusion (модули mod_rails или mod_rack).

Включение модуля mod_php может привести к тому, что на обслуживание одного дочернего процесса Apache будет требоваться 100 Мб RAM. Чем больше процессов Apache будет запущено на сервере, тем сложнее их будет обрабатывать.

Чтобы устранить эту проблему, можно использовать такие инструменты:

  • Для PHP можно установить php-fpm, который является отдельным процессом на основе протокола fastcgi.
  • В Python используйте uWSGI или gnunicorn
  • Для Rails используйте Unicorn.

Сначала запускается процесс для PHP, Python или Ruby, а затем Apache перенаправляет вызовы динамического контента на этот процесс вместо того, чтобы пытаться обработать его с помощью вложенного кода.

После удаления модуля mod_php размер процессов Apache может измениться с 90-120 Мб до всего 10 Мб. Весь динамический контент обслуживается всего двумя процессами на бэкэнде.

3: Ограничьте количество процессов Apache

Многие операционные системы используют конфигурации по умолчанию, которые не очень подходят маленьким серверам – 25 дочерних процессов. Если каждый дочерний процесс Apache требует 120 Мб RAM, то сервер будет тратить 3 Гб только на Apache.

Веб-браузер одного пользователя может запрашивать 4 элемента сайта за раз, а значит всего 7-8 человек способны перенагрузить сервер. Веб-страницы зависают или грузятся очень медленно.

Сервер часто поддерживает такие мертвые процессы Apache в активном состоянии, пытаясь обслужить запрашиваемый контент, а это снижает количество доступных процессов для обслуживания пользователей и объем памяти. В результате вы получаете плохой пользовательский опыт.

Определите, сколько RAM требуется вашему приложению и сколько памяти остается, а затем выделите большую часть оставшейся памяти для Apache.

К примеру, у вас есть три процесса php-fpm для обработки динамического контента, где каждый процесс использует до 70 Мб памяти, а также сервер MySQL, который берет до 120 Мб RAM. В результате получается, что приложение использует 330 Мб памяти. Если у вас маленький сервер, вы можете выделить для Apache около 150 Мб памяти.

Когда веб-сервер Apache запущен, запустите команду top. Она выводит множество полезной информации. Ниже приведен фрагмент ее результата:

top -bn 1
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
[. ] 15015 www-data 20 0 232m 9644 1900 S 0.0 1.6 0:00.02 apache2
15016 www-data 20 0 232m 9644 1900 S 0.0 1.6 0:00.01 apache2
15017 www-data 20 0 232m 9644 1900 S 0.0 1.6 0:00.02 apache2

Найдите значение в столбце RES для Apache (например, 9 644) и запишите его. На данный момент веб-сервер использует почти 10 Мб памяти. Если ограничить количество дочерних процессов Apache до 15, 150 Мб выделенной памяти будет вполне достаточно.

Отредактируйте конфигурационный файл Apache (в Ubuntu и Debian это /etc/apache2/apache2.confand) и найдите раздел mpm_prefork_module. Найдите строку MaxClients и введите 15, а затем сохраните файл и перезапустите веб-сервер.

<IfModule mpm_prefork_module>
StartServers 3
MinSpareServers 3
MaxSpareServers 5
MaxClients 30
MaxRequestsPerChild 0
</IfModule>

По умолчанию значение MaxClients может быть очень большим. Его нужно уменьшить.

Когда количество клиентов достигает предела, новые клиенты получат ошибку. Перезагрузив страницу, они смогут получить доступ к сайту.

Это звучит плохо, но все же лучше быстро закрыть эти соединения и сохранить нормальную работу сервера, чем ждать, пока сервер перестанет виснуть.

В некоторых ситуациях меньшее количество дочерних процессов помогает увеличить производительность сервера.

4: Рассмотрите альтернативные конфигурации mpm.

Часто в конфигурациях Apache используется предварительная настройка prefork mpm, которая считается безопасной и подходящей для PHP и других языков.

Если вы избавитесь от внешних модулей (PHP или Rails), вы можете рассмотреть worker MPM в качестве альтернативы.

Чтобы включить этот модуль, введите:

sudo apt-get install apache2-mpm-worker
The following packages will be REMOVED:
apache2-mpm-prefork libapache2-mod-php5
The following NEW packages will be installed:
apache2-mpm-worker
0 upgraded, 1 newly installed, 2 to remove and 2 not upgraded.
Need to get 2,284 B of archives.
After this operation, 8,718 kB disk space will be freed.
Do you want to continue [Y/n]?

Внимание! В Ubuntu при установке модуля worker удаляется prefork mpm, mod_php и другие несовместимые модули.

Попробуйте применить эти рекомендации в комплексе на своем сервере производства.

Apache использует слишком много памяти моего сервера, что приводит к сбою. У меня 4 ГБ оперативной памяти на сервере.

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

Я пытался следовать советам этой статьи, но я не уверен, как рассчитать вещи, и, кажется, я делаю это еще хуже.

Мой топ читает как:

Это правильно? Кроме того, какими должны быть значения для других параметров, таких как MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild?

Кто-нибудь, пожалуйста, помогите мне?

Обновить

Я попробовал то, что вы, ребята, предложили. Это работает, но ненадолго. Через некоторое время после запуска сервера потребление памяти продолжает увеличиваться и никогда не снижается.

Я имею в виду, что после запуска сервера предположим, что в сети 500 пользователей. Сервер будет использовать X RAM. Через 2 часа после того, как те же 500 пользователей в сети, сервер будет использовать 10X RAM.

Есть ли способ избежать этого, или мне придется постоянно наблюдать за сервером и перезапускать его время от времени?

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

Основным параметром для настройки использования памяти Apache будет MaxClients . Слишком низкое значение, и у вас закончатся свободные слоты для обслуживания клиентских запросов. Слишком много, и вы израсходуете всю свою оперативную память и начнете использовать пространство подкачки, что снизит производительность (это может выглядеть как сбой сервера).

Один из способов настройки MaxClients состоит в том, чтобы наблюдать за использованием памяти системы и при необходимости изменять настройки. Если сервер начинает менять местами, отредактируйте его. Если на сервере есть свободная память, поднимите ее.

Вы также можете оценить максимальное значение, посмотрев на использование памяти Apache. Запустите top и нажмите, M чтобы отсортировать процессы по памяти. Вы должны увидеть что-то вроде:

Вычтите столбцы RES и SHR, чтобы получить приблизительное использование памяти для каждого экземпляра Apache. В этом случае это около 16 МБ. Если у меня есть 4 ГБ ОЗУ и я хочу, чтобы 3 ГБ было использовано для Apache, мой параметр MaxClients будет примерно таким:

Итак, в этом случае я мог бы начать со значения 150-200, но я бы наблюдал за использованием памяти, и если бы он когда-нибудь начал приближаться к использованию подкачки, я бы уменьшил MaxClients на 10-20%. Также обратите внимание, что значение 3 ГБ является просто случайным примером. На серверах, работающих только под Apache, я мог бы использовать почти все 4 ГБ. В других случаях мне может потребоваться только 1 или 2 ГБ для Apache, а оставшиеся - для других приложений, системы или кеша.

Редактировать: отвечая на дополнительные вопросы

Как правило, нет никаких магических значений MaxClients или других параметров конфигурации Apache, которые сделают ваш сервер внезапно в два раза быстрее. Некоторые серверы будут работать нормально, независимо от того, равен MaxClients 10 или 1000. Существует два основных случая, когда параметр MaxClients «плохой»:

  • Слишком низкий : когда MaxClients слишком низок, вы попадете в ситуацию, когда все клиенты Apache используются, и новые соединения попадают в очередь в ожидании, когда следующий клиент станет доступным. Если вы включите Apache mod_status, вы сможете в реальном времени увидеть, сколько клиентов занято в любой момент времени. Это состояние относительно легко диагностировать, так как сайт будет работать медленно во время большого трафика, и все клиенты могут быть замечены в использовании.
  • Слишком высокий : когда MaxClients слишком высок, вы попадете в случае исчерпания всей оперативной памяти и начнете использовать своп. Когда это произойдет, производительность вашего сайта упадет практически до нуля (учитывайте разницу в скорости между ОЗУ и диском). Это состояние может быть гораздо сложнее наблюдать и диагностировать, так как сервер будет нормально работать с высокими значениями MaxClients, пока не будет наблюдаться всплеск трафика. Например, на сайте, который получает несколько обращений в час, я могу установить MaxClients равным 1000, что гораздо больше, чем поддерживается ОЗУ, но никогда не возникало проблем, поскольку Apache нужно было использовать только одного или двух клиентов одновременно. Я обнаружу проблему только тогда, когда получу всплеск трафика, увеличивая количество одновременно используемых клиентов, пока не исчерпается ОЗУ и не потребуется пространство подкачки.

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

Читайте также: