फ़ाइल डिस्क्रिप्टर लीक को कैसे ट्रैक करें?


11

मेरे पास एक जावा प्रक्रिया (ग्लासफिश) है जो फाइल डिस्क्रिप्टर लीक कर रही है। मुझे यह पता है क्योंकि मुझे सहायक java.io.IOException: Too many open filesअपवाद मिलता है। मैं /proc/PID#/fdसभी खुले फ़ाइल विवरणों को देख और देख सकता हूँ । जब मैं lsof का उपयोग करता हूं तो मुझे इस तरह की बड़ी संख्या में प्रविष्टियां मिलती हैं:

जावा 18510 रूट 8811u जुर्राब 0,4 1576079 प्रोटोकॉल की पहचान नहीं कर सकता है
जावा 18510 जड़ 8812u जुर्राब 0,4 1576111 प्रोटोकॉल की पहचान नहीं कर सकता
जावा 18510 जड़ 8813u जुर्राब 0,4 1576150 प्रोटोकॉल की पहचान नहीं कर सकता

मैं प्रति मिनट 12 नए बनाए गए देखता हूं। मैं lsof पर क्या विकल्प इस्तेमाल कर सकता हूं या सॉकेट फ़ाइल डिस्क्रिप्टर को ट्रैक करने में मदद के लिए मेरे पास कौन से अन्य उपकरण उपलब्ध हैं जहां प्रोटोकॉल की पहचान नहीं की जा सकती है?


//, इस सवाल के बहुत सारे जवाब हैं, लेकिन एक खोज इंजन क्वेरी दूर है ... duckduckgo.com/?q=How+to+track+down+a+file+descriptor+leak
नाथन बसानी

जवाबों:


7

प्रक्रियाओं का उपयोग करके शीर्ष 20 फ़ाइल हैंडल देखना:

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

आउटपुट प्रक्रिया के लिए प्रारूप फ़ाइल हैंडल काउंट, पीआईडी, सेमींडलाइन में है

उदाहरण आउटपुट

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

4

स्ट्रेस कमांड से परिचित हों। यह सिस्टम कॉल को मॉनिटर करता है। मैंने हाल ही में इसका उपयोग फ़ाइल डिस्क्रिप्टर लीक को ट्रैक करने के लिए किया था जो हमारे स्नैम्पड डेमन को बार-बार दुर्घटनाग्रस्त करने का कारण बना रहे थे। यह कुछ करने के लिए इस्तेमाल किया जा रहा है, लेकिन यह एक शक्तिशाली उपकरण है।

आप एक चल रही प्रक्रिया से जुड़ने के लिए स्ट्रेस का उपयोग कर सकते हैं (बाल प्रक्रियाओं का पालन करने के लिए -f ध्वज को न भूलें)।


1

क्या आप वास्तव में नीचे ट्रैक करने की कोशिश कर रहे हैं? लीक हुए एफडी, दोषपूर्ण कोड, या कुछ और के साथ जुड़ा रिमोट आईपी एड्रेस (तों)?

जैसा कि आप पहले ही पहचान चुके हैं कि एक रिसाव है, इस जावा प्रक्रिया के लिए जिम्मेदार इंजीनियरों से संपर्क करना एक उचित अगले कदम की तरह लगता है।


मैं उन फ़ाइल डिस्क्रिप्टर के बारे में किसी भी जानकारी को ट्रैक करने की कोशिश कर रहा हूं। can't identify protocolइंजीनियरों को चलाने के लिए बहुत कुछ नहीं देता है। क्या lsof में ऐसे उपकरण या विकल्प हैं जो मैं नहीं देख रहा हूँ जो मुझे उपयोग करने चाहिए? समस्या परीक्षण एनवी में नहीं होती है और केवल इस एनवी में कैबिनेट के प्रवास के बाद शुरू होती है। समान कोड में माइग्रेशन से पहले कोई समस्या नहीं थी और जब ऐप्पल अप्रभावित रहता है, तब भी ग्लासफिश अपने आप लीक हो जाता है। मेरा सबसे अच्छा अनुमान है कि एक नेटवर्किंग के नजरिए से कुछ टूट गया है और सॉकेट्स इनिशियलाइज़ करने की कोशिश कर रहे हैं, लेकिन नहीं कर सकते हैं और फिर वे लटक जाते हैं और चारों ओर छोड़ दिए जाते हैं।
18
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.