2016-06-23 13 views
2

스프링 부트 액츄에이터로 CPU 사용량 측정법을 얻는 방법이 있습니까?/메트릭 및/health 엔드 포인트를 사용하여 다른 메트릭을 볼 수는 있지만 CPU 사용량은 얻을 수 없습니다. CPU 사용량을보기 위해 여분의 클래스를 작성하는 것을 피하고 싶습니다. 아이디어가 있으십니까? 감사CPU 사용량을 알려주는 스프링 부트 액츄에이터

+0

/메트릭 엔드 포인트는 시스템의로드 평균을 표시합니다. 이게 너가 찾고있는거야? 유휴 컴퓨터의 평균로드는 0입니다. CPU 리소스를 사용 중이거나 대기중인 각 실행 프로세스는로드 평균에 1을 더합니다. – rjdkolb

답변

0

불행하게도 봄 부팅 액추에이터을 통해 사용할 메트릭 CPU 없다.
다행히도 직접 작성할 수 있습니다. 그것은 하나 개의 값을 추적 될 것이다 그것은 GaugeService에 액세스 할 수 있습니다

  1. :

    그냥 다음을 충족 측정하는 콩을 만듭니다.

    public static double getProcessCpuLoad() throws Exception { 
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
        ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem"); 
        AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" }); 
    
        if (list.isEmpty())  return Double.NaN; 
    
        Attribute att = (Attribute)list.get(0); 
        Double value = (Double)att.getValue(); 
    
        // usually takes a couple of seconds before we get real values 
        if (value == -1.0)  return Double.NaN; 
        // returns a percentage value with 1 decimal point precision 
        return ((int)(value * 1000)/10.0); 
    } 
    
  2. :

    @PostConstruct 
    public void startMeasuring() { 
        new Thread() { 
         @Override 
         public void run() { 
          gaugeService.submit("process.cpu.load", getProcessCpuLoad()); 
          Thread.sleep(2000); //measure every 2sec. 
         } 
        }.start(); 
    } 
    
  3. 이 프로세스 사용 MXBean에 대한 CPU 부하 을 유도 할 수있는 루틴을 가지고 :

    @Autowired private GaugeService gaugeService; 
  4. 은 'CPU 부하 과정을 측정하는 루틴을 호출하는 스레드를 생성

시스템 전체의 CPU를 추출 할 수도 있습니다 이 방법을 사용하여로드하십시오.

희망이 도움이됩니다.