2012-01-10 46 views
9

Vì tôi đã chuyển ứng dụng PHP sang máy chủ mới (PHP/5.3.8 chạy dưới dạng mô-đun Apache 2.2 trên Windows Server 2003 R2 32 bit), tôi nhận được các lỗi ngẫu nhiên trong nhật ký lỗi PHP:Lỗi "Lỗi nghiêm trọng PHP: Lỗi ngoài"

[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 

tôi đang bối rối vì những lý do sau đây:

  1. Đó là không được thông báo lỗi tiêu chuẩn mà bạn nhận được khi memory_limit đạt được:

    Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 800001 bytes) 
    
  2. Dù sao, memory_limit mặc định là 256MB trên máy chủ và được đặt thành 128MB trên ứng dụng này (do đó 524,288 byte không phải là vấn đề).

  3. Trong dòng thông báo có mã thường khá ngây thơ, chẳng hạn như sự khởi đầu của định nghĩa hàm ...

    function linea($html){ 
    

    ... hoặc foreach() vòng lặp của mảng rất nhỏ:

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

Tôi nghĩ rằng tôi đã loại bỏ tất cả nội dung hiển nhiên (thậm chí tôi đã tìm kiếm chuỗi memory_limit trong tất cả các tệp * .php, * .ini, .htaccess và * .conf trong đĩa cứng) và tôi đã w mã ritten để phát hiện và đăng nhập thay đổi đến giới hạn "128MB" (không có gì đã từng được tìm thấy) vì vậy tôi khá clueless ngay bây giờ.

Bất kỳ gợi ý hay ý tưởng nào?


Update # 1: Apache error.log cho thấy web server được khởi động lại sau khi tôi nhận được một Hết bộ nhớ lỗi từ PHP. Một số là khởi động lại bằng tay và một số tai nạn như thế này:

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. 

Cập nhật # 2: ... và phần mở rộng ODBC được đăng nhập các lỗi sau:

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

... nơi system error 8 bản đồ tới:

ERROR_NOT_ENOUGH_MEMORY 8 (0x8) Not enough storage is available to process this command.

+0

bạn có đang sử dụng bất kỳ khung công tác nào không? – Gerep

+3

Bạn đã kiểm tra việc sử dụng bộ nhớ trên hệ thống của mình chưa? OOM thường xảy ra khi hệ thống không thể phân bổ bộ nhớ vật lý, không phải khi PHP đạt đến giới hạn cho yêu cầu. –

+0

Không có khuôn khổ, chỉ cần vani PHP. Tôi sẽ cố gắng theo dõi bộ nhớ của hệ thống. –

Trả lời

8

Tôi vừa tìm kiếm nhanh "Out of memory" trong cây PHP và thấy rằng lỗi này được kích hoạt bởi Trình quản lý bộ nhớ Zend nếu cuộc gọi phân bổ nội bộ (ví dụ: malloc) không thành công (see code).

Vì vậy, vâng, có vẻ như hệ thống đã hết bộ nhớ;)

+0

Vâng, đó là một lời giải thích đơn giản và hợp lý mà tôi chưa từng cân nhắc. Ngay bây giờ, máy chủ hầu như không hoạt động và trình quản lý tác vụ hiển thị quá trình 'wmicpa.exe' với mức sử dụng bộ nhớ ảo cực cao.Tôi nên hỏi quản trị viên hệ thống. –

+0

Tôi vẫn không có đầu mối về lý do chính xác cho lỗi nhưng câu trả lời của bạn và thông báo "zend_mm_heap bị hỏng" trong điểm nhật ký lỗi của Apache đối với một số vấn đề phân bổ bộ nhớ ngoài tầm với của tôi. –

Các vấn đề liên quan