2015-11-19 5 views
14

यह पूछा गया है और https://stackoverflow.com/a/12686252/219116 से पहले उत्तर दिया गया है, लेकिन समाधान मेरे लिए काम नहीं कर रहा है।PHP और mod_fcgid: ap_pass_brigade handle_request_ipc फ़ंक्शन में विफल रहा

mod_fcgid config

<IfModule mod_fcgid.c> 
    AddHandler fcgid-script .fcgi 
    FcgidIPCDir /var/run/mod_fcgid/ 
    FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm 

    FcgidIdleTimeout 60 
    FcgidProcessLifeTime 120 
    FcgidMaxRequestsPerProcess 500 
    FcgidMaxProcesses 150 
    FcgidMaxProcessesPerClass 144 
    FcgidMinProcessesPerClass 0 
    FcgidConnectTimeout 30 
    FcgidIOTimeout 600 
    FcgidIdleScanInterval 10 
    FcgidMaxRequestLen 269484032 

</IfModule> 

php-cgi स्क्रिप्ट

#!/bin/bassh 
export PHPRC=/var/www/vhosts/example.com/etc/ 
export PHP_FCGI_MAX_REQUESTS=5000 
exec /usr/bin/php-cgi 

सिस्टम विवरण

  • CentOS लिनक्स जारी 1503/07/01 (कोर)
  • httpd-2.4.6- 31.el7.centos.x86_64
  • mod_fcgid-2.3.9-4.el7.x86_64
  • php56u-CLI-5.6.12-1.ius.centos7.x86_64

तो मेरी FcgidMaxRequestsPerProcess 500 पर सेट है और मेरी PHP_FCGI_MAX_REQUESTS 10x पर सेट है जैसा कि पिछले उत्तरों और अपाचे दस्तावेज़ में सुझाया गया है। और फिर भी मैं अभी भी इन त्रुटियों को मिल

[Thu Nov 19 18:16:48.197238 2015] [fcgid:warn] [pid 6468:tid 139726677858048] 
(32)Broken pipe: [client X.X.X.X:41098] mod_fcgid: ap_pass_brigade failed in handle_request_ipc function 
+1

आप @ विनीट 1 9 82 के उत्तर से हल की गई जांच को हटाना चाहते हैं। असली कारण एवियन के ब्लॉग पर पढ़ा जा सकता है: https: // www।tablix.org/~avian/blog/archives/2016/05/on_ap_pass_brigade_failed/ – aefxx

उत्तर

3

चेतावनी के Fcgidxxx विकल्पों में से किसी के साथ कुछ लेना देना नहीं है और सर्वर को प्रतिक्रिया देने का मौका मिलने से पहले ग्राहक के कनेक्शन के अपने पक्ष को बंद कर दिया जाता है।

वास्तविक स्रोत से:

/* Now pass any remaining response body data to output filters */ 
if ((rv = ap_pass_brigade(r->output_filters, brigade_stdout)) != APR_SUCCESS) { 
    if (!APR_STATUS_IS_ECONNABORTED(rv)) { 
     ap_log_rerror(APLOG_MARK, APLOG_WARNING, rv, r, 
         "mod_fcgid: ap_pass_brigade failed in " 
         "handle_request_ipc function"); 
    } 

    return HTTP_INTERNAL_SERVER_ERROR; 
} 

क्रेडिट Avian's Blog जो इस बारे में पता चला को जाता है।

13

मैं भी एक साल के बारे में एक ही समस्या हो रही है उस वक्त मैं बहुत सी बातें की कोशिश की है और पिछले में मैं प्रलेखन पढ़ने और मेरी समस्या के बाद हिट से कुछ बातें किया और समाप्त हो गया है चला गया। सबसे पहले महत्वपूर्ण आवश्यक चीजों को सेट किया जा के रूप:

FcgidBusyTimeout  300 [default] 
FcgidBusyScanInterval 120 [default] 

इस निर्देश के प्रयोजन के को त्रिशंकु अनुप्रयोगों समाप्त है। डिफ़ॉल्ट टाइमआउट को उन अनुप्रयोगों के लिए बढ़ाना पड़ सकता है जो अनुरोध को संसाधित करने में अधिक समय ले सकते हैं। क्योंकि जांच अंतराल FcgidBusyScanInterval द्वारा परिभाषित में किया जाता है, अनुरोध हैंडलिंग, यदि संख्या समय की एक लंबी अवधि

FcgidProcessLifeTime  3600 [default] 

निष्क्रिय आवेदन प्रक्रियाओं जो इस समय की तुलना में अधिक के लिए ही अस्तित्व में है समाप्त हो जाएगा के लिए आगे बढ़ने के लिए अनुमति दी जा सकती कक्षा के लिए प्रक्रियाओं की संख्या FcgidMinProcessesPerClass से अधिक है।

