2012-01-10 15 views
9

चूंकि मैंने एक PHP सर्वर को एक नए सर्वर पर ले जाया है (PHP/5.3.8 32-बिट Windows Server 2003 R2 पर अपाचे 2.2 मॉड्यूल के रूप में चल रहा है) मुझे यादृच्छिक त्रुटियां मिल रही हैं पीएचपी त्रुटि लॉग में:यादृच्छिक "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. चाहे जो हो, सर्वर पर 256MB को memory_limit चूक और इस एप्लिकेशन पर 128MB पर सेट है (इस प्रकार 524,288 बाइट्स एक समस्या नहीं होना चाहिए)।

  3. सूचना दी लाइनों ऐसे समारोह परिभाषाओं की शुरुआत के रूप में है सामान्य रूप से सुंदर निर्दोष कोड, में ...

    function linea($html){ 
    

    ... या foreach() बहुत छोटे सरणियों के छोरों:

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

मुझे लगता है कि मैंने पहले से ही सभी स्पष्ट सामग्री को त्याग दिया है (मैंने हार्ड डिस्क में सभी * .php, * .ini, .htaccess और * .conf फ़ाइलों में memory_limit स्ट्रिंग की खोज भी की है) और I डब्ल्यू डब्ल्यू "128 एमबी" सीमा में परिवर्तनों को पहचानने और लॉग इन करने के लिए रिट कोड (कुछ भी नहीं मिला था) इसलिए मैं अभी बहुत स्पष्ट हूं।

कोई संकेत या विचार?


# 1 अद्यतन: अपाचे के error.log पता चलता है कि वेब सर्वर को पुनः आरंभ हो जाता है के बाद मैं 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) 

... जहां system error 8 नक्शे करने के लिए:

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

+0

क्या आप किसी भी ढांचे का उपयोग कर रहे हैं? – Gerep

+3

क्या आपने अपने सिस्टम पर मेमोरी उपयोग की जांच की है? ओओएम आमतौर पर तब होता है जब सिस्टम भौतिक रूप से स्मृति आवंटित नहीं कर सकता है, न कि जब PHP अनुरोध के लिए सीमा तक पहुंच गया हो। –

+0

कोई ढांचा नहीं, सिर्फ वेनिला PHP। मैं सिस्टम की स्मृति की निगरानी करने की कोशिश करूंगा। –

उत्तर

8

मैं सिर्फ पीएचपी ट्री में "स्मृति समाप्त" के लिए एक त्वरित खोज किया और पाया कि इस त्रुटि Zend मेमोरी मैनेजर से शुरू हो रहा यदि एक आंतरिक आवंटन कॉल (उदा। malloc) विफल रहता है (see code)।

तो, हाँ, लगता है जैसे सिस्टम मेमोरी से बाहर चला गया;)

+0

हां, यह एक सरल और समझदार स्पष्टीकरण है जिसे मैंने भी नहीं माना था। अभी, सर्वर लगभग निष्क्रिय है और कार्य प्रबंधक एक उच्च w वर्चुअल मेमोरी उपयोग के साथ 'wmicpa.exe' प्रक्रिया दिखाता है।मैं सिस्टम प्रशासक से बेहतर पूछूंगा। –

+0

मुझे अभी भी त्रुटियों के सटीक कारण के बारे में कोई जानकारी नहीं है, लेकिन अपाचे के त्रुटि लॉग में आपके उत्तर और "zend_mm_heap दूषित" संदेश मेरी पहुंच से परे कुछ प्रकार की स्मृति आवंटन समस्या को इंगित करते हैं। –

संबंधित मुद्दे