9장. 데드된 연결 감지
경우에 따라 클라이언트가 예기치 않게 중지되고 리소스를 정리할 기회가 없습니다. 이 경우 리소스를 잘못된 상태로 두고 브로커가 메모리 부족 또는 기타 시스템 리소스가 부족해질 수 있습니다. 브로커는 클라이언트 연결이 가비지 컬렉션 시 제대로 종료되지 않았음을 감지합니다. 그런 다음 연결이 닫히고 아래 메시지와 유사한 메시지가 로그에 기록됩니다. 로그는 클라이언트 세션이 인스턴스화된 정확한 코드 행을 캡처합니다. 이를 통해 오류를 식별하고 수정할 수 있습니다.
[Finalizer] 20:14:43,244 WARNING [org.apache.activemq.artemis.core.client.impl.DelegatingSession] I'm closing a JMS Conection you left open. Please make sure you close all connections explicitly before let
ting them go out of scope!
[Finalizer] 20:14:43,244 WARNING [org.apache.activemq.artemis.core.client.impl.DelegatingSession] The session you didn't close was created here:
java.lang.Exception
at org.apache.activemq.artemis.core.client.impl.DelegatingSession.<init>(DelegatingSession.java:83)
at org.acme.yourproject.YourClass (YourClass.java:666) 1
- 1
- 연결이 인스턴스화된 클라이언트 코드의 줄입니다.
9.1. 연결 시간-To-Live
클라이언트와 서버 간의 네트워크 연결이 실패하고 온라인 상태가 되어 클라이언트가 다시 다시 연결할 수 있으므로 AMQ Broker는 비활성 서버 측 리소스를 정리할 때까지 기다립니다. 이 대기 기간을 TTL(Time-to-Live)이라고 합니다. 네트워크 기반 연결의 기본 TTL은 60000
밀리초(1분)입니다. in-VM 연결의 기본 TTL은 -1
이며, 이는 브로커가 브로커 측의 연결을 시간 초과하지 않음을 의미합니다.
브로커에서 Time-To-Live 구성
클라이언트가 자체 연결 TTL을 지정하지 않으려면 브로커 측에 글로벌 값을 설정할 수 있습니다. 이 작업은 브로커 구성에 connection-ttl-override
요소를 지정하여 수행할 수 있습니다.
TTL 위반의 연결을 확인하는 논리는 connection-ttl-check-interval
요소에 의해 결정된 브로커에서 주기적으로 실행됩니다.
프로세스
connection-ttl-override
구성 요소를 추가하고 아래 예제와 같이 time-to-live 값을 제공하여 <broker_instance_dir> /etc/broker.xml
을 편집합니다.<configuration> <core> ... <connection-ttl-override>30000</connection-ttl-override> 1 <connection-ttl-check-interval>1000</connection-ttl-check-interval> 2 ... </core> </configuration>