Camunda의 데이터베이스가 연결되지 않는 문제에 대한 해결책

최근 운영자 프로젝트는 Camunda의 워크플로우 엔진을 사용하여 작업을 정렬하고 실행합니다.과거 기간 동안 800개 이상의 네트워크 요소에 대한 성능 지표를 얻기 위해 작업을 15분마다 실행하고 미리 정의된 규칙의 지표 판단 규칙에 따라 작업을 실행합니다. 테이블은 네트워크 요소에 알람이 있는지 여부를 식별하는 데 사용됩니다.각 작업의 실행 시간은 비교적 길며 완료하는 데 약 6~7분이 소요됩니다. 또한 이 워크플로 엔진에는 불규칙적으로 실행되는 다른 많은 작업이 있으며 전체 엔진의 부하가 상대적으로 높습니다. 그러다가 최근에 Camunda API에 접근할 수 없는 문제가 자주 발생했는데, 오류 메시지는 HTTP 500 Error이고 오류 메시지는 "Could not open JPA EntityManager for transaction; nested exception is org. hibernate.exception.JDBCConnectionException: JDBC 연결을 획득할 수 없음", 유형: "CannotCreateTransactionException"

스프링부트 연동으로 카문다를 구동하기 때문에 이 에러 메시지를 보고 데이터베이스 커넥션 풀이 부족해서 그런 건 아닐까 하는 생각이 들었습니다. 저도 인터넷에서 찾아보니 springboot 2.x 버전이 HikariCP를 상속받아 JDBC 커넥션 서비스를 제공하는 것을 봤습니다.기본 커넥션 풀 사이즈는 10입니다. Camunda에서 액세스하는 백엔드 데이터베이스는 mysql이므로 mysql에도 로그인하고 다음 명령을 사용하여 현재 총 연결 수와 사용 중인 연결 수를 확인합니다.

select count(host) from information_schema.processlist where host like '123.123.123.123%';
select count(host) from information_schema.processlist where host like '123.123.123.123%' and command not like 'Sleep';

이 구문에서 123.123.123.123은 camunda 서버의 주소를 나타내며 명령이 sleep이 아닌 경우 연결이 휴지 상태가 아니라 활성 연결임을 의미합니다.

위의 명령 결과에서 알 수 있듯이 camunda는 현재 크기가 10인 연결 풀만 생성합니다. 예약된 작업은 더 복잡하고 오랜 시간 동안 실행되기 때문에 항상 여러 연결을 점유하고 시간 내에 해제되지 않으며 다른 작업이 실행될 때 일부 연결이 소모되므로 위의 오류가 수시로 나타납니다.

문제의 원인을 찾은 후 해결책은 매우 간단합니다 camunda의 springboot 프로젝트에서 application.properties 파일에 datasource.hikari.maximum-pool-size=100 구성을 추가하여 해결합니다.

운영 및 유지보수 담당자에게 이 솔루션에 대해 설명하고 구성을 수정하도록 요청했지만 실수로 datasource.max-active를 수정하는 것으로 생각하여 문제가 해결되지 않은 작은 에피소드입니다. , 그리고 분석에 많은 시간을 할애했는데, 앞으로 구성 수정이 계획대로 진행되는지 확인이 필요할 것 같습니다.

추천

출처blog.csdn.net/gzroy/article/details/128133226