जावा 8 अद्यतन 45 में, java
कॉल करने के लिए इन विकल्पों को जोड़ने:जावा में लंबे स्पिन और सिंक के समय का क्या कारण बनता है?
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1
इस तरह मुझे आंकड़ों से पता चलता:
vmop [threads: total initially_running wait_to_block] [time: spin block sync cleanup vmop] page_trap_count
3679.229: no vm operation [ 72 1 2 ] [ 6016 0 6016 0 0 ] 1
2015-05-22T11:25:27.519+0200: Total time for which application threads were stopped: 6.0168551 seconds, Stopping threads took: 6.0164099 seconds
समस्या यहाँ Stopping threads
के लिए लंबे समय है। इस उदाहरण में, यह 6 सेकंड है जो हमारे आवेदन के लिए पहले से ही एक समस्या है, लेकिन मैंने एक उदाहरण में (पूर्ण लॉगिंग के बिना) लगभग एक मिनट में भी बड़ा समय देखा है।
वीएम ऑपरेशन (यहां: no vm operation
) अलग-अलग है। मैंने भी देखा है, उदा। RevokeBias
, G1IncCollectionPause
, या GCG_Operation
। इसके अलावा, page_trap_count
अप्रासंगिक प्रतीत होता है। मैंने उदाहरण देखा है कि यह 0 था, और अन्य जहां यह 2 था। हालांकि, यह है कि समय हमेशा spin
और sync
के मानों में दिखाई देता है।
मैं उन समय मूल्यों spin
और sync
की गहराई से स्पष्टीकरण की तलाश में हूं, लेकिन ज्यादातर मुझे दिलचस्पी है कि यह क्यों हो रहा है और मैं इसके खिलाफ क्या कर सकता हूं। मुझे हमारी कॉन्फ़िगरेशन में कुछ भी 'बुराई' से अवगत नहीं है। मशीन पर बहुत सारे ऊब गए कोर और अप्रयुक्त स्मृति हैं, हम शुद्ध जावा (कोई जेएनआई) नहीं चला रहे हैं, और हम अपने कोड में किसी भी अत्यधिक सिंक्रनाइज़ेशन से अवगत नहीं हैं।
आप अपने विशिष्ट उपयोग मामले के बारे में अधिक जानकारी दे सकते हैं, ताकि लोग जान सकें कि कैसे मदद करें। –
दरअसल, मैं इसे न केवल हमारे अनुप्रयोगों में से एक के साथ देखता हूं, लेकिन मैं इसे बोर्ड में देखता हूं। तो वास्तव में एक विशिष्ट उपयोग मामले नहीं है। अगर मुझे पता था कि क्या देखना है, तो मैं समानता के लिए शिकार कर सकता हूं। हालांकि, मुझे संदेह है कि बहुत से लोगों को एक ही समस्या है लेकिन अभी तक ध्यान नहीं दिया है। लॉगिंग 'स्टॉपिंग थ्रेड ने लिया:' जिसने मुझे इंगित किया कि यह काफी नया है। – malamut