BoneCP

2013-01-21 22 views
12

में partitionCount के लिए एक बेहतर विवरण आधिकारिक BoneCP डॉक से: http://jolbox.com/index.html?page=http://jolbox.com/configuration.htmlBoneCP

partitionCount आदेश ताला विवाद को कम करने और इस प्रकार के प्रदर्शन में सुधार करने के लिए, प्रत्येक आवक कनेक्शन अनुरोध एक पूल है कि से एक कनेक्शन बंद उठाता थ्रेड-एफ़िनिटी, यानी पूल [थ्रेडआईडी% विभाजन_count]। इस नंबर जितना अधिक होगा, उतना बेहतर होगा कि आपका प्रदर्शन उस मामले के लिए होगा जब आपके पास बहुत से अल्पकालिक धागे हैं। एक निश्चित सीमा से परे, इन पूल के रखरखाव शुरू कर देंगे प्रदर्शन पर (और केवल मामला है जब एक विभाजन पर कनेक्शन बाहर चलना शुरू हो के लिए) एक नकारात्मक प्रभाव है करने के लिए।

डिफ़ॉल्ट: 2, न्यूनतम: 1, की सिफारिश की: 3-4 (लेकिन बहुत एप्लिकेशन विशिष्ट)

लेकिन ऐसा स्पष्ट नहीं है और एक अच्छा उदाहरण नहीं है। मैं 0-500 एक साथ थ्रेड के साथ एक सामान्य वेब सेवा चला रहा हूं। कौन सा अच्छा मूल्य है और क्यों?

उत्तर

19

तो आंतरिक रूप से BoneCP कनेक्शन के पूल के विभाजन गिनती संख्या है। प्रत्येक बार एक धागा कनेक्शन के साथ काम करने की कोशिश करता है, यह thread.getId() % partitionCount लेता है और उस पूल से कनेक्शन के साथ काम करता है। और आपके पास maxConnectionsPerPartition * partitionCount कुल कनेक्शन की संख्या होगी।

क्यों इस प्रदर्शन पर सकारात्मक प्रभाव पड़ता है? अच्छी तरह से एक ही कनेक्शन पर दो धागे का उपयोग नहीं किया जाना चाहिए (जाहिर है यह बुरा होगा), बोनेसीपी को रिहाई या कनेक्शन प्राप्त करने के लिए लॉक लेना होगा। लेकिन साथ ही साथ अन्य सभी थ्रेड जो भी करना चाहते हैं, उन्हें उस लॉक पर इंतजार करना होगा। तो एक अर्थ में आप partitionCount समानांतर में कनेक्शन की संख्या को जारी या प्राप्त कर सकते हैं।

इसे किस नंबर पर सेट करना है? मुझे लगता है कि कोर का # एक अच्छी शुरुआत है, क्योंकि आप समानांतर में और भी काम नहीं करेंगे। लेकिन इसके अलावा यह अनुमान लगाने का प्रयास करें कि कनेक्शन के लिए कितने धागे दौड़ेंगे, मापें और दोहराएं।

Btw, दुनिया के अधिकांश एक दशक से अधिक के लिए C3PO पर भरोसा किया गया है और कहा कि अनिवार्य रूप से किया था विभाजन गिनती 1. करने के लिए सेट तो तुम उसके साथ बहुत गलत नहीं जा सकते।

+8

यहां बोनसीपी लेखक: यह स्पष्टीकरण सही है। बस यह जोड़ना चाहेंगे कि अधिक विभाजन होने का अर्थ यह भी है कि प्रत्येक विभाजन में आमतौर पर कम कनेक्शन कॉन्फ़िगर होते हैं (क्योंकि वे विभाजित होते हैं)। यदि कोई थ्रेड थका हुआ विभाजन हिट करने का प्रयास करता है, तो यह अन्य विभाजनों से कनेक्शन लेने और लेने के लिए आगे बढ़ता है, इसलिए किसी बिंदु पर यह वास्तव में धीमा हो जाता है। चूंकि जावाडॉक्स अधिकतम 3-4 के आसपास चिपकते हैं (कोर का कोई भी संकेत भी नहीं है)। – wwadge

+0

@ user149789 और मिरको, तो हम में से उन लोगों के बादल सूक्ष्म उदाहरणों, जहां एकल कोर आदर्श हैं पर हमारे JVM आधारित एप्लिकेशन को चलाने के लिए, यह partitionCount आज 1. बेंचमार्किंग सेट किया जाना चाहिए जैसे मैं में है कि अधिकतम इस्तेमाल किया कनेक्शन देख कर हैरान था लगता है मेरी डेटाबेस नहीं 48 (config 3 partitionCount * 16 maxConnectionsPerPartition है), लेकिन था बल्कि सिर्फ 16 O_o – virtualeyes

+0

मैं समानांतर कनेक्शन से निपटने के लिए कम से कम 2 वक्तव्य कार्रवाई करने है, तो और उन कनेक्शन होगा ~ 30। क्या आप विभाजन आकार बता सकते हैं - क्या इसे 30 सेट किया जाना है? साथ ही, यदि आप BoneCPDataSource को सेट करने में शामिल अन्य पैरामीटर बता सकते हैं? – Sanchit