निम्न त्रुटि का स्पष्टीकरण:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.
सारांश:
आपने डेटाबेस से कनेक्शन की अनुमत सीमा से अधिक खोला है। आपने कुछ इस तरह से चलाया:Connection conn = myconn.Open();
एक लूप के अंदर, और conn.close();
run चलाना भूल गया . सिर्फ इसलिए कि आपकी कक्षा नष्ट हो गई है और एकत्रित कचरा डेटाबेस से कनेक्शन जारी नहीं करता है। इसका सबसे तेज़ समाधान यह सुनिश्चित करना है कि कनेक्शन बनाने वाले किसी भी वर्ग के साथ आपके पास निम्न कोड है:
protected void finalize() throws Throwable
{
try { your_connection.close(); }
catch (SQLException e) {
e.printStackTrace();
}
super.finalize();
}
उस कोड को किसी भी कक्षा में रखें जहां आप कनेक्शन बनाते हैं। फिर जब आपकी कक्षा में कचरा एकत्र किया जाएगा, तो आपका कनेक्शन जारी कर दिया जाएगा।
postgresql अधिकतम कनेक्शन की अनुमति देखने के लिए इस SQL को चलाएँ:
show max_connections;
डिफ़ॉल्ट 100 है। अच्छे हार्डवेयर पर PostgreSQL एक बार में कुछ सौ कनेक्शन का समर्थन कर सकता है। यदि आप हजारों चाहते हैं, तो आपको कनेक्शन ओवरहेड को कम करने के लिए कनेक्शन पूलिंग सॉफ़्टवेयर का उपयोग करने पर विचार करना चाहिए।
एक नज़र डालें कि कौन/क्या/कब/कहां आपके कनेक्शन खोल रहा है:
SELECT * FROM pg_stat_activity;
वर्तमान में उपयोग किए जाने वाले कनेक्शनों की संख्या है:
SELECT COUNT(*) from pg_stat_activity;
डीबगिंग रणनीति
-
आप उन प्रोग्रामों को अलग-अलग उपयोगकर्ता नाम/पासवर्ड दे सकते हैं जो यह पता लगाने के लिए कनेक्शन जारी नहीं कर रहे हैं कि यह कौन सा है, और फिर pg_stat_activity यह पता लगाने के लिए कि कौन सा स्वयं सफाई नहीं कर रहा है।
-
जब कनेक्शन नहीं बनाए जा सके तो एक पूर्ण अपवाद स्टैक ट्रेस करें और कोड का पालन करें जहां आप एक नया
Connection
बनाते हैं , सुनिश्चित करें कि प्रत्येक कोड लाइन जहां आप एक कनेक्शन बनाते हैंconnection.close();
. के साथ समाप्त होता है
max_connections को और अधिक कैसे सेट करें:
postgresql.conf में max_connections डेटाबेस सर्वर के लिए समवर्ती कनेक्शन की अधिकतम संख्या सेट करता है।
- सबसे पहले अपनी postgresql.conf फ़ाइल ढूंढें
- यदि आप नहीं जानते कि यह कहां है, तो डेटाबेस को sql से क्वेरी करें:
SHOW config_file;
- मेरा यहां है:
/var/lib/pgsql/data/postgresql.conf
- रूट के रूप में लॉगिन करें और उस फ़ाइल को संपादित करें।
- स्ट्रिंग खोजें:"max_connections"।
- आपको एक लाइन दिखाई देगी जो कहती है
max_connections=100
। - उस संख्या को बड़ा सेट करें, अपने पोस्टग्रेस्क्ल संस्करण के लिए सीमा की जांच करें।
- परिवर्तनों को प्रभावी करने के लिए postgresql डेटाबेस को पुनरारंभ करें।
अधिकतम अधिकतम_कनेक्शन क्या हैं?
इस क्वेरी का प्रयोग करें:
select min_val, max_val from pg_settings where name='max_connections';
मुझे मान मिलता है 8388607
, सिद्धांत रूप में आपके पास अधिकतम है, लेकिन फिर एक भगोड़ा प्रक्रिया हजारों कनेक्शन खा सकती है, और आश्चर्य की बात है, आपका डेटाबेस रिबूट होने तक अनुत्तरदायी है। अगर आपके पास 100 जैसे समझदार max_connections होते। आपत्तिजनक कार्यक्रम को एक नए कनेक्शन से वंचित कर दिया जाएगा।