2011-10-12 24 views
82

में मैं अपाचे/PHP/MySQL स्टैक का उपयोग कर रहा हूं।
फ्रेमवर्क केकपीएचपी के रूप में उपयोग करना।"[नोटिस] बाल पिड XXXX निकास सिग्नल सेगमेंटेशन गलती (11)" apache error.log

हर अब और फिर मुझे एक खाली सफेद पृष्ठ मिलता है। मैं यह केक के माध्यम से डिबग नहीं कर सकते, तो मैं अपाचे error.log में झांक सकते हैं और यहां मैं क्या मिलेगा:

[Wed Oct 12 15:27:23 2011] [notice] child pid 3580 exit signal Segmentation fault (11) 
[Wed Oct 12 15:27:34 2011] [notice] child pid 3581 exit signal Segmentation fault (11) 
[Wed Oct 12 15:30:52 2011] [notice] child pid 3549 exit signal Segmentation fault (11) 
[Wed Oct 12 16:04:27 2011] [notice] child pid 3579 exit signal Segmentation fault (11) 
zend_mm_heap corrupted 
[Wed Oct 12 16:26:24 2011] [notice] child pid 3625 exit signal Segmentation fault (11) 
[Wed Oct 12 17:57:24 2011] [notice] child pid 3577 exit signal Segmentation fault (11) 
[Wed Oct 12 17:58:54 2011] [notice] child pid 3550 exit signal Segmentation fault (11) 
[Wed Oct 12 17:59:52 2011] [notice] child pid 3578 exit signal Segmentation fault (11) 
[Wed Oct 12 18:01:38 2011] [notice] child pid 3683 exit signal Segmentation fault (11) 
[Wed Oct 12 22:20:53 2011] [notice] child pid 3778 exit signal Segmentation fault (11) 
[Wed Oct 12 22:29:51 2011] [notice] child pid 3777 exit signal Segmentation fault (11) 
[Wed Oct 12 22:33:42 2011] [notice] child pid 3774 exit signal Segmentation fault (11) 

क्या इस विभाजन गलती है, मैं इसे ठीक कर सकते हैं, मैं कोई सुराग नहीं है और हो सकता है महान रूप से महान।

अद्यतन:

PHP Version 5.3.4, OSX local development 
Server version: Apache/2.2.17 (Unix) 
CakePhp: 1.3.10 
+0

कॉन्फ़िगरेशन पर अधिक जानकारी की आवश्यकता है, उदाहरण के लिए यदि php के संस्करण और प्रयुक्त मॉड्यूल अद्यतित हैं और यदि आप किसी प्रकार के कैशिंग या त्वरक का उपयोग करते हैं। – CodeCaster

+0

क्या आप मुझे बता सकते हैं कि आपको कौन सी जानकारी चाहिए और इसे कैसे प्राप्त करें, इसलिए मैं इसे पोस्ट कर सकता हूं? – mgPePe

+0

यह भी जांचें: http://stackoverflow.com/questions/15689765/apc-and-child-pid-xxxxx-exit-signal-segmentation-fault/15724464#15724464 – trante

उत्तर

54

httpd बाल प्रक्रियाओं में से किसी एक को gdb संलग्न करें और फिर से लोड करें या काम करना जारी रखें और क्रैश की प्रतीक्षा करें और फिर बैकट्रैक देखें। कुछ इस तरह है:

$ ps -ef|grep httpd 
0  681  1 0 10:38pm ??   0:00.45 /Applications/MAMP/Library/bin/httpd -k start 
501 690 681 0 10:38pm ??   0:00.02 /Applications/MAMP/Library/bin/httpd -k start 

...

अब बच्चे प्रक्रियाओं में से एक के लिए gdb देते हैं, इस मामले में पीआईडी ​​690 (स्तंभ हैं यूआईडी, पीआईडी, PPID, ...)

$ sudo gdb 
(gdb) attach 690 
Attaching to process 690. 
Reading symbols for shared libraries . done 
Reading symbols for shared libraries ....................... done 
0x9568ce29 in accept$NOCANCEL$UNIX2003() 
(gdb) c 
Continuing. 

