我使用Hibernate和c3p0作爲池化提供者。我已將其最大尺寸設置爲50。現在,我使用1000個併發線程連續訪問數據庫並使用max_connections作爲2000來執行我的應用程序的負載測試。我從應用程序獲得正確的響應,但有時我面臨套接字異常錯誤。如果池大小小於併發連接,Hibernate池如何工作?
所以,首先是如果我的池大小隻有50,如何通過休眠來管理1000個連接?這是否意味着從池中取出50個連接,並創建其他連接?另外,爲什麼我必須獲得套接字異常像連接重置異常?
我使用Hibernate和c3p0作爲池化提供者。我已將其最大尺寸設置爲50。現在,我使用1000個併發線程連續訪問數據庫並使用max_connections作爲2000來執行我的應用程序的負載測試。我從應用程序獲得正確的響應,但有時我面臨套接字異常錯誤。如果池大小小於併發連接,Hibernate池如何工作?
所以,首先是如果我的池大小隻有50,如何通過休眠來管理1000個連接?這是否意味着從池中取出50個連接,並創建其他連接?另外,爲什麼我必須獲得套接字異常像連接重置異常?
如果你設置正確,並且c3p0的maxPoolSize是50,那麼如果1000個客戶端碰到這個池,50個最初將獲得Connections,其餘的將暫時等待(),直到第一個隊列返回連接。池的工作與應儘可能簡短地保持連接的應用程序協作,以確保有效地共享有限數量的連接。
,如果你看到偶爾連接復位/插座外,你可能應該配置一些連接測試:
http://www.mchange.com/projects/c3p0/index.html#configuring_connection_testing
最新的預發佈版本大約有連接測試一些更直接的建議;你可以從這裏下載或閱讀html源碼:
https://github.com/swaldman/c3p0/blob/master/src/doc/index.html#L1071
謝謝你的回覆。我之前看到過這個鏈接,但我無法弄清楚避免套接字異常的設置。當線程數爲100時我沒有任何異常,但是當我將它設置爲1000時,我開始收到異常。正如我讀過的,插座異常是由於網絡問題引起的。這是否意味着對於單個處理器,難以管理1000個併發連續連接?可能是 –
,可能不會。如果你發佈你的配置,我會評論連接測試。 –