현재 커넥션 수 확인하기

DB 커넥션 수가 제대로 동작하는지 확인하고 싶은 경우가 있다면 HikariDataSourcePoolMetadata클래스를 이용해서 현재 사용 중인 커넥션 수를 확인할 수 있습니다.

30개의 스레드로 트랜잭션을 설정한 후 랜덤하게 지연시켜서 DB 커넥션 수 변화를 살펴보겠습니다.

@Test
void test() {
    // 스레드 30개 생성
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(30);
    executor.initialize();

    // 트랝잭션 사용을 위한 정의
    TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
    transactionTemplate.setReadOnly(true);

    HikariDataSourcePoolMetadata metadata = new HikariDataSourcePoolMetadata(((HikariDataSource) dataSource));

    List<CompletableFuture<Void>> futureList = IntStream.rangeClosed(0, 99)
            .mapToObj(i -> CompletableFuture.runAsync(() -> {
                log.info("현재 커넥션 수: {}", metadata.getActive());
                transactionTemplate.executeWithoutResult(status -> {
                    try {
                        // 랜덤하기 시간 지연 시키기
                        TimeUnit.MILLISECONDS.sleep((int) (Math.random() * 200));
                    } catch (InterruptedException ignored) {
                    }
                });
            }, executor))
            .collect(toList());

    futureList.forEach(CompletableFuture::join);
}

실행 결과를 보면 커넥션 수가 계속해서 변경되는 것을 볼 수 있습니다.

현재 커넥션 수: 1
현재 커넥션 수: 6
현재 커넥션 수: 5
...
현재 커넥션 수: 7
현재 커넥션 수: 9
...
현재 커넥션 수: 7
현재 커넥션 수: 12

TransactionTemplate에 대해서는 여기, ThreadPoolTaskExecutor는 여기 에서 확인할 수 있습니다.

이렇게 코드로 확인하는 방법이 마음에 들지 않는다면 lsof를 이용해서 DB로 연결된 포트 수 통해서 확인할 수도 있습니다.

> lsof -nP -i :43306 -sTCP:ESTABLISHED | grep java
java      58180 user  125u  IPv6 0xa8f784f29222eae7      0t0  TCP 127.0.0.1:57804->127.0.0.1:43306 (ESTABLISHED)
java      58180 user  126u  IPv6 0xa8f784f292819407      0t0  TCP 127.0.0.1:57809->127.0.0.1:43306 (ESTABLISHED)
java      58180 user  127u  IPv6 0xa8f784f29281c427      0t0  TCP 127.0.0.1:57810->127.0.0.1:43306 (ESTABLISHED)
java      58180 user  128u  IPv6 0xa8f784f293432ae7      0t0  TCP 127.0.0.1:57811->127.0.0.1:43306 (ESTABLISHED)
java      58180 user  129u  IPv6 0xa8f784f283cd9f67      0t0  TCP 127.0.0.1:57812->127.0.0.1:43306 (ESTABLISHED)
java      58180 user  130u  IPv6 0xa8f784f2991e7ae7      0t0  TCP 127.0.0.1:57817->127.0.0.1:43306 (ESTABLISHED)

반복적으로 lsof를 실행해서 DB 커넥션 카운트를 확인할 수도 있습니다.

while :; do lsof -nP -i :43306 -sTCP:ESTABLISHED | grep java | wc -l; sleep 1; done

끝.

태그:

카테고리:

업데이트:

댓글남기기