Случайные ошибки PHP Fatal error: Out of memory

Поскольку я переместил приложение PHP на новый сервер (PHP / 5.3.8, работающий как модуль Apache 2.2 на 32-разрядной Windows Server 2003 R2), я получаю случайные ошибки в журнале ошибок PHP:

[09-Jan-2012 19:45:12] PHP Fatal error: Out of memory (allocated 786432) (tried to allocate 17 bytes) in D:\site\util\odbc-connection.php on line 675 [10-Jan-2012 17:56:49] PHP Fatal error: Out of memory (allocated 1310720) (tried to allocate 6144 bytes) in D:\site\logic\data.php on line 630 [10-Jan-2012 17:58:52] PHP Fatal error: Out of memory (allocated 524288) (tried to allocate 393216 bytes) in D:\site\users\edit-user.php on line 458 

Я смущен по следующим причинам:

  1. Это не стандартное сообщение об ошибке, которое вы получаете при достижении memory_limit :

     Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 800001 bytes) 
  2. Независимо от того, memory_limit умолчанию имеет значение 256MB на сервере и установлен на 128MB в этом приложении (таким образом, 524 288 байт не должно быть проблемой).

  3. В сообщенных строках обычно есть довольно невинный код, например, начало определения функций …

     function linea($html){ 

    … или foreach () с очень маленькими массивами:

     foreach($perfiles_basicos as $c => $v){ 

Я думаю, что я уже отбросил все очевидные вещи (я даже искал строку memory_limit во всех файлах * .php, * .ini, .htaccess и * .conf на жестком диске), и я написал код для обнаруживать и записывать изменения в предел «128 МБ» (ничего не было найдено), поэтому я сейчас почти не знаю.

Любой намек или идея?


Обновление # 1: error.log Apache показывает, что веб-сервер перезапускается после того, как я получаю ошибку из памяти с PHP. Некоторые из них являются перезагрузками вручную, а некоторые из них относятся к следующим сбоям:

 zend_mm_heap corrupted 12] [notice] Child 2524: Child process is exiting [Mon Jan 09 19:45:12 2012] [notice] Parent: child process exited with status 1 -- Restarting. [Mon Jan 09 19:45:13 2012] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366) [Mon Jan 09 19:45:13 2012] [notice] Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 configured -- resuming normal operations [Mon Jan 09 19:45:13 2012] [notice] Server built: Sep 24 2011 00:32:50 [Mon Jan 09 19:45:13 2012] [notice] Parent: Created child process 6256 [Mon Jan 09 19:45:13 2012] [notice] Disabled use of AcceptEx() WinSock2 API [Mon Jan 09 19:45:13 2012] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366) [Mon Jan 09 19:45:14 2012] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366) [Mon Jan 09 19:45:14 2012] [notice] Child 6256: Child process is running [Mon Jan 09 19:45:14 2012] [notice] Child 6256: Acquired the start mutex. [Mon Jan 09 19:45:14 2012] [notice] Child 6256: Starting 400 worker threads. [Mon Jan 09 19:45:14 2012] [notice] Child 6256: Listening on port 443. [Mon Jan 09 19:45:14 2012] [notice] Child 6256: Listening on port 80. 

Обновление № 2: … и расширение ODBC регистрирует следующую ошибку:

 No se puede cargar el controlador especificado debido al error del sistema 8 (Oracle in instantclient_11_2) 

… где системная ошибка 8 соответствует:

ERROR_NOT_ENOUGH_MEMORY 8 (0x8) Недостаточно памяти для обработки этой команды.

Я просто быстро выполнил поиск «Недостаточно памяти» в дереве PHP и обнаружил, что эта ошибка запускается диспетчером памяти Zend, если внутренний вызов выделения (например, malloc ) не работает ( см. Код ).

Итак, да, звучит так, как система вышла из памяти;)