हाल ही में हमने वाईजेपी 11.0.9 का उपयोग करके हमारे आवेदन (एक एक्सएमपीपी आधारित चैट सर्वर) का परीक्षण शुरू कर दिया। हमारे परीक्षण के दौरान हमने अजीब व्यवहार के बाद देखा।पार्क/अनपर्क में 60% CPU उपयोग क्यों है?
- नमूनाकरण sun.misc.Unsafe.unpark (ऑब्जेक्ट) ने 60% सीपीयू लिया।
- उसी ऐप के लिए ट्रेसिंग से पता चलता है कि LockSupport.park (ऑब्जेक्ट) ने 52% CPU लिया।
मैंने परिणामों की पुष्टि करने के लिए कई परीक्षण किए और हर बार मुझे इसी तरह के परिणाम मिलते हैं।
मुझे समझ में नहीं आता कि क्यों अनपर्क 60% समय लेना चाहिए और क्यों ट्रेसिंग बिल्कुल विपरीत परिणाम दिखाती है।
क्या कोई मुझे इन परिणामों को समझने में मदद कर सकता है। क्या मुझसे कोई चूक हो रही है?
पर्यावरण:
java -version java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b04) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
'अनपर्क' को कॉल करना बहुत अधिक हो सकता है, थ्रेड कभी भी एकमात्र चीज है। आपका क्या मतलब है कि "ट्रेसिंग बिल्कुल विपरीत परिणाम दिखाती है"? क्या ट्रेसिंग शायद किसी विधि के भीतर बिताए गए समय को मापती है? 'पार्क' एक अवरुद्ध विधि है, इसलिए इसमें कोई आश्चर्य की बात नहीं है। –
@ मार्कोटोपॉलिक थ्रेड अन्य चीजें भी करता है। मूल रूप से इसके निर्माता/उपभोक्ता समस्या। कार्य का उत्पादन करें और इसे कतार में जमा करें और प्रतीक्षा उपभोक्ताओं को सूचित करें। उपभोक्ता कार्य पर कार्य करता है और यदि पार्क से स्वयं कोई कार्य उपलब्ध नहीं है। –
थ्रेड जो 'अनपर्क' कहता है वह धागा अनपर्क नहीं होता है। बदले में, यह धागा उचित उपभोक्ता धागे को अनदेखा करने के अलावा ही थोड़ा काम कर सकता है। 'पार्क' के सीपीयू समय के लिए, यह एक है) अवरुद्ध होने के कारण मापना कठिन है और बी) अप्रासंगिक है क्योंकि यह पार्क किए गए राज्य में व्यतीत वास्तविक समय का एक महत्वपूर्ण अंश होगा। नमूना परीक्षण में –