2014-11-03 78 views
4

我試圖瞭解最大開放會話和sessiion打開和關閉行爲。我遇到了這個,它不能完全理解。模擬「PSQLException:致命:抱歉,已經有太多客戶」

我想在我的代碼中模擬「PSQLException: FATAL: sorry, too many clients already」。 我已經設置MAX_CONNECTIONS分至10

,並試圖將此代碼:

Session session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 
     session = HibernateUtil.getSessionFactory().openSession(); 

我在這裏期待誤差在11日打電話,我不明白。當我運行sql命令SELECT datname, numbackends FROM pg_stat_database where datname = 'XXX';我相信會顯示公開會話計數,我看它被限制在10.

請解釋行爲。

+1

您可以使用類似Mockito的東西來模擬會話工廠,並在調用openSession時讓模擬拋出PSQLException。 – 2014-11-03 10:29:05

+0

嘗試'設置max_connections = 100' – 2014-11-03 10:51:18

+0

upvoted你想壓力測試你的應用程序。 – grasshopper 2014-11-03 14:01:37

回答

1

有很多事情可能發生(有利於#2): 1)在更改最大連接數時,您沒有正確重啓postgresql服務器。因此,重新啓動服務器或參見here 2)Hibernate可能使用JDBC的會話池系統,並且您正在重複設置相同的會話變量。也許之前的公開會話是垃圾回收,並且池可以爲最新會話騰出空間。我會嘗試創建一個連接對象數組,並且還會看到當您嘗試使用打開的會話進行一些工作時會發生什麼。

相關問題