2011-11-16 60 views
7

我目前有一個使用Tomcat部署的應用程序,它通過JDBC與Postgres數據庫交互。查詢是非常昂貴的,所以我看到的是由Tomcat或Apache導致的超時(Apache在我的配置中位於Tomcat的前面)。我試圖限制到數據庫的連接到20-30個同時連接,這樣數據庫不會被壓垮。我已經使用\ ..配置完成了這項工作,將maxActive設置爲30,將maxIdle設置爲20.我也碰到了maxWait。Tomcat - 在Http連接器中配置maxThreads和acceptCount

在這種情況下,我限制了數據庫的使用,但是我希望連接/請求在Tomcat中處於POOLED狀態。 Apache可以接受250個同時請求。所以我需要確保Tomcat也能接受這麼多,但是要適當地處理它們。

Tomcat有在HTTP連接器配置文件兩種設置:

  • maxThreads - 「由HTTP連接器,其中由此確定的同時最大數來創建的請求處理線程最大數可以處理的請求。「
  • acceptCount - 「當所有可能的請求處理線程正在使用時,傳入連接請求的最大隊列長度,隊列滿時收到的任何請求都將被拒絕。

所以我猜,如果我設置maxThreads到JDBC連接的最大數目(30),那麼我可以設置acceptCount以250-30 = 220。

我不太明白在JDBC連接上等待從池中打開的線程與排隊的線程之間的區別......我的想法是,排隊的線程消耗較少的週期,而等待JDBC池的正在運行的線程將花費週期檢查游泳池的免費線程......?

+0

我試圖衡量其他人使用不同比率的線程的經驗:連接。你有你的調整生產值,你是否保持最大tomcat線程與jdbc連接的比率爲250:30,如果是這樣,你的工作是如何進行的? – ledlogic

回答

0

除非你的應用程序處理在其直接連接到數據庫的每個HTTP連接的基礎上的事情要求,那麼你應根據您的數據庫軟件設置/可以處理的數量以及您的應用程序/硬件可以處理的最大線程來配置您的JDBC連接池。

0

保持maxActive值(db連接池)小於maxThreads(即併發線程數)在大多數情況下是合理的。您可以將acceptCount設置爲較高的值,具體取決於您在網站上期待的流量以及可以處理多快的請求。

相關問題