9장. Dead Connections 탐지
경우에 따라 클라이언트는 예기치 않게 중지되고 리소스를 정리할 수 없습니다. 이 경우 리소스를 결함이 있는 상태로 유지하면 브로커가 메모리 또는 기타 시스템 리소스가 부족해질 수 있습니다. 브로커는 클라이언트의 연결이 가비지 수집 시 제대로 종료되지 않았음을 감지합니다. 그런 다음 연결이 닫히고 아래 것과 유사한 메시지가 로그에 기록됩니다. 로그는 클라이언트 세션이 인스턴스화된 정확한 코드 행을 캡처합니다.The log captures the exact line of code where the client session was instantiated. 이를 통해 오류를 식별하고 수정할 수 있습니다.
[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. 연결 시간-투-Live
클라이언트와 서버 간의 네트워크 연결이 실패하고 다시 온라인 상태가 되므로 클라이언트가 다시 연결할 수 있으므로 AMQ Broker는 비활성 서버 쪽 리소스를 정리하도록 기다립니다. 이 대기 기간을 TTL(Time-to-Live)이라고 합니다. 네트워크 기반 연결의 기본 TTL은 60000
밀리초(1분)입니다. VM 내 연결의 기본 TTL은 -1
이며, 이는 브로커가 브로커 측의 연결을 초과하지 않음을 의미합니다.
브로커에서 Time-To-Live 구성
클라이언트가 자체 연결 TTL을 지정하지 않으려면 브로커 측에서 글로벌 값을 설정할 수 있습니다. 브로커 구성에서 connection-ttl-override
요소를 지정하여 이 작업을 수행할 수 있습니다.
TTL 위반에 대한 연결을 확인하는 논리는 connection-ttl-check-interval
요소에 의해 결정된 대로 브로커에서 정기적으로 실행됩니다.
절차
다음 예제와 같이
connection-ttl-override
구성 요소를 추가하고 TTL 값을 제공하여 <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>