Я пришел сюда, потому что искал и пробовал разные варианты оптимизации, но не нашел ответов.
У нас есть сервер с четырьмя размещенными веб-сайтами. Посещаемость не очень высокая (мы уверены, что проблема не в количестве посетителей).
У нас есть архитектура LAMP (Centos 6.4, Apache, MySQL и PHP в последней версии). Мы также используем eaccelerator. На недавнем сервере 16 ГБ DDR3, Intel Xeon E3 (4 ядра @ 3,1 ГГц).
Apache имеет базовую конфигурацию с несколькими отключенными модулями и несколькими модулями, которые пытаются решить нашу проблему. MaxClients = 150 и MaxRequestsPerChild = 100.
Наша проблема в том, что какой-то процесс apache раздувается до нескольких ГБ (я видел один на 12 ГБ !!! он запускался с 15 минут). В большинстве случаев процессы живут дольше, они растут с большой загрузкой ЦП ... Затем мониторинг перезапускает Apache ...
Я понятия не имел, где может возникнуть проблема. Журнал Apache не показывает ничего аномального. Эта проблема возникает как днем, так и ночью, и кажется случайной.
Спасибо за помощь.
Несколько сред выполнения могут работать как внутрипроцессные плагины apache, наиболее распространенным из которых является mod_php.
В этом случае любая память, используемая PHP, выделяется apache. Как правило, когда процесс вырастает до заданного размера, он не сжимается. После выполнения сценария PHP процесс Apache, который его содержал, все еще может сохранять выделенную память. Предполагая, что следующий запрос страницы PHP попадает в разные apache, вы можете обнаружить, что apache занимает гораздо больше памяти, чем необходимо.
В первую очередь я бы посмотрел на максимально допустимый размер памяти для PHP, имея в виду, что значение может быть изменено во время выполнения с помощью сценария PHP. Есть предел по какой-то причине; установите ограничение на что-то разумное, имея в виду, что общее потребление памяти будет умножением количества запущенных процессов на ограничение на процесс.
Работоспособное долгосрочное решение - исключить PHP из процесса Apache; запустить, например, под fastCGI, используя mod_fcgid. Это позволяет вам указать ограничение на количество процессов PHP, которые ниже чем количество процессов apache. Поскольку apache используется не только для PHP, и поэтому, вероятно, требует большего количества процессов, чем PHP, разделение этих двух позволяет более эффективно использовать имеющиеся ресурсы.