2010-06-15 8 views
12

हमारे पास एक वेब जावा आधारित एप्लिकेशन है जो जेबॉस पर चल रहा है जिसमें अधिकतम 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 एमबी की सफाई के लिए खर्च करने के लिए मुझे और अधिक तार्किक समय लगता है। अन्य सभी समय कहां जाता है?

बहुत बहुत धन्यवाद।

उत्तर

10

अन्य सभी समय कहां जाता है?

यह संभव है कि आपका एप्लिकेशन वर्चुअल मेमोरी थ्रैशिंग कर रहा है। असल में, आपके एप्लिकेशन को वर्चुअल मेमोरी के अधिक पृष्ठों की आवश्यकता होती है, ताकि उन्हें पकड़ने के लिए भौतिक पृष्ठ उपलब्ध हों। नतीजतन, यह अधिकांश समय वीएम पृष्ठों को पढ़ने और डिस्क पर लिखे जाने का इंतजार कर रहा है।

अधिक जानकारी के लिए, this wikipedia page पढ़ें।

इलाज या तो वर्चुअल मेमोरी उपयोग को कम करने या सिस्टम पर भौतिक स्मृति की मात्रा को बढ़ाने के लिए है। उदाहरण के लिए, आप कर सकते हैं: मशीन पर

  • रन कम आवेदन,
  • जावा अनुप्रयोग ढेर आकार को कम करने, या
  • यदि आप एक आभासी में चल रहे हैं, भौतिक स्मृति की की आभासी आवंटन में वृद्धि।

(हालांकि ध्यान दें कि JVM ढेर आकार को कम करने के लिए एक दो धारी तलवार हो सकता है। आप, ढेर आकार बहुत ज्यादा आवेदन या तो OutOfMemoryErrors से मर जाएगा को कम भी ज्यादा समय कचरा एकत्र करने खर्च करते हैं, या नहीं से ग्रस्त हैं चीजों को प्रभावी ढंग से कैश करने में सक्षम होना।)

+0

एक और दृष्टिकोण लंबे समय तक जीवित वस्तुओं को कम कर सकता है, क्योंकि अल्पकालिक वस्तुओं को और अधिक तेज़ी से पुनर्नवीनीकरण किया जाएगा। उदाहरण के लिए ऑब्जेक्ट-पूलिंग जावा में एक खराब प्रथा है। –

+0

सच है। मैं उन चीजों पर ध्यान केंद्रित कर रहा था जो ओपी समस्या को हल करने के लिए जल्दी से कर सकता था। –

+0

क्या आप इस बारे में निश्चित हैं? मैं उम्मीद करता हूं कि एक जेवीएम प्रक्रिया एक पेजिन के लिए प्रतीक्षा कर रही है जो समय sys = में बिताती है। – eckes

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