2
스프링 부트 액츄에이터로 CPU 사용량 측정법을 얻는 방법이 있습니까?/메트릭 및/health 엔드 포인트를 사용하여 다른 메트릭을 볼 수는 있지만 CPU 사용량은 얻을 수 없습니다. CPU 사용량을보기 위해 여분의 클래스를 작성하는 것을 피하고 싶습니다. 아이디어가 있으십니까? 감사CPU 사용량을 알려주는 스프링 부트 액츄에이터
스프링 부트 액츄에이터로 CPU 사용량 측정법을 얻는 방법이 있습니까?/메트릭 및/health 엔드 포인트를 사용하여 다른 메트릭을 볼 수는 있지만 CPU 사용량은 얻을 수 없습니다. CPU 사용량을보기 위해 여분의 클래스를 작성하는 것을 피하고 싶습니다. 아이디어가 있으십니까? 감사CPU 사용량을 알려주는 스프링 부트 액츄에이터
불행하게도 봄 부팅 액추에이터을 통해 사용할 메트릭 CPU 없다.
다행히도 직접 작성할 수 있습니다. 그것은 하나 개의 값을 추적 될 것이다 그것은 GaugeService
에 액세스 할 수 있습니다
:
그냥 다음을 충족 측정하는 콩을 만듭니다.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);
}
@PostConstruct
public void startMeasuring() {
new Thread() {
@Override
public void run() {
gaugeService.submit("process.cpu.load", getProcessCpuLoad());
Thread.sleep(2000); //measure every 2sec.
}
}.start();
}
이 프로세스 사용 MXBean에 대한 CPU 부하 을 유도 할 수있는 루틴을 가지고 :
@Autowired private GaugeService gaugeService;
시스템 전체의 CPU를 추출 할 수도 있습니다 이 방법을 사용하여로드하십시오.
희망이 도움이됩니다.
/메트릭 엔드 포인트는 시스템의로드 평균을 표시합니다. 이게 너가 찾고있는거야? 유휴 컴퓨터의 평균로드는 0입니다. CPU 리소스를 사용 중이거나 대기중인 각 실행 프로세스는로드 평균에 1을 더합니다. – rjdkolb