일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Java
- php
- 푸시 번역
- 웹사이트 성능
- gcm 푸시 번역
- Push
- nginx
- 페이스북 번역
- graphql
- 카프카
- 카프카 트랜잭션
- 푸시
- ddd
- nginx설정
- notification
- GCM
- Design Pattern
- 도메인 주도 개발
- git
- 자바스크립트
- APNS
- 웹사이트성능
- nginx설치
- 디자인패턴
- 웹사이트최적화기법
- kafka
- 성능
- JPA
- GCM 번역
- Today
- Total
간단한 개발관련 내용
[Spring] DBCP pool 관련 설정. 본문
Datasource의 pool 관련 기본적인 아래의 설정들을 하게 된 후 실제 서비스에 적용하게 되면 몰려드는 요청 및 처리 시간 때문에 예상치 못한 문제들을 확인하게 됩니다.
<기본설정 예제>
datasource.driverClassName=com.mysql.jdbc.Driver
datasource.url=
datasource.username=
datasource.password=
보통 요청에 대한 pool 을 관리하기 위해 개수를 조정하게 됩니다.
datasource.initialSize=4 # 커넥션 초기값
datasource.minIdle=4 # 유휴상태로 있을 수 있는 커넥션 최소값
datasource.maxActive=16 # 커넥션 최대값
datasource.maxIdle=16
이러고 나면, DB 와의 연결 관련 문제들이 발생하게 된다. Validation-Query 설정이나 autoReconnect=true (url의 param 값으로들 많이 붙임) 설정을 하게 된다. 하지만 실제 지속적으로 트래픽이 있는 실환경과 사용과 연결이 거의 없는 테스트 환경은 각기 다르니 유의하기를 바라고 autoReconnect 옵션은 false 해 두기를 바랍니다.(라고 어디서 봄)
datasource.validation-query=select 1 # DB마다 다름.
datasource.test-on-borrow=true # 커넥션 사용 시 validation 쿼리를 호출하여 커넥션을 확인하는 기능을 사용할지 말지 여부
datasource.test-while-idle=true
위와같이 했는데도 'Communications link failure' 같은 메시지를 확인하게 된다면, 사용하는 DB 의 timout 들을 확인하기 바란다.(주로 wait_timeout)
확인을 하고 evictor thread 설정을 해야 에러 메시지를 그만 보게 될 것입니다. DB wait_timeout 보다 당연히 짧아야 할 것 입니다.
datasource.timeBetweenEvictionrunsMillis=60000 # 1000이 1초, thread 실행주기
datasource.minEvictableIdleTimeMillis=60000
datasouce.numTestsPerEvictionRun=4 # thread 실행 시 처리될 커넥션 개수
※ Tip 자신의 서비스의 master / slave 마다 설정이 다를 수 있고 권한 때문에 DBA만 조회 가능한 환경이 있을 수 있으니 유의 바랍니다.
-- mysql 의 wait_timeout 확인 방법
SHOW GLOBAL VARIABLES LIKE '%timeout%';
-- mysql 에서 host 에서 접속한 연결 개수 확인 방법
SELECT *
FROM INFOMATION_SCHEMA.PROCESSLIST
WHERE host = '' #
AND db = ''
;
그 외에 일반적으로 같이 추가하는 설정들 입니다.
datasource.maxWait=5000 # 애플리케이션 레벨에서 DBCP pool의 커넥션을 획득하기 위해 기다리는 시간이니 주의하기 바람.
대략 이렇게 설정하고 서버의 하드웨어 및 서비스에 따라 적절히 값을 조정하면 될 것 같습니다.
※ 사용하는 dbcp1 / dbcp2 / tomcat-dbcp 에 따라 상이할 수 있으니 유의바랍니다.