Apache съедает всю оперативку
Здравствуйте!
Есть в наличии VPS:
- CentOS 6.3 64x
- Nginx 1.2.3 (прокси)
- Apache 2.2.22
- PHP 5.3.27 (PHP как модуль Apache)
- 3000МБ ОЗУ
На этом сервере крутится сайт, на котором нужно делать выгрузку базы данных в excel файл. Для этого используется пакет Spreadsheet_Excel_Writer.
И вот тут есть проблема. Во время работы скрипта, Apache сжирает всю оперативную память (3ГБ), при том, что в настройках PHP стоит ограничение на 512МБ. И ещё интересно, что при вызове memory_get_peak_usage(true), внутри работающего скрипта, результат всегда меньше 300МБ.
Так почему же Apache съел всю память?
Проблему удалось локализовать до файла «Spreadsheet/Excel/Writer/Workbook.php» (который из комплекта Spreadsheet_Excel_Writer). В этом файле есть функция _calculateSharedStringsSizes() (залил её на пастбин), в которой есть цикл, начинающийся со строки 63 (если смотреть на пастбине), так вот, если цикл удалить, то утечки памяти не будет (про результат работы скрипта речи не идёт)!
Я даже сделал копию сайта у себя на виртуальной машине, с теми же параметрами (только без Nginx'а в качестве прокси). Скрипт отработал как надо, и Apache не требовал более 400МБ вообще. Что за чудеса?!
Подскажите, пожалуйста, куда копать?