Connection is closed, Lock wait timeout exceeded 에러건입니다.
- 작성자 :
- 김*정
- 작성일 :
- 2022-12-02 07:29:11
- 조회수 :
- 699
- 구분 :
- 개발환경 / 3.10
- 진행상태 :
- 완료
Q
교육 및 상담 신청 받는 사이트입니다. 평소에 수시로 아래 2가지 정도의 error가 반복적으로 나오면서 서비스가 멈추는 현상이 나타나고 있습니다.
어제도 서비스가 안되서 디비 프로세스 확인하니 81개 중 10개 이상이 락이 걸려있었어 톰캣, 디비 재구동 했고 10분 후에는 프로세스가 10개 정도 밖에 안되는데 Connection is closed로 서비스가 또 안되고 있었어요.
경험이 많지 않아서 이런 저런 설정을 잘못 이해하고 있는 것 같습니다.
아래는 로그와 설정 부분인데 보시고 어느 부분을 더 확인해야 하고 변경해야 하는지 조언 부탁 드립니다.
에러 1 ) Error updating database. Cause: java.sql.SQLNonTransientConnectionException: (conn=323) Connection is closed ~
에러 2 ) Cause: java.sql.SQLException: (conn=326) Lock wait timeout exceeded; try restarting transaction
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1205]; (conn=326) Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.SQLException: (conn=326) Lock wait timeout exceeded; try restarting transaction ~
mariadb my.cnf
[mysqld]
max_connections = 200
wait_timeout = 200
pom.xml
~<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.4.0</version>
</dependency>
~<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.0.7</version>
</dependency>
context-datasource.xml
<!-- MariaDB -->
<beans profile="maria">
<bean id="dataSource-maria" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
~
<property name="maxTotal" value="200"/>
<property name="maxIdle" value="100"/>
<property name="minIdle" value="10"/>
<property name="initialSize" value="10"/>
<property name="maxWaitMillis" value="5000"/>
<property name="validationQuery" value="SELECT 1"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
</bean>
</beans>
어제도 서비스가 안되서 디비 프로세스 확인하니 81개 중 10개 이상이 락이 걸려있었어 톰캣, 디비 재구동 했고 10분 후에는 프로세스가 10개 정도 밖에 안되는데 Connection is closed로 서비스가 또 안되고 있었어요.
경험이 많지 않아서 이런 저런 설정을 잘못 이해하고 있는 것 같습니다.
아래는 로그와 설정 부분인데 보시고 어느 부분을 더 확인해야 하고 변경해야 하는지 조언 부탁 드립니다.
에러 1 ) Error updating database. Cause: java.sql.SQLNonTransientConnectionException: (conn=323) Connection is closed ~
에러 2 ) Cause: java.sql.SQLException: (conn=326) Lock wait timeout exceeded; try restarting transaction
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1205]; (conn=326) Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.SQLException: (conn=326) Lock wait timeout exceeded; try restarting transaction ~
mariadb my.cnf
[mysqld]
max_connections = 200
wait_timeout = 200
pom.xml
~<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.4.0</version>
</dependency>
~<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.0.7</version>
</dependency>
context-datasource.xml
<!-- MariaDB -->
<beans profile="maria">
<bean id="dataSource-maria" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
~
<property name="maxTotal" value="200"/>
<property name="maxIdle" value="100"/>
<property name="minIdle" value="10"/>
<property name="initialSize" value="10"/>
<property name="maxWaitMillis" value="5000"/>
<property name="validationQuery" value="SELECT 1"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
</bean>
</beans>
환경정보
-
- OS 정보 : CentOS Linux release 7.9.209
- 표준프레임워크 버전 : 3.10
- JDK(JRE) 정보 : 1.8
- WAS 정보 : Tomcat 9.0
- DB 정보 : Mariadb 10.6.5
- 기타 환경 정보 : CPU : 4Core / RAM : 4G / SSD : 200G
첨부파일
A
안녕하세요.
표준프레임워크센터입니다.
데이터베이스 커넥션이 끊어지는 이유는
서비스의 상태에 따라 여러가지가 있을 수 있으므로
정확한 답변을 드리기 어렵습니다.
우선, 커넥션이 종료되지 않고 있는 로직이 있는지 확인하고
수행중인 쿼리 중 수행시간이 오래걸리는게 있으면
해당 쿼리를 튜닝하거나 타임아웃 시간을 변경하여 보시기 바랍니다.
감사합니다.
표준프레임워크센터입니다.
데이터베이스 커넥션이 끊어지는 이유는
서비스의 상태에 따라 여러가지가 있을 수 있으므로
정확한 답변을 드리기 어렵습니다.
우선, 커넥션이 종료되지 않고 있는 로직이 있는지 확인하고
수행중인 쿼리 중 수행시간이 오래걸리는게 있으면
해당 쿼리를 튜닝하거나 타임아웃 시간을 변경하여 보시기 바랍니다.
감사합니다.