http://www.mchange.com/projects/c3p0/#other_ds_configuration
numHelperThreads और maxAdministrativeTaskTime DataSource थ्रेड पूल के व्यवहार को कॉन्फ़िगर करने में मदद करें। डिफ़ॉल्ट रूप से, प्रत्येक डेटा स्रोत में केवल तीन संबद्ध सहायक थ्रेड होते हैं। यदि प्रदर्शन भारी भार के तहत खींचता हुआ प्रतीत होता है, या यदि आप JMX या पूलडडेटा स्रोत के प्रत्यक्ष निरीक्षण के माध्यम से देखते हैं, कि "लंबित कार्यों" की संख्या आमतौर पर शून्य से अधिक है, तो numHelperThreads को बढ़ाने का प्रयास करें। अधिकतम प्रशासनिक कार्य समय उन उपयोगकर्ताओं के लिए उपयोगी हो सकता है जो ऐसे कार्यों का अनुभव कर रहे हैं जो अनिश्चित काल तक लटके रहते हैं और "स्पष्ट गतिरोध" संदेश। (अधिक के लिए परिशिष्ट ए देखें।)
अधिकतम प्रशासनिक कार्य समय डिफ़ॉल्ट:c3p0 के थ्रेड पूल से 0 सेकंड पहले एक स्पष्ट रूप से लटका हुआ कार्य बाधित करने का प्रयास करेगा। विरले ही उपयोगी। c3p0 के कई कार्य क्लाइंट थ्रेड द्वारा नहीं किए जाते हैं, लेकिन आंतरिक थ्रेड पूल द्वारा असीमित रूप से किए जाते हैं। c3p0 की अतुल्यकालिकता सीधे क्लाइंट के प्रदर्शन को बढ़ाती है, और यह सुनिश्चित करके कि गैर-लॉक-होल्डिंग थ्रेड्स में धीमी jdbc संचालन किया जाता है, महत्वपूर्ण तालों की अवधि को कम करता है। यदि, हालांकि, इनमें से कुछ कार्य "लटका" हैं, यानी वे लंबे समय तक अपवाद के साथ न तो सफल होते हैं और न ही असफल होते हैं, तो c3p0 का थ्रेड पूल समाप्त हो सकता है और प्रशासनिक कार्यों का बैकअप लिया जा सकता है। यदि कार्य केवल धीमे हैं, तो समस्या को हल करने का सबसे अच्छा तरीका है कि थ्रेड्स की संख्या में वृद्धि की जाए, numHelperThreads के माध्यम से . लेकिन यदि कार्य कभी-कभी अनिश्चित काल तक लटकते हैं, तो आप इस पैरामीटर का उपयोग कार्य थ्रेड की इंटरप्ट() विधि पर कॉल करने के लिए कर सकते हैं यदि कोई कार्य निर्धारित समय सीमा से अधिक हो जाता है। [c3p0 अंतत:"अपरेंट डेडलॉक" (आप इसे लॉग में एक चेतावनी के रूप में देखेंगे), थ्रेड पूल टास्क थ्रेड्स की जगह, और इंटरप्ट () को मूल थ्रेड्स को सिग्नल करके किसी भी तरह से त्रिशंकु कार्यों से पुनर्प्राप्त करेगा। लेकिन पूल को APPARENT DEADLOCK में जाने देना और फिर ठीक होने का मतलब है कि कुछ समय के लिए c3p0 का प्रदर्शन ख़राब हो जाएगा। इसलिए यदि आप ये संदेश देख रहे हैं, तो numHelperThreads बढ़ाना और maxAdministrativeTaskTime सेट करना मदद कर सकता है . maxAdministrativeTaskTime इतना बड़ा होना चाहिए कि डेटाबेस से कनेक्शन प्राप्त करने, कनेक्शन का परीक्षण करने, या दो कनेक्शन को नष्ट करने का कोई भी उचित प्रयास, निर्धारित समय के भीतर सफल या विफल होने की उम्मीद की जाएगी। शून्य (डिफ़ॉल्ट) का अर्थ है कि कार्य कभी बाधित नहीं होते हैं, जो कि अधिकांश परिस्थितियों में सबसे अच्छी और सबसे सुरक्षित नीति है। यदि कार्य केवल धीमे हैं, तो अधिक थ्रेड आवंटित करें। यदि कार्य हमेशा के लिए लटके हुए हैं, तो यह पता लगाने की कोशिश करें कि क्यों, और शायद इस बीच maxAdministrativeTaskTime सेट करने से मदद मिल सकती है।
The default is 3 for numHelperThreads , increase this to 8-10
setting maxAdministrativeTaskTime will help