DBCP에서 연결 누수 및 교착 상태가 발생하여 Tomcat JDBC-pool로 대체하기로 결정했습니다. 물론 마이그레이션은 정말 간단했습니다.DBCP를 Tomcat JDBC-pool으로 바꾸는 동안로드가 증가하고 성능이 저하됩니다. JDBC-pool
그러나 프로덕션 환경에서 배포 한 후에는 두 Tomcat이 실행되는 서버의로드가 4-4.5에서 5.5로 증가합니다. 우리는 수영장 변경을 제외하고는 더 이상 아무것도하지 않았습니다. 또한 JMeter로 측정 한 성능은 약 5 % 감소합니다.
풀 매개 변수를 조정하는 데 시간을 할애했지만 눈에 띄는 효과는 없었습니다.
<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 및 PoolSweeperEnabled 봄의 ApplicationContext-jdbc.xml에서
해당 난 단지가 :
<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에서 20으로 최소화하려고 시도하십시오. 풀에 연결 수가 너무 많아서 작업 속도가 느려질 수 있습니다. –
이전과 같은 유효성 검사 쿼리를 사용하고 있습니까? – rootkit
@ rootkit007 - 아니요, dbcp로 개미 확인 쿼리를 사용하지 않았습니다. – Dzinek