Dopo aver riscontrato problemi di perdita di connessione e deadlock in DBCP, abbiamo deciso di sostituirlo con Tomcat JDBC-pool. Ovviamente la migrazione è stata davvero semplice.Aumentare il carico e ridurre le prestazioni sostituendo DBCP con Tomcat JDBC-pool
Ma dopo averlo distribuito in un ambiente di produzione ho notato che il caricamento su un server con due Tomcat in esecuzione aumenta da 4-4.5 a 5.5. Non abbiamo fatto nulla di più, tranne il cambio di piscina. Inoltre, le prestazioni misurate con JMeter diminuiscono di circa il 5%.
Ho trascorso un po 'di tempo per mettere a punto i parametri del pool, ma senza effetti visibili. Ho incollato il mio config corrente (da <GlobalNamingResources>
in server.xml
) qui di seguito:
<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"/>
FairQueue e PoolSweeperEnabled sono vere
Nella primavera applicationContext-jdbc.xml ho solo:
<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>
Che cosa sono io fare male? Ho pensato che JDBC_pool dovrebbe essere più veloce di DBCP fuori dalla scatola.
Provare testWhenIdle = "true", e anche provare a minimizzare il numero di maxActive da 100 a qualcosa come 20. Forse avere troppe connessioni nel pool sta rallentando le cose. –
Stai utilizzando la stessa query di validazione di prima? – rootkit
@ rootkit007 - no, con dbcp non ho usato la query di validazione ant. – Dzinek