Я запускаю сервер apache (конфигурация по умолчанию, mod_php) на виртуальной машине amazon linux с 1 ГБ оперативной памяти.
Есть два типа запущенных приложений php: приложения с большим объемом памяти, которые выполняются не так часто (процессы httpd получают размер 50 МБ каждый), и приложения с низким объемом памяти, которые выполняются часто.
Когда я перезапускаю apache и смотрю на размер процессов httpd, он выглядит так:
sudo service httpd restart
ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
24.7266 MB
14.9805 MB
14.9805 MB
14.9805 MB
14.9805 MB
14.9805 MB
2.00391 MB
Когда я https: // только один в одно из приложений php с большим объемом памяти (установка drupal 7), та же команда выводит это:
24.7266 MB
14.9805 MB
47.0195 MB
18.6133 MB
18.5781 MB
18.582 MB
14.9805 MB
14.9805 MB
14.9805 MB
14.9805 MB
14.9805 MB
14.9805 MB
14.9805 MB
2.05078 MB
Проблема в том, что даже когда сервер простаивает, он сохраняет некоторые из этих больших 50-мегабайтных процессов, созданных для обслуживания запросов drupal с большим объемом памяти. В конце концов, когда я получаю их слишком много, он использует почти всю память сервера, поэтому я не могу использовать сервер ни для чего другого. Я мог бы установить более жесткое ограничение на количество процессов, которые httpd может создать, чтобы было меньше 50 МБ процессов, но это накажет легкие приложения, так как теперь меньше процессов для обработки их запросов:
Части моего ответа Вот может быть актуальным. Мы запускаем Apache в среде с ограниченным объемом памяти, и процессы Apache используются для постепенного использования всей доступной памяти.
Мы вылечили это, уменьшив MaxConnectionsPerChild директиве до 2500. На наших уровнях трафика это означало, что дочерние процессы перезапускались примерно два раза в час, освобождая память, которую они использовали.
Возможно, тебе стоит попробовать это.