दुर्घटना के लिए प्रतीक्षा करें ... तो:

(gdb) backtrace 

या

+०१२३५१६४१०६१
(gdb) backtrace full 

आपको कुछ संकेत देना चाहिए कि क्या हो रहा है। यदि आप एक बग रिपोर्ट दर्ज करते हैं तो आपको बैकट्रैक शामिल करना चाहिए।

यदि दुर्घटना को पुन: उत्पन्न करना कठिन होता है तो अपाचे को कॉन्फ़िगर करना एक अच्छा विचार हो सकता है कि अनुरोधों को संभालने के लिए केवल एक बच्चे प्रक्रियाओं का उपयोग करें। कॉन्फ़िगर इस तरह कुछ है:

StartServers 1 
MinSpareServers 1 
MaxSpareServers 1 
+1

मैंने अभी इसमें भाग लिया है और ऐसा लगता है जब मेरे पास एक बच्चे की प्रक्रिया से जुड़ा हुआ जीडीबी है, मुझे segfault नहीं मिलता है और अपाचे पृष्ठ को प्रतिपादित नहीं करता है। (Segfault को पुन: उत्पादित करना अन्यथा रीफ्रेश को मारने का मामला है क्योंकि यह प्रत्येक रीलोड पर होता है)। यह थोड़ी देर हो गया है क्योंकि मैंने अपने सी दिनों में धातु टूलचेन के करीब काम किया है। मुझे आश्चर्य है कि यह इस व्यवहार को क्यों प्रदर्शित कर सकता है। इसे मेरे निर्माण से बहुत सारे प्रतीकों को नहीं मिला, लेकिन इसे केवल एक कम जानकारीपूर्ण बैकट्रैक नहीं बनाना चाहिए? – lucian303

+0

हम्म अजीब है। क्या आप यह सुनिश्चित कर सकते हैं कि वास्तव में सीजीफाल्ट्स की प्रक्रिया आप पर जीडीबी संलग्न है? segfaulted प्रक्रिया के ढक्कन के लिए 'dmesg' की जांच करें। –

+0

जीडीबी काम नहीं करता है। मुझे अनुमति देता है 'प्रक्रिया-आईडी 70: (ओएस/कर्न) विफलता के लिए कार्य तक पहुंचने में असमर्थ। – mgPePe

18

एक segementation गलती php में एक आंतरिक त्रुटि (या, कम संभावना है, अपाचे) है। अक्सर, सेगमेंटेशन गलती नए और कम-परीक्षण वाले PHP मॉड्यूल जैसे छविमैजिक या उपवर्तन के कारण होती है।

सभी गैर-आवश्यक मॉड्यूल को अक्षम करने का प्रयास करें (php.ini में), और फिर त्रुटि होने तक उन्हें एक-एक करके फिर से सक्षम करना। आप php और apache को भी अपडेट करना चाहते हैं।

यदि यह मदद नहीं करता है, तो आपको report a php bug चाहिए।

+0

लेकिन मुझे कैसे पता चलेगा कि यह कौन सा है? – mgPePe

16

क्या आपने अपने php.ini में output_buffering बढ़ाने की कोशिश की है?

What does "zend_mm_heap corrupted" mean?

+2

मुझे कुछ अपडेट के बाद apache/php/mysql के साथ डेबियन निचोड़ पर एक ही समस्या थी।मैंने इसे 'output_buffering = 4096' पर सेट किया है और अब पेज फिर से काम करते हैं। Thx – rubo77

+2

और मेरे लिए केवल 'output_buffering = 8192' काम करता है। आपका बहुत बहुत धन्यवाद! – Oleg

+1

और अब, दूसरे पृष्ठ पर, 'output_buffering = 8192' segfault का कारण बनता है, जिसे 'output_buffering = off' सेट करके तय किया गया था। मैं बहुत उलझन में हूँ। – Oleg

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