На сервере работает около 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 какое-то время работает.