मैं 4-सीपीयू और 32 जीबी मेमोरी 64 बिट मशीन पर टॉमकैट चला रहा हूं (ओएस सेंटोस 6.3 है)। जावा विकल्प मैं टॉमकैट के साथ शुरू करता हूं -server -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m
जावा प्रोग्राम (टॉमकैट) मेमोरी खा रहा है (शीर्ष में आरईएस)
शुरुआत में, आरईएस शीर्ष का उपयोग कर केवल 810 एमबी है, और यह बढ़ता रहता है। इस अवधि के दौरान, मैं जावा मेमोरी ढेर की जांच के लिए jmap -J-d64 -histo pID
चलाता हूं, और मुझे लगता है कि जीसी ठीक काम करता है, क्योंकि ढेर शिखर 510 एमबी है और जीसी के बाद लगभग 200 एमबी है। लेकिन जब आरईएस शीर्ष पर 1.1 जी हिट करता है, तो CPU उपयोग 100% से अधिक हो जाएगा और टॉमकैट लटकाएगा।
सीपीयू उपयोग 100% होने पर डंप देखने के लिए jstack pid
का उपयोग करके, "वीएम थ्रेड" नामक धागा लगभग 100% CPU खाता है। मैं googled, यह जेवीएम जीसी धागा है। तो मेरा सवाल यह है कि जब जीसी ठीक काम करता है तो क्यों बढ़ता रहता है? मैं इस समस्या को कैसे हल कर सकता हूं? धन्यवाद।
मैं देख रहा हूँ कि आप मेरे इस सवाल का जवाब स्वीकार कर लिया है:
आगे की जांच पड़ताल के लिए इस सूत्र का पालन करें। जिज्ञासा से बाहर, क्या आप संक्षेप में वर्णन कर सकते हैं कि क्या कारण था और वास्तव में क्या मदद मिली? –
जब जीसी थ्रेड 100% से अधिक सीपीयू लेता है, तो मेरे दिमाग में आने वाली पहली चीज़ स्मृति रिसाव होती है। लेकिन तथ्य यह है कि -एक्सएमएक्स 1024 मीटर मेरे ऐप के लिए बहुत छोटा है ..... मैंने गलती की :(मैं 2048 मीटर तक मेमोरी बढ़ाता हूं (-Xmx2048m), और जब यह 1.2 जी तक है तो शीर्ष का आरईएस बढ़ता नहीं है ......... – ing
तो मुझे लगता है कि @digitaljoel द्वारा उत्तर –