हमारे पास एक वेब जावा आधारित एप्लिकेशन है जो जेबॉस पर चल रहा है जिसमें अधिकतम 1.2 जीबी (कुल मशीन भौतिक मेमोरी 2 जीबी) है। कुछ बिंदु पर एप्लिकेशन कई मिनटों के लिए प्रतिक्रिया (ग्राहकों को) बंद कर देता है। कुछ विश्लेषण के बाद हमने पाया कि अपराधी पूर्ण जीसी है। यहाँ वर्बोज़ जीसी लॉग से एक अंश है:पूर्ण जीसी वास्तविक समय अधिक है कि उपयोगकर्ता + sys times
74477,402: [पूर्ण जीसी [PSYoungGen: 3648K-> 0K (332160K)] [PSOldGen: 778476K-> 589497K (819200K)] 782124K-> 589497K (1151360K) [PSPermGen: 102671K-> 102671K (171328K)], ६४६.१५४६८६० सेकेंड] [टाइम्स: उपयोगकर्ता = 3.84 sys = 3.72, अचल = 646.17 सेकेंड]
क्या मुझे समझ नहीं आता कैसे संभव यह है कि वास्तविक समय पूर्ण जीसी पर खर्च लगभग 11 मिनट (646 सेकंड) है, जबकि उपयोगकर्ता + sys times केवल 7.5 सेकंड हैं। 7.5 सेकंड पुरानी पीढ़ी से < 200 एमबी की सफाई के लिए खर्च करने के लिए मुझे और अधिक तार्किक समय लगता है। अन्य सभी समय कहां जाता है?
बहुत बहुत धन्यवाद।
एक और दृष्टिकोण लंबे समय तक जीवित वस्तुओं को कम कर सकता है, क्योंकि अल्पकालिक वस्तुओं को और अधिक तेज़ी से पुनर्नवीनीकरण किया जाएगा। उदाहरण के लिए ऑब्जेक्ट-पूलिंग जावा में एक खराब प्रथा है। –
सच है। मैं उन चीजों पर ध्यान केंद्रित कर रहा था जो ओपी समस्या को हल करने के लिए जल्दी से कर सकता था। –
क्या आप इस बारे में निश्चित हैं? मैं उम्मीद करता हूं कि एक जेवीएम प्रक्रिया एक पेजिन के लिए प्रतीक्षा कर रही है जो समय sys = में बिताती है। – eckes