性能較好的Tomcat 配置文件內容
<Context> <Resource name="jdbc/pgsql" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://10.14.196.190:5432/foo" username="sdbadmin" password="sdbadmin" factory="org.apache.tomcat.jdbc.pool..DataSourceFactory" maxActive="600" maxIdle="600" minIdle="600" initialSize="400" timeBetweenEvictionRunsMillis="30000" minEvictableIdleTimeMillis="1800000" removeAbandoned="true" removeAbandonedTimeout="180" testOnBorrow="true" maxWait="300000" logAbandoned="true" testOnReturn="false" validationQuery="SELECT 1" /> <ResourceLink global="jdbc/pgsql" name="jdbc/pgsqlDB" type="javax.sql.DataSource" /> </Context>
Resource 重要參數說明:
factory 使用哪種連接池的庫
maxActive 連接池的最大連接上限
maxIdle 最大空閑連接數,空閑的連接如果超過 minEvictableIdleTimeMillis 參數設置的值,空閑連接將被釋放
minIdle 最小空閑連接數
initialSize 初始化連接數
timeBetweenEvictionRunsMillis 多長時間去檢查一次連接池的空閑連接,並且發現空閑連接的空閑時間超過了 minEvictableIdleTimeMillis 設置時間后,直接將空閑連接斷開,直到空閑連接數為 minIdle 數為止
minEvictableIdleTimeMillis 這個參數要和 timeBetweenEvictionRunsMillis 參數混合使用
removeAbandoned 是否清理超過 removeAbandonedTimeout 設置時間的活動連接
removeAbandonedTimeout 活動連接的最大空閑時間
testOnBorrow 從連接池中借出連接前,是否對該連接進行正確性校驗,連接正常才會出池,如果連接已經失效,將會把失效連接清除,並且重新申請新的連接。該參數可以保證成功借出的連接都是處於活動狀態。該參數必須要和 validationQuery 參數配合使用,如果 validationQuery 參數為空字符串,該參數將不生效。
maxWait 連接池用完后,申請新連接的等待時間
logAbandoned 連接池回收空閑的活動連接時是否打印日志
testOnReturn 將連接返回連接池時,是否對該連接進行正確性校驗,如果連接失效,將清除該連接,如果連接正常,則回池。該參數必須和 validationQuery 參數配合使用。默認值為 false
validationQuery 探測連接健壯性的模板SQL
老的tomcat 連接池的配置,性能不好
<Context> <Resource name="jdbc/pgsql" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://10.14.196.190:5432/foo" username="sdbadmin" password="sdbadmin" factory="org.apache.tomcat.jdbc.pool..DataSourceFactory" maxActive="1000" maxIdle="-1" minIdle="600" initialSize="500" timeBetweenEvictionRunsMillis="0" removeAbandoned="true" removeAbandonedTimeout="1000" /> <ResourceLink global="jdbc/pgsql" name="jdbc/pgsqlDB" type="javax.sql.DataSource" /> </Context>
該配置的問題
maxIdle 設置-1 是錯誤,tomcat 會報告該參數大於maxActive ,然后設置為與 maxActive 相同的值
timeBetweenEvictionRunsMillis 由於沒有設置 validationQuery 參數,所以不生效
removeAbandoned 由於沒有設置 validationQuery 參數,所以不生效
removeAbandonedTimeout 由於沒有設置 validationQuery 參數,所以不生效