2
スプリング・ブート・アクチュエータでCPU使用率メトリックを取得する方法はありますか?/metricsと/ healthのエンドポイントで他のメトリックを見ることはできますが、CPU使用率は得られません。 私はCPU使用量を見るためだけに余分なクラスを書くのを避けたいと思います。 おかげCPU使用量を与えるスプリングブート・アクチュエータ
スプリング・ブート・アクチュエータでCPU使用率メトリックを取得する方法はありますか?/metricsと/ healthのエンドポイントで他のメトリックを見ることはできますが、CPU使用率は得られません。 私はCPU使用量を見るためだけに余分なクラスを書くのを避けたいと思います。 おかげCPU使用量を与えるスプリングブート・アクチュエータ
は残念ながら春ブーツアクチュエータを介して利用可能メトリックCPUはありません。
幸いにもあなた自身で書くことができます。それは一つの値を追跡するように、それはGaugeService
へのアクセス権を持っている
:
ちょうど次を満たして測定するBeanを作成します。@Autowired
private GaugeService gaugeService;
プロセスのCPU負荷を測定するためのルーチンを呼び出すスレッドを作成します。
@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負荷を取得するルーチンを持っている:
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);
}
システム全体のCPUを抽出することもできますこのメソッドを使用してロードします。
これが役に立ちます。
/metricsエンドポイントは、マシンの負荷平均を示します。これはあなたが探しているものですか?アイドル状態のコンピュータの負荷平均は0です。CPUリソースを使用しているかまたはCPUリソースを待機している各実行プロセスは、負荷平均に1を加算します。 – rjdkolb