DBCPの接続リークとデッドロックの問題が発生した後、Tomcat JDBC-poolに置き換えることにしました。もちろん、移行は本当に簡単でした。DBCPをTomcat JDBC-poolに置き換えて負荷を増やしてパフォーマンスを落とすJDBC-pool
しかし、私が気づいた実稼働環境に展開した後、2台のTomcatを実行しているサーバーの負荷は4-4.5から5.5に増加します。私たちはプールの変更以外は何もしませんでした。さらに、JMeterで測定した性能は約5%低下します。
私はプールパラメータを調整するのに少し時間を費やしましたが、目に見える効果はありませんでした。 FairQueueとPoolSweeperEnabledは、私が唯一持っている春のApplicationContext-jdbc.xmlのでは
該当する
<Resource name="jdbc/xxxxxx"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
initialSize="10"
maxActive="100"
minIdle="10"
maxIdle="50"
maxWait="10000"
testOnBorrow="true"
testOnReturn="false"
testOnConnect="false"
testWhileIdle="false"
validationQuery="SELECT 1 from dual"
validationInterval="30000"
suspectTimeout="60"
timeBetweenEvictionRunsMillis="30000"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
abandonWhenPercentageFull="50"
minEvictableIdleTimeMillis="60000"
jmxEnabled="true"
username="xxxxx"
password="xxxxx"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:oci:xxxxx"/>
:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="resourceRef">
<value>true</value>
</property>
<property name="jndiName">
<value>java:comp/env/jdbc/PortalDB</value>
</property>
</bean>
私は何を下回る(server.xml
で<GlobalNamingResources>
から)私の現在の設定を貼り付け間違っている?私は、JDBC_poolはDBCPよりも速くなければならないと考えました。
testWhenIdle = "true"を試してみて、maxActiveの数を100から最小限に減らしてみてください。プール内の接続が多すぎると処理が遅くなる可能性があります。 –
以前と同じ検証クエリを使用していますか? – rootkit
@ rootkit007 - いいえ、dbcpで私はantの検証クエリを使用しませんでした。 – Dzinek