2

Metrics을 사용하여 jetty 8 서버에서 healthcheck 서블릿을 구현했습니다. Load Balancer에서 폴링되는 것 외에 메트릭은 정기적으로 (5 분) 로그 파일에 기록됩니다. 또한 CPU로드 또는 메모리 소비와 같은 일부 측정 항목이 중요한 제한에 도달하면 전자 메일 알림이 전송됩니다.Java 메모리 사용이 양호한 웹 응용 프로그램 Healthcheck 메트릭입니까?

이것은 CPU 메모리가 시스템 메모리를 소비하는 데 적합합니다. 그러나 서버가 안정적으로 실행되고 있지만 JVM 메모리 소비를 측정하기 위해 정의 된 메트릭 중 하나는 정의 된 임계 값 인 95 %를 정기적으로 초과합니다. 따라서 우리는이 특정 척도에 대한 우리의 결정을 재고해야 할 것입니다. 건강 검진에서 사용하는 것이 좋은 척도입니까? 가비지 컬렉터가 실행될 때까지 웹 응용 프로그램이 정기적으로 임계 값에 도달하거나 장기간 실행되는 모든 웹 응용 프로그램에 대해 예상되는 정상적인 동작 인 메모리 누수를 나타냅니다.

입력 해 주셔서 감사합니다.

다음은 JVM 메모리 상태 검사를 자극하는 코드입니다.

자바 런타임 메모리

private final Runtime runtime = Runtime.getRuntime(); 

    Result check() throws Exception { 

     final long freeMem = this.runtime.freeMemory(); 
     // maxMemory() is the value set by the JVM -Xmx (Max HeapSize) parameter 
     final long maxMem = this.runtime.maxMemory(); 
     final long usedMem = maxMem - freeMem;   

     final double value = RatioGauge.Ratio.of(usedMem, maxMem).getValue(); 
     final double threshold = 0.95; 

     if (value < threshold) { 
      // Everything OK: Memory usage usage is below the threshold. 
     } else { 
      // NOT OK: Memory usage is above the threshold. 
     } 
    } 
+0

이 수정 프로그램은 수락 된 답변의 주석에 포함되어 있습니다. – Chris2M

답변

0

당신은 기준을 설정해야합니다. 원하는로드 (요청 수/초, 온라인 사용자 수 등)에서 앱이 잘 작동하는 한 모든 CPU/메모리 사용량은 다소 차이가 있습니다. 기준선이 생기면 코드에 기능을 추가 한 다음 기능이 소비를 줄이거 나 늘려주는 지 확인하여 그에 따라 행동 할 수 있습니다. 그런 다음 필요한 경우 기능을 추가 한 후 악화 된 코드로 작업 영역을 최적화합니다 (또는 로컬 코드 변경으로 인해 작업이 저장되지 않고 작업 부하가있을 때 새로운 기능을 지원하려면 더 많은 작업이 필요합니다. 앱의 구성 요소이지만 다른 이야기입니다).

따라서 절대 값은 중요하지 않습니다. (JVM 힙 소비가 지속적으로 95 % 일 때 이 약간 변하기는하지만) 코드 변경 사이의 변경 사항이 있습니다.

+0

Java Profiler (Netbeans 또는 Eclipse에서 통합 됨)를 사용하여 개발 중에 제안한 메모리 점검 전후 작업을 수행합니다. 현재의 문제는 제작시 건강을 점검 할 필요가 있기 때문에 약간 다릅니다. 지난 주에 JVM 메모리 소비에 대한 임계 값/기준선을 설정하기 위해 여러 가지 테스트를 수행했습니다. 임계 값을 최대 99 %까지 올리면 GC가 실행되기 전과 동시에 경고가 트리거됩니다. 간헐적 인 피크의 문제를 피하기 위해 지난 5 분 동안 슬라이딩 평균을 계산합니다. 그래도이 측정 항목을 사용하는 것은 적절하지 않습니다. – Chris2M

+0

JVM 힙 (_-Xmx_)을 늘리면됩니까? 지금까지 긍정적으로 당신이 메모리 누수가 있다는 것을 나타내지는 않았다. 단지 당신의 앱이 거의 모든 가용 힙을 소비한다. –

+0

아마도 - 나는 그것을 테스트하고보고 할 것이다. – Chris2M