कुछ समय के लिए XDebug के साथ PHP में अपाचे चलाने के बाद मैक OSX पर "बहुत सारी फाइलें खुलती हैं"


13

मैं मैक ओएस एक्स 10.9.4 चला रहा हूं, जिसमें पीओएस (संकुल: php55, php55-intl, php55-pdo-pgsql, php55-xdebug) से PHP 5.5.14 के साथ बिलियन अपाचे 2 वेबसर्वर शामिल है।

इस सेटअप को चलाते समय यह काफी अच्छा काम करता है। हालांकि, कुछ समय बाद, मैं हर अनुरोध के लिए 403 त्रुटियों पर चलूंगा। मैंने अपाचे त्रुटि लॉग देखा है, और निम्न जैसा कुछ पाया:

[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Warning:  require_once(/Users/daniel/Development/massiveart/sulu-complete/app/bootstrap.php.cache): failed to open stream: Too many open files in /Users/daniel/Development/massiveart/sulu-complete/web/website.php on line 10, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP   1. {main}() /Users/daniel/Development/massiveart/sulu-complete/web/website.php:0, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Fatal error:  require_once(): Failed opening required '/Users/daniel/Development/massiveart/sulu-complete/web/../app/bootstrap.php.cache' (include_path='.:/usr/local/Cellar/php55/5.5.14/lib/php') in /Users/daniel/Development/massiveart/sulu-complete/web/website.php on line 10, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP   1. {main}() /Users/daniel/Development/massiveart/sulu-complete/web/website.php:0, referer: http://sulu.lo/de
[Fri Jul 25 05:28:40 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:45 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:45 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de

यह मुझे ऐसा लगता है जैसे फ़ाइल को अब पढ़ा नहीं जा सकता है, और यह किसी तरह 403 लौटाता है। मुझे पहले से ही कुछ सीमाओं के बारे में पता चला है, लेकिन लॉन्च किए गए रिटर्न में मेरे पास खुली फाइलों पर असीमित कठिन सीमा है:

 ~ $ launchctl limit
    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    256            unlimited

मैंने पहले से ही कमांड के साथ अधिकतम 4096 सेट करने की कोशिश की है launchctl limit maxfiles 4096 16384, लेकिन यह मुद्दा अभी भी कुछ समय बाद वापस आ गया है। किसी भी विचार मैं और क्या जाँच कर सकते हैं?

अद्यतन : जब lsof -c httpdगॉर्डन डेविसन द्वारा सुझाए गए अनुसार चल रहा है, तो मैं देख सकता हूं कि निम्नलिखित की तरह प्रविष्टियों का भार है:

httpd   1361 _www   15u    IPv4 0xb306b48659f63853       0t0     TCP localhost:50603->localhost:cslistener (CLOSED)

मैं कह सकता हूं कि मैं जिस एप्लिकेशन का उपयोग कर रहा हूं वह वेबसोकेट्स का उपयोग कर रहा है, और जब वेबस्केट उपलब्ध नहीं है या सर्वर पर काउंटरपार्ट नहीं चल रहा है तो भी फालबैक का उपयोग कर रहा है। क्या-मुझे भ्रमित करता है (CLOSED)-आधार, क्यों यह अभी भी सूचीबद्ध है?

अद्यतन : कुछ समय बाद मैंने cslistener पोर्ट को देखा, जो वास्तव में 9000 है, जो फिर से पोर्ट xdebug है जो दूरस्थ डीबगिंग के लिए सुन रहा है। तो मुझे लगता है कि मुझे वहां कुछ गलत कॉन्फ़िगरेशन मिला है, या यह xdebug में एक बग है (मैं एक्सडबग 2.2.5 का उपयोग कर रहा हूं, काढ़ा द्वारा स्थापित)

जवाबों:


14

क्या आप मैक पर XDEBUG के साथ PHPStorm का उपयोग कर रहे हैं?

मेरी भी यही समस्या है। मुझे यहाँ XDEBUG के साथ एक खुला बग मिला:

http://bugs.xdebug.org/view.php?id=1070

अपडेट करें

इस बग को अब ठीक कर दिया गया है:

मैंने अभी सीन डबॉइस द्वारा एक पैच मर्ज किया है, जिसे इस \ o / को ठीक करना चाहिए! पैच 2.3.4 और 2.4.0 में होने जा रहा है।

मेरा मानना ​​है कि यह कमिट है: https://github.com/xdebug/xdebug/commit/6efc6588efc277d648a78b69c11c721992c996f9

सुनिश्चित करें कि आप इस पैच के साथ एक अद्यतन संस्करण का उपयोग कर रहे हैं ।


वास्तव में समाधान नहीं है, लेकिन मुझे लगता है कि यह सवाल का जवाब देता है
डैनियल रोटर

मूल रूप से, Xdebug कनेक्शन श्रोताओं के लिए फ़ाइल डिस्क्रिप्टर लीक कर रहा है (क्षमा करें यदि यह तकनीकी रूप से गलत है, तो यह विचार है) जब डिबगिंग क्लाइंट खुला नहीं है। समस्या को हल करने के लिए, सुनिश्चित करें कि डिबगर क्लाइंट दूरस्थ डिबगिंग सत्र प्रारंभ करते समय खुला है। बेशक, एक बेहतर समाधान डेवलपर्स द्वारा बग को ठीक करना होगा।
mcdado

यह कुछ डिबगर ओपन (उदाहरण के लिए PhpStorm) के साथ भी होता है। उम्मीद है कि वे इसे ठीक कर लेंगे :)
स्टीव टौबर

यह बहुत महत्वपूर्ण है, मुझे उम्मीद है कि जल्द ही एक फिक्स जारी किया जाएगा।
ह्यूबर्ट पेर्रोन

1
एक अन्य वैकल्पिक हल सेट करने के लिए है xdebug.remote_enable=0में php.iniजब उनका उपयोग न xdebug दूरस्थ कनेक्शन की बारी करने के। अपाचे पुनरारंभ की आवश्यकता है।
ग्रेगोरी कॉस्मो हॉन

7

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

आप शायद lsof("LiSt ओपन फाइल्स") कमांड के साथ क्या चल रहा है कुछ विचार प्राप्त कर सकते हैं :

sudo lsof -c httpd

इसे चलाएं जब अपाचे लंबे समय तक देखने के लिए नहीं चल रहा है कि सामान्य क्या है, फिर जब यह सीमा को हिट करता है। कई अतिरिक्त फ़ाइलों के लिए दूसरे आउटपुट में देखें जो पहली सूची में नहीं हैं। ध्यान दें कि यह इस तथ्य से कुछ जटिल होगा कि यह सभी httpd प्रक्रियाओं द्वारा खोली गई फ़ाइलों को सूचीबद्ध करेगा , और (आपकी अपाचे सेटिंग्स और सर्वर लोड के आधार पर) उनमें से एक बड़ी संख्या हो सकती है; महत्वपूर्ण बात यह है कि किसी एकल प्रक्रिया द्वारा खोली गई फ़ाइलों की संख्या, सभी सर्वर प्रक्रियाओं में कुल नहीं। आप sudo lsof -p someprocessIDएक समय में केवल एक ही सर्वर प्रक्रिया को सूचीबद्ध करने के लिए भी उपयोग कर सकते हैं ।

उम्मीद है कि अतिरिक्त खुली हुई फाइलें देखकर आपको एक अच्छा विचार मिलेगा कि उन्हें क्या खोलना है और उन्हें खुला छोड़ना है।


इसकी कोशिश की, मैंने सवाल को अद्यतन किया।
डेनियल रोटर

मैं टीसीपी सॉकेट राज्यों के सटीक अर्थ से बहुत परिचित नहीं हूं, लेकिन यह मुझे लगता है कि काउंटरपार्ट के कनेक्शन ठीक से बंद नहीं हो रहे हैं। क्या यह शॉर्टलिस्टर पोर्ट (संख्या 9000) पर चल रहा है? आपका ऐप अपने समकक्ष से कनेक्शन कैसे बंद करता है? क्या यह संभव है कि यह टीसीपी सत्र को बंद कर दे, लेकिन फाइल डिस्क्रिप्टर को नहीं।
गॉर्डन डेविसन

1
मुझे पता चला कि 9000 बंदरगाह xdebug पर सुन रहा है, तो क्या यह संभव है कि त्रुटि इस विस्तार में है?
डेनियल रोटर

3

निम्नलिखित पंक्ति को xdebug.ini में जोड़ने से मेरे लिए समस्या हल हो गई

xdebug.remote_autostart = 0

1

मैं OSX 10.9.4 के साथ एक ही बात कर रहा हूं और दोनों Apache 2.2 और Brew से PHP 5.3।

हालांकि यह वास्तव में समस्या को ठीक नहीं करता है, आप इसे Apache MaxRequestsPerChild की सेटिंग में 10 की तरह कुछ करके सेट कर सकते हैं - जो विकास के लिए ठीक होना चाहिए।

diff -r 2c0473b696fd -r acf809f04b17 apache2/2.2/httpd.conf
--- a/apache2/2.2/httpd.conf    Thu Aug 14 16:14:25 2014 -0500
+++ b/apache2/2.2/httpd.conf    Thu Aug 14 16:19:10 2014 -0500
@@ -437,7 +437,7 @@
 # necessary.

 # Server-pool management (MPM specific)
-#Include /usr/local/etc/apache2/2.2/extra/httpd-mpm.conf
+Include /usr/local/etc/apache2/2.2/extra/httpd-mpm.conf

 # Multi-language error messages
 #Include /usr/local/etc/apache2/2.2/extra/httpd-multilang-errordoc.conf
diff -r 2c0473b696fd -r acf809f04b17 apache2/2.2/extra/httpd-mpm.conf
--- a/apache2/2.2/extra/httpd-mpm.conf  Thu Aug 14 16:14:25 2014 -0500
+++ b/apache2/2.2/extra/httpd-mpm.conf  Thu Aug 14 16:19:10 2014 -0500
@@ -38,7 +38,7 @@
     MinSpareServers       5
     MaxSpareServers      10
     MaxClients          150
-    MaxRequestsPerChild   0
+    MaxRequestsPerChild  10
 </IfModule>

 # worker MPM

यह आपको कम से कम एपाचे को फिर से शुरू करने से बचाने के लिए उन लीक फ़ाइलों से छुटकारा पाने के लिए अक्सर करना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.