Стресс-тест, который я запускаю, устанавливает много подключений к моему Apache 2.2, работающему на Windows Server 2008 r2 64-bit одновременно. После ~ 500 (- / + 10) соединений я получаю эту ошибку в error.log Apache:
Не удалось инициализировать хранилище zend_mm [win32]
Я пытался увеличить memory_limit
в php.init
но не помогло. Почему после увеличения memory_limit все равно происходит сбой на том же количестве соединений?
Эта ошибка означает, что вы исчерпали свой пул памяти. Стресс-тестирование может сделать это. Даже если вы увеличите пределы PHP, у вас будет столько памяти на вашем сервере. Вы сказали, что ваш сервер 32-битный, то есть у вас есть максимум 4 ГБ ОЗУ плюс ваш файл подкачки. 500 соединений могут легко перегружать такой маленький сервер.
Итак, в конце концов выяснилось, что если бы число ThreadsPerChild
в httpd-mpm.conf
который был:
<IfModule mpm_winnt_module>
ThreadsPerChild 1500
MaxRequestsPerChild 0
</IfModule>
Я изменил это на:
<IfModule mpm_winnt_module>
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>
И это работает нормально.