Aşağıdaki hatanın açıklaması:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.
Özet:
Veritabanına izin verilen bağlantı sınırından daha fazlasını açtınız. Bunun gibi bir şey koştunuz: Connection conn = myconn.Open();bir döngünün içinde ve koşmayı unuttunuz conn.close();. Sırf sınıfınızın yok edilmesi ve çöplerin toplanması, veritabanına olan bağlantıyı serbest bırakmaz. Bunun en hızlı çözümü, bağlantı oluşturan sınıf ne olursa olsun aşağıdaki koda sahip olduğunuzdan emin olmaktır:
protected void finalize() throws Throwable
{
try { your_connection.close(); }
catch (SQLException e) {
e.printStackTrace();
}
super.finalize();
}
Bu kodu, Bağlantı oluşturduğunuz herhangi bir sınıfa yerleştirin. Daha sonra sınıfınız çöp toplandığında bağlantınız kesilecektir.
İzin verilen postgresql maks. Bağlantılarını görmek için bu SQL'i çalıştırın:
show max_connections;
Varsayılan değer 100'dür. İyi bir donanımda PostgreSQL bir seferde birkaç yüz bağlantıyı destekleyebilir. Binlerce kişiye sahip olmak istiyorsanız, bağlantı yükünü azaltmak için bağlantı havuzu yazılımını kullanmayı düşünmelisiniz.
Bağlantılarınızı tam olarak kimin / ne / ne zaman / nerede açık tuttuğuna bir göz atın:
SELECT * FROM pg_stat_activity;
Şu anda kullanılan bağlantı sayısı:
SELECT COUNT(*) from pg_stat_activity;
Hata ayıklama stratejisi
Hangisi olduğunu bulmak için bağlantıları serbest bırakmayan programlara farklı kullanıcı adları / şifreler verebilir ve ardından hangisinin kendisinden sonra temizlenmediğini bulmak için pg_stat_activity'ye bakabilirsiniz.
Bağlantılar oluşturulamadığında tam bir istisna yığını izleme yapın ve yeni bir kod oluşturduğunuz yere kadar kodu takip edin, bağlantı oluşturduğunuz Connectionher kod satırının birconnection.close();
Max_connections nasıl daha yükseğe ayarlanır:
postgresql.conf dosyasındaki max_connections, veritabanı sunucusuna maksimum eşzamanlı bağlantı sayısını belirler.
- Önce postgresql.conf dosyanızı bulun
- Nerede olduğunu bilmiyorsanız, veritabanını sql ile sorgulayın:
SHOW config_file;
- Benimki:
/var/lib/pgsql/data/postgresql.conf
- Kök olarak oturum açın ve bu dosyayı düzenleyin.
- "Max_connections" dizesini arayın.
- Yazan bir satır göreceksiniz
max_connections=100.
- Bu sayıyı büyütün, postgresql sürümünüzün sınırını kontrol edin.
- Değişikliklerin etkili olması için postgresql veritabanını yeniden başlatın.
Maksimum bağlantı sayısı nedir?
Bu sorguyu kullanın:
select min_val, max_val from pg_settings where name='max_connections';
Değeri anlıyorum 8388607, teoride sahip olmanıza izin verilen en fazla şey bu, ancak daha sonra kaçak bir süreç binlerce bağlantıyı tüketebilir ve şaşırtıcı, veritabanınız yeniden başlatılıncaya kadar yanıt vermiyor. Eğer 100 gibi mantıklı bir max_connections'ınız olsaydı. Sorun yaratan programın yeni bir bağlantısı reddedilirdi.