DB 커넥션 풀에 유효성 검사 추가 (validationQuery)
All checks were successful
deploy-wise / deploy (push) Successful in 1m6s
All checks were successful
deploy-wise / deploy (push) Successful in 1m6s
DBCP 는 validationQuery 가 없으면 testWhileIdle 을 켜도 아무 검사도 하지 않는다. 종전에는 validationQuery 가 주석 처리돼 있고 검사 주기가 10000000ms(약 2.8시간) 이라 사실상 무검사였다. MySQL·MariaDB 의 wait_timeout 은 기본 8시간이므로 야간처럼 오래 논 뒤 첫 요청이 서버가 이미 끊은 커넥션을 받아 실패한다. 실제 발생: 2026-08-26 AccessLogDownloadJobWorker unexpected end of stream, read 0 bytes (socket was closed by server) - validationQuery = SELECT 1 (종전 주석의 'select 1 from dual' 은 Oracle 표기) - validationQueryTimeout 3초, testOnBorrow 켬 - 유휴 검사 주기 2.8시간 → 5분, 유휴 정리 기준 30분 commons-dbcp 1.3 의 BasicDataSource 에 네 setter 가 모두 존재함을 jar 로 확인했다 (없는 프로퍼티를 넣으면 컴파일은 통과하고 WAS 기동 때만 터진다). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
7f3c86c588
commit
db1999175a
@ -19,9 +19,25 @@
|
||||
<property name="url" value="${Globals.Url}" />
|
||||
<property name="username" value="${Globals.UserName}"/>
|
||||
<property name="password" value="${Globals.Password}"/>
|
||||
<!-- <property name="validationQuery" value="select 1 from dual" />-->
|
||||
<!-- 커넥션 유효성 검사 (2026-08-26 추가)
|
||||
DBCP 는 validationQuery 가 없으면 testWhileIdle/testOnBorrow 를 켜도 아무 검사도
|
||||
하지 않는다. 종전에는 이 줄이 주석 처리돼 있고 검사 주기가 10000000ms(약 2.8시간)
|
||||
이라 사실상 무검사였다. MySQL·MariaDB 의 wait_timeout 은 기본 28800초(8시간)이므로
|
||||
야간처럼 오래 논 뒤 첫 요청이 들어오면 서버가 이미 끊은 커넥션을 그대로 받아
|
||||
"unexpected end of stream ... (socket was closed by server)" 로 실패한다
|
||||
(2026-08-26 AccessLogDownloadJobWorker 에서 실제 발생).
|
||||
종전 주석의 'select 1 from dual' 은 Oracle 표기다. 'SELECT 1' 은 MySQL·MariaDB
|
||||
양쪽에서 동작한다. commons-dbcp 1.3 에 아래 네 setter 가 모두 존재함을 확인했다. -->
|
||||
<property name="validationQuery" value="SELECT 1" />
|
||||
<!-- 검사 자체가 매달리는 것을 막는다 -->
|
||||
<property name="validationQueryTimeout" value="3" />
|
||||
<!-- 빌려줄 때 검사한다. 같은 호스트/도커 네트워크의 SELECT 1 은 1ms 미만이라
|
||||
죽은 커넥션을 그대로 넘기는 위험에 비해 대가가 싸다. -->
|
||||
<property name="testOnBorrow" value="true" />
|
||||
<property name="testWhileIdle" value="true" />
|
||||
<property name="timeBetweenEvictionRunsMillis" value="10000000" />
|
||||
<!-- 5분마다 유휴 커넥션을 돌며 30분 넘게 논 것을 정리한다(종전 2.8시간은 너무 성겼다) -->
|
||||
<property name="timeBetweenEvictionRunsMillis" value="300000" />
|
||||
<property name="minEvictableIdleTimeMillis" value="1800000" />
|
||||
</bean>
|
||||
|
||||
<!-- Oracle -->
|
||||
|
||||
Loading…
Reference in New Issue
Block a user