New Relic Java 에이전트에는 과도한 계측의 영향으로부터 애플리케이션을 보호하는 회로 차단기가 포함되어 있습니다. 회로 차단기가 메모리 고갈의 초기 증상을 감지하면 자동으로 "트립"하고 계측을 제한합니다. 재설정이 안전하다고 판단한 후 회로 차단기가 자동으로 재설정될 때까지 에이전트는 트랜잭션 데이터 수집을 중지합니다.
회로 차단기는 트립해야 하는 시기를 결정하기 위해 두 가지 매개변수( 힙 사용량 및 가비지 수집에 소요된 시간 )를 고려합니다. 이러한 임계값의 기본값은 백분율입니다.
메모리 임계값: 20%
가비지 컬렉션 CPU 임계값: 10%
사용 가능한 힙 메모리의 비율이 memory_threshold 보다 작고 가비지 수집을 수행하는 데 소요된 CPU 시간이 gc_cpu_threshold 보다 크면 회로 차단기가 작동합니다. 회로 차단기가 작동하면 에이전트는 트랜잭션 데이터 수집을 중지합니다. UI 에 보고된 처리량은 적게 보고되며 일정 기간 동안 프로세서 트레이스가 표시되지 않습니다.
기억력 소진의 원인
회로 차단기는 메모리 고갈의 징후를 감지하면 트립됩니다. 이것은 여러 가지 이유로 발생할 수 있습니다.
최근에 배포된 사용자 지정 계측(XML, API 호출, 추적 주석 또는 Java 에이전트의 사용자 지정 계측 편집기 사용 ) 또는 기본 제공 계측으로 인해 애플리케이션에 메모리 고갈의 초기 징후가 표시됩니다.
애플리케이션에 로드 스파이크가 발생했으며 메모리 고갈 징후가 나타났습니다. 이 경우 에이전트는 스파이크에 기여하지 않지만 회로 차단기는 리소스를 절약하고 에이전트가 OutOfMemoryErrors 에 기여하지 않도록 할 수 있습니다.
애플리케이션은 메모리 제한에 가깝게 실행되도록 조정됩니다.
문제점 해결
회로 차단기가 트립되면 다음 문제 해결 팁을 시도하십시오.
과도하게 계측되었을 수 있는 메서드를 찾으려면 회로 차단기 Events 페이지의 Top methods by call count 테이블을 사용하세요. 사용자 정의를 식별하고 비활성화합니다.
일반적으로 에이전트 메모리 사용량은 메서드의 호출 횟수에 비례합니다. 사용자 지정 계측은 트랜잭션당 10번 이하로 호출되는 메서드에 사용해야 합니다. 계측이 에이전트에 내장된 경우 New Relic의 Java용 사용자 지정 계측 문서를 검토하십시오. 추가 도움이 필요하면 support.newrelic.com 에서 지원을 받으십시오.
애플리케이션의 메모리 사용 기록을 주의 깊게 검토하고 최대 Java 힙 크기를 늘려야 하는지 여부를 결정하십시오.
애플리케이션이 예상대로 작동하는 경우 회로 차단기를 비활성화할 수 있습니다. 회로 차단기를 비활성화하려면 newrelic.yml 구성 파일의 circuitbreaker 섹션 아래에 enabled: false 추가하세요.
common:&default_settings
circuitbreaker:
enabled:false
메모리 고갈의 조기 징후를 감지하기 위해 회로 차단기는 memory_threshold 및 gc_cpu_threshold 의 두 변수가 있는 공식을 사용합니다. 여유 힙 메모리의 백분율이 memory_threshold 미만이고 가비지 수집에 소요된 CPU 시간이 gc_cpu_threshold 보다 크면 회로 차단기가 작동합니다. 애플리케이션의 작동 성능 및 동작에 따라 필요에 따라 이러한 값을 조정합니다.
구성 세부정보는 memory_threshold 및 gc_cpu_threshold 을(를) 참조하세요.