Другая проблема с нехваткой памяти в PHP при использовании apache - PullRequest
2 голосов
/ 25 июля 2011

Я знаю, что это старый вопрос!Но на этот раз у меня другая ситуация.

Я использую php / mysql / apache в OpenSuse.Я установил PHP с 128 МБ памяти.У меня нет RLimitMEM для апача.

Все было хорошо, пели птицы, расцветали цветы, но как только я перезапустил свой апач, случилось плохое!

Я получил PHP Fatal error: out of memory blah blah.Все php-приложения, которые работали нормально, теперь регистрируют эту ошибку.Что случилось?Я попытался memory_limit = 512M без какого-либо прогресса.

Я запутался, почему все мои php-файлы теперь выдают эту ошибку, кроме действительно маленьких скриптов.Я попытался phpinfo (), и у меня действительно есть 128 МБ памяти там.(И я знаю, что настройки php apache ini отличаются от автономных php, я настроил правильный!).

ОБНОВЛЕНИЕ:

точные примеры ошибок php:

[Mon Jul 25 04:22:25 2011] [error] [client 31.57.122.252] PHP Fatal error: Out of memory (allocated 1048576) (tried to allocate 491520 bytes) in /srv/www/htdocs/phpMyAdmin/libraries/common.inc.php on line 796

[Mon Jul 25 04:26:39 2011] [error] [client 31.57.122.252] PHP Fatal error: Out of memory (allocated 1048576) (tried to allocate 4 bytes) in /srv/sbuta/library/Zend/Config/Ini.php on line 172

[Mon Jul 25 04:27:02 2011] [error] [client 31.57.122.252] PHP Fatal error: Out of memory (allocated 1048576) (tried to allocate 30720 bytes) in /srv/kode/library/Zend/Config/Ini.php on line 132

Ответы [ 4 ]

2 голосов
/ 27 июля 2011

Проблема в том, что нет физической памяти!отключение некоторых модулей php или apache должно решить проблему.

Пошаговое руководство (: D):

  • Проверьте, достаточно ли памяти для использования php.обычно на /etc/php5/apache2/php.ini поиск memory_limit = ....(чтобы проверить это, попробуйте поместить файл с каким-то странным именем на ваш сервер с таким содержимым: <?php echo phpinfo();?> и посмотрите там значение memory_limit).
  • Проверьте, есть ли у вас RLimitMEM в настройках apache.вы можете использовать cd /etc/apache2/ && grep -irn 'RLimitMEM', чтобы узнать.
  • Проверьте, есть ли у вас ограничения безопасности для wwwrun (или с чем когда-либо работает пользователь apache) в /etc/security/limits.conf
  • Попробуйте исключить некоторые ненужныемодули из php и / или apache.

Не забудьте перезапустить apache после любого изменения, чтобы протестировать его.

0 голосов
/ 16 мая 2016

У меня была эта проблема на одном из моих серверов, и она оказалась проблемой со средой рабочего стола Gnome3.На серверах Debian и Ubuntu с 2 гигабайтами памяти или меньше, если у вас установлена ​​среда рабочего стола Gnome3 или Unity, он потребляет столько памяти рабочего стола, что начинает использовать оперативную память, необходимую apache, что приводит к ошибке нехватки памяти.

Решите проблему, установив среду рабочего стола "Gnome-Classic", Mate или LXDE и войдя в нее.

0 голосов
/ 26 июля 2011

PHP перезапускает свои скрипты для каждой перезагрузки; если ваш скрипт не выполняется 24/7, он не будет зависеть от продолжительности работы Apache. Когда использование памяти Apache растет, у него либо больше PHP-процессов, либо он просто начинает терять утечку памяти, как обычно с Apache и PHP.

Учитывая, что у вас есть массив, содержащий 100000000 элементов, содержащих «foo», и вы передаете их другой функции, этот вызов функции копирует этого массива, эффективно удваивая использование памяти PHP. Получая несколько таких вызовов, вы легко можете получить ситуацию, когда вашему сценарию не хватает памяти.

0 голосов
/ 25 июля 2011

Ошибки нехватки памяти являются результатом слишком большого количества данных, сохраненных в памяти вашим сценарием.Если у вас есть база данных с большими наборами данных и извлекаете данные с помощью fetchAll () вместо фильтрации, вы можете очень быстро исчерпать память.Другая проблема - это объекты, где вы храните такие большие наборы данных.И последнее, но не менее важное: у вас может быть цикл, который добавляет данные в память, пока не достигнет предела.

Проверьте свои сценарии на наличие мест, где вы извлекаете данные и используете XDebug.Это может показать вам увеличение использования памяти.

Обновление
Странно.Ошибка «Недостаточно памяти», которая у вас есть, не является той ошибкой, которую вы обычно получаете с конфигурацией php memory_limit (в которой «исчерпана память»), и поскольку она есть во всех приложениях, это еще более ясно.

Кажется, существует ограничение, налагаемое серверной средой, которая в вашем случае является Apache.Возможно, вы можете / должны на самом деле установить ограничение max с помощью RLimitMEM в вашем файле conf.По умолчанию используется операционная система по умолчанию, которая является вашим OpenSuse.Если у вас неожиданно появятся ограничения для пользователя, использующего ваш модуль Apache, это может перейти в вашу среду Apache, а затем и к вашим PHP-сценариям, которые, наконец, жалуются.

2-е обновление
Время изолировать проблему.Поскольку это началось, когда вы перезапустили свой сервер, и все ваши приложения испытывают эту проблему, это должно быть что-то в вашей серверной среде.Попробуйте запустить и запустить phpMyAdmin с конфигурацией Apache по умолчанию.Если это уже вызывает ошибку, вы должны взглянуть на ваш сервер Linux.

...