Поскольку я переместил приложение 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
Я сбит с толку по следующим причинам:
Это , а не стандартное сообщение об ошибке, которое вы получаете при достижении memory_limit
:
Неустранимая ошибка: разрешенный размер памяти 262144 байта исчерпан (попытался выделить 800001 байт)
Как бы то ни было, для memory_limit
по умолчанию установлено значение 256 МБ
на сервере и установлено значение 128 МБ
в этом приложении (таким образом, 524 288 байт не должны быть проблемой).
В сообщаемых строках обычно есть довольно невинный код, например, начало определений функций ...
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)
Недостаточно памяти для обработки этой команды.