यह प्रक्रिया आजीवन जांच कॉन्फ़िगर की गई FcgidIdleScanInterval की आवृत्ति पर की जाती है।

FcgidZombieScanInterval 3 [seconds default] 

मॉड्यूल इस अंतराल पर बाहर निकलने वाले फास्टसीजीआई अनुप्रयोगों की जांच करता है। इस अवधि के दौरान, प्रक्रिया ज़ोंबी (यूनिक्स पर) के रूप में प्रक्रिया तालिका में मौजूद हो सकती है।

नोट: सभी उपरोक्त विकल्प आपके आवेदन प्रक्रिया समय या आवश्यकताओं के अनुसार घटाएं या बढ़ाएं या विशिष्ट vhost पर लागू हों।

लेकिन इस विकल्प द्वारा मेरे समस्या का समाधान:

से ऊपर विकल्प अपने सर्वर फेरबदल किया है, लेकिन कुछ समय के बाद त्रुटियों फिर से आ रही लगता है, लेकिन वास्तव में इस त्रुटि से हल किया जाता है:

FcgidOutputBufferSize 65536 [default] 

मैं इसे

FcgidOutputBufferSize 0 

यह अधिकतम डेटा डेटा है जो मॉड्यूल फास्टसी से पढ़ेगा ग्राहक को डेटा फ्लश करने से पहले जीआई आवेदन। यह तुरंत डेटा को फ्लैश करेगा जो कि 64 केबी बाइट्स का इंतजार नहीं कर रहा है, जो वास्तव में मुझे प्रक्रिया को और अधिक तेज़ करने में मदद करता है। यदि 500 ​​त्रुटि Nginx समय बाहर से आने वाले

अन्य मुद्दों मैं

मिला है। ठीक:

/etc/nginx/nginx.conf

keepalive_timeout 125; 
proxy_read_timeout 125; 
proxy_connect_timeout 125; 
fastcgi_read_timeout 125; 

रहकर मैं मिल MySQL "MySQL सर्वर दूर चला गया है" होगा त्रुटि है, जो एक और ट्वीक आवश्यक: /etc/my.conf

wait_timeout = 120 

फिर, बस funsies के लिए, मैं आगे चला गया और मेरी पीएचपी स्मृति सीमा बढ़ा, बस मामले में: /etc/php। आरं

memory_limit = 256M 

SuExec

mod_fastcgi का उपयोग Apache 2.x पर बिल्कुल SuExec के तहत काम नहीं करता। मेरे पास इससे कुछ भी परेशानी नहीं थी (इसमें हमारे परीक्षण में कई अन्य मुद्दे भी थे)। आपकी समस्या का वास्तविक कारण SuExec

मेरे मामले में यह मेरे लिए स्टार्टअप था, मैं अपाचे शुरू कर रहा हूं, mod_fcgid प्रत्येक vhost के लिए बिल्कुल 5 प्रक्रियाओं को स्पॉन्स करता है। अब, एक साधारण अपलोड स्क्रिप्ट का उपयोग करते समय और 4-8KB से बड़ी फ़ाइल सबमिट करते समय उन सभी बाल प्रक्रियाओं को एक बार में विशिष्ट vhost के लिए स्क्रिप्ट निष्पादित करने के लिए मार दिया जाता है।

डीबग बनाने या mod_fcgid में लॉगिंग को क्रैंक करना संभव हो सकता है जो एक सुराग दे सकता है।

मैंने 1 साल के लिए mod_fastcgi की कोशिश की और मैं भी कई अन्य लोगों के साथ कह सकता हूं कि SuExec कुछ भी परेशानी नहीं है और हर मामले में आसानी से नहीं चलता है।

+0

दुर्भाग्यवश, FcgidOutputBufferSize 0 को सेट करने से ap_pass_brigade त्रुटियों को खत्म नहीं किया गया। क्या हम यह भी जानते हैं कि इस त्रुटि का क्या अर्थ है? – Slashterix

+0

विशिष्ट सीजीआई सर्वरों के वितरण के लिए अलग-अलग आने वाले अनुरोधों के लिए, भार संतुलन, एकाधिक वेबसाइटों की मेजबानी आदि ... – Vineet1982

+0

@ स्लेशटेरिक्स कृपया लेटेम को PHP के मोड को जानना चाहिए क्योंकि यह php-fpm के साथ चलाना चाहिए, अगर नहीं तो इसे स्विच करें और आपकी समस्याएं चलेगा यदि नहीं, तो मुझे फिर से बताएं – Vineet1982

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