Обновление 24 октября
Дамп ps axl по запросу @David Schwartz: http://textuploader.com/?p=6&id=z8riS
В периоды занятости мы достигаем максимального количества подключений Apache (в настоящее время установлено 256). Я бы хотел увеличить максимальное количество подключений, но мне посоветовали этого не делать из-за чрезмерного использования памяти в эти периоды. Однако фактическое использование ОЗУ, похоже, не приближается к зафиксированному значению.
Как рассчитывается зафиксированное значение для процессов Apache? И как это уменьшить?
Я уже пробовал установить для PHP memory_limit более низкое значение, но это не повлияло на зафиксированное значение в моих графиках munin:
Характеристики сервера:
Сервер выделен для Apache (MySQL находится на другом поле).
Я бы попытался разделить обслуживание скриптов PHP и статических файлов.
Вы можете очень эффективно обслуживать статические файлы с помощью worker MPM
и даже лучше с event MPM
доступны для httpd 2.4+
. Но вы не можете использовать этот MPM для обслуживания сценариев PHP, поскольку PHP не является потокобезопасным.
Для PHP вы можете запустить отдельный экземпляр httpd (я запускаю его на своем сервере с Listen 127.0.0.2:488
) и настройте главный сервер как обратный прокси:
ProxyPreserveHost On
DocumentRoot /var/www/html
RewriteEngine On
RewriteCond /var/www/html%{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^/(.*) http://127.0.0.2:488/$1 [P,L]
С участием mod_remoteip
(опять же - доступно с httpd 2.4) это было бы действительно прозрачно для PHP-скрипта.
Или используйте, например, php-fpm.
Таким образом, запрос статических файлов, постоянных HTTP-соединений и т. Д. Будет использовать часть оперативной памяти.