MySQL 연결 풀 초과 문제 해결 방법

에러 메시지 확인

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1040)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2194)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2225)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor4.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:39)
    at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:256)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
    at org.apache.commons.pool2.impl.GenericObjectPool.addObject(GenericObjectPool.java:961)
    at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2081)
    ... 21 more

발생 원인

MySQL 서버에 설정된 최대 연결 수(max_connections)를 초과하여 새로운 연결이 거부되었습니다. 기본값은 보통 100이며, 분산 스트리밍 처리 시스템이나 동시 접속이 많은 환경에서는 이 값이 부족할 수 있습니다.

해결 방법

MySQL 설정 파일(/etc/my.cnf)을 편집하여 max_connections 값을 적절히 증가시킵니다. 아래 예시에서는 2000으로 설정하였습니다.

# 설정 파일 열기
sudo vi /etc/my.cnf

# [mysqld] 섹션에 다음 줄 추가 또는 수정
[mysqld]
max_connections = 2000

설정을 변경한 후에는 MySQL 서비스를 재시작해야 적용됩니다.

sudo systemctl restart mysql

또는 MySQL 버전에 따라 다음 명령어를 사용할 수도 있습니다.

sudo service mysql restart

태그: MySQL Too many connections 연결 풀 max_connections 서버 설정

6월 6일 18:38에 게시됨