Случайные ошибки «Неустранимая ошибка PHP: недостаточно памяти»

Поскольку я переместил приложение 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 :

     Неустранимая ошибка: разрешенный размер памяти 262144 байта исчерпан (попытался выделить 800001 байт)
    
  2. Как бы то ни было, для memory_limit по умолчанию установлено значение 256 МБ на сервере и установлено значение 128 МБ в этом приложении (таким образом, 524 288 байт не должны быть проблемой).

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

     function linea ($ html) {
    

    ... или цикл foreach () для очень маленьких массивов:

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

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

Есть намек или идея?


Обновление №1: Apache error.log показывает, что веб-сервер перезагружается после того, как я получаю сообщение об ошибке Out of memory 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) Недостаточно памяти для обработки этой команды.

9
задан Álvaro González 11 January 2012 в 16:04
поделиться