निम्नलिखित त्रुटि का स्पष्टीकरण:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.
सारांश:
आपने डेटाबेस से कनेक्शन की अनुमत सीमा से अधिक खोला है। आप कुछ इस तरह भागे: Connection conn = myconn.Open();
एक लूप के अंदर, और दौड़ना भूल गए conn.close();
। सिर्फ इसलिए कि आपकी कक्षा नष्ट हो गई है और एकत्र कचरा डेटाबेस से कनेक्शन जारी नहीं करता है। इसका सबसे तेज़ निर्धारण यह सुनिश्चित करना है कि आपके पास कनेक्शन बनाने वाले किसी भी वर्ग के साथ निम्नलिखित कोड है:
protected void finalize() throws Throwable
{
try { your_connection.close(); }
catch (SQLException e) {
e.printStackTrace();
}
super.finalize();
}
उस कोड को किसी भी वर्ग में रखें जहाँ आप एक कनेक्शन बनाते हैं। फिर जब आपकी कक्षा में कचरा एकत्र किया जाएगा, तो आपका कनेक्शन जारी कर दिया जाएगा।
अनुमति के लिए अधिकतम कनेक्शन देखने के लिए इस 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 डेटाबेस को पुनरारंभ करें।
अधिकतम max_connections क्या है?
इस क्वेरी का उपयोग करें:
select min_val, max_val from pg_settings where name='max_connections';
मुझे वह मूल्य मिलता है 8388607
, सिद्धांत रूप में, जो आपके पास सबसे अधिक अनुमति है, लेकिन फिर एक भगोड़ा प्रक्रिया हजारों कनेक्शन खा सकती है, और आश्चर्य की बात है कि आपका डेटाबेस रीबूट होने तक अनुत्तरदायी है। यदि आपके पास 100 की तरह एक समझदार max_connections है। अपमानजनक कार्यक्रम एक नए कनेक्शन से इनकार किया जाएगा।