2015-06-01 8 views
8

मैं अपने उबंटू सर्वर पर बीनस्टॉक और पर्यवेक्षक का उपयोग करके "वेबहुक" नामक एक लार्वेल कतार नौकरी चला रहा हूं। मैं प्रक्रिया आईडी 4403:पर्यवेक्षक के साथ लार्वा कतार बहुत अधिक फीफो फाइलें खोल रहा है

webhooks       RUNNING pid 4403, uptime 4 days, 19:47:01 

जैसा कि आप देख सकते हैं, यह नौकरी 4 दिनों तक चल रही है।

error:02001018:system library:fopen:Too many open files 

जब मैं lsof | php दौड़ा देखने के लिए फ़ाइलों को खुले थे, मैं उस प्रकार FIFO था खुली फ़ाइलों की एक टन देखा: मेरे त्रुटि लॉग में, मैं निम्नलिखित त्रुटि प्रदर्शित होने की सूचना के लिए शुरू कर दिया। यहां आउटपुट से एक विशेषज्ञ है:

COMMAND  PID TID  USER FD  TYPE    DEVICE SIZE/OFF  NODE NAME  
php  4403    root 0r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 1w  FIFO    0,8  0t0 9215812 pipe 
php  4403    root 2w  FIFO    0,8  0t0 9215812 pipe 
php  4403    root 3w  FIFO    0,8  0t0 9215812 pipe 
php  4403    root 4w  FIFO    0,8  0t0 9215812 pipe 
php  4403    root 8r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 9r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 10r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 11r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 12r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 13r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 14r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 15r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 16r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 17r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 18r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 19r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 20r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 21r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 22r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 23r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 24r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 25r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 26r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 27r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 28r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 29r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 30r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 31r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 32r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 33r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 34r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 35r  FIFO    0,8  0t0 9215811 pipe 
php  4403    root 36r  FIFO    0,8  0t0 9215811 pipe 

यह सिर्फ एक अंश है। वास्तव में इनफ़ाइलों में से लगभग 1200 खुले हैं।

क्या किसी को पता है कि फ़ाइलों को किस प्रकार बनाया जा रहा है? किस प्रकार का कोड सिस्टम को एक नई फीफो फ़ाइल खोलने का कारण बनता है? इन फ़ाइलों के लिए क्या उपयोग किया जाता है?

+0

एक त्वरित Google आपको यह बताने देता है कि फीफो फ़ाइलों को पाइप नाम दिया गया है। आपकी लिपि में कुछ, या पर्यवेक्षक में इन पाइप बना रहे हैं। PHP मैनुअल में नामित पाइप पर नज़र डालें और देखें कि क्या आप पाइप बनाने वाले कोड को ट्रैक नहीं कर सकते हैं। – Styphon

+0

क्या आप जानते हैं कि किस प्रकार का कोड सिस्टम नामित पाइप बनाने का कारण बन सकता है? मुझे पता है कि यह एक व्यापक सवाल है, लेकिन मुझे यकीन नहीं है कि कहां से शुरू करना है। जो कोड चल रहा है वह मेरे आंतरिक सिस्टम के बीच ऑब्जेक्ट्स को सिंक कर रहा है, और बिगकॉमर्स एपीआई का उपयोग करके एक बाहरी सिस्टम [PHP एसडीके] (https://github.com/bigcommerce/bigcommerce-api-php) का उपयोग कर रहा है। तो यह लगातार बिगॉमर्स से जानकारी को दबा रहा है और खींच रहा है। पहले मैं बहुत सारे कनेक्शन खोल रहा था, जिससे कई फाइलें खुली त्रुटि उत्पन्न हुईं, लेकिन अब यह हल हो गया है और इस फीफो समस्या ने अपना स्थान लिया है। – flyingL123

+0

या तो बीनस्टॉक या पर्यवेक्षक से परिचित नहीं है, लेकिन मैं 'proc_open' या' mkfifo' के लिए व्यक्तिगत रूप से [अपना कोड आधार खोज रहा हूं] (https://github.com/ggreer/the_silver_searcher) से शुरू करूंगा। – bishop

उत्तर

0

मैंने अपनी प्रणाली पर फ़ाइल खोलने की सीमा को बढ़ाया, और ऐसा लगता है कि समस्या ठीक हो गई है।

supervisord फ़ाइल वर्णनकर्ता उदारतापूर्वक का उपयोग करता है, और जब एक ओएस

से प्राप्त नहीं किया जा सकता 10,000 मेरी फाइल खुली सीमा बढ़ाने के बाद एक विफलता मोड में प्रवेश करेगा, मेरे पास है: पर्यवेक्षक डॉक्स का कहना है कि त्रुटि को देखना बंद कर दिया। मैं समय-समय पर खुली फीफो फाइलों की संख्या की जांच करता हूं, और कई बार यह बहुत अधिक है (हजारों में) और दूसरी बार यह बहुत कम है (सैकड़ों में)। तो ऐसा लगता है कि पर्यवेक्षक खुलता है और इन फ़ाइलों को लगातार बंद कर देता है, और मुझे यह सुनिश्चित करने की ज़रूरत है कि सिस्टम पर्यवेक्षक को अपनी नौकरी करने के लिए पर्याप्त जगह की अनुमति दे रहा था।

यदि कोई सोच रहा है, तो मैंने निम्नलिखित दो पंक्तियों को /etc/security/limits.conf के नीचे जोड़कर फ़ाइल सीमा बढ़ा दी है।

root    soft nofile   10000 
root    hard nofile   10000 

मैंने पहले नई सीमा प्रभावी हो गई थी और कई बार अपने सिस्टम से बाहर पर्यवेक्षक के साथ-साथ लॉग पुनः आरंभ करने के लिए किया था, लेकिन अंत में यह काम किया।

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