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

Настройка Apache2 / mpm-worker, чтобы не съедать всю оперативную память сервера

На сервере работает около 40 сайтов WordPress. Изначально я настраивал сервер с помощью mod_php и mpm-prefork, когда на сервере было 2 ГБ памяти и он работал нормально. Однако недавно я обновил сервер, чтобы использовать FastCGI, suexec и mpm-worker. С тех пор я не могу заставить Apache не поглощать всю свободную оперативную память, пока он не начнет подкачку и в конечном итоге не перестанет отвечать.

Мы увеличили размер сервера с 2 ГБ до 4 ГБ в надежде решить проблему, но примерно через 7 часов сервер занял все 4 ГБ и вернулся в режим подкачки.

В mpm-prefork мы просто установили MaxClients, и все было хорошо. Впрочем, хоть убей, в mpm-worker я не могу найти настройки, которые кажутся работающими. Любая комбинация MaxRequestsPerChild, ThreadsPerChild и MaxClients по-прежнему приводит к одному и тому же результату. Я никогда раньше не работал с mpm-worker, поэтому не знаю, как это настроить. Я провел бесчисленное количество часов в поисках настроек в Apache2.conf и пробовал десятки настроек, но все они ведут по той же дороге, по которой сервер использует всю память.

С сервером 4 ГБ, оставляя около 400 МБ для других процессов и зная, что каждый дочерний поток Apache работает около 50 МБ при запуске, какая комбинация настроек должна быть удобной, чтобы сервер не исчерпал ОЗУ?

Текущие настройки:

<IfModule mpm_worker_module>
    StartServers          6
    ServerLimit          25
    MinSpareThreads      25
    MaxSpareThreads      50
    ThreadLimit          75
    ThreadsPerChild      25
    MaxClients           75
    MaxRequestsPerChild  2000

Мне повезло с mod_fcgid с участием mpm-prefork на виртуальной машине микро-размера, работающей на Amazon EC2. Мне не нужно было ничего настраивать, но моя рабочая нагрузка отличалась от вашей.

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