2016-06-23 9 views
2

スプリング・ブート・アクチュエータでCPU使用率メト​​リックを取得する方法はありますか?/metricsと/ healthのエンドポイントで他のメトリックを見ることはできますが、CPU使用率は得られません。 私はCPU使用量を見るためだけに余分なクラスを書くのを避けたいと思います。 おかげCPU使用量を与えるスプリングブート・アクチュエータ

+0

/metricsエンドポイントは、マシンの負荷平均を示します。これはあなたが探しているものですか?アイドル状態のコンピュータの負荷平均は0です。CPUリソースを使用しているかまたはCPUリソースを待機している各実行プロセスは、負荷平均に1を加算します。 – rjdkolb

答えて

0

は残念ながら春ブーツアクチュエータを介して利用可能メトリックCPUはありません。
幸いにもあなた自身で書くことができます。それは一つの値を追跡するように、それはGaugeServiceへのアクセス権を持っている

  1. ちょうど次を満たして測定するBeanを作成します。

    @Autowired 
    private GaugeService gaugeService; 
    
  2. プロセスのCPU負荷を測定するためのルーチンを呼び出すスレッドを作成します。

    @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負荷を取得するルーチンを持っている:

    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を抽出することもできますこのメソッドを使用してロードします。

これが役に立ちます。

関連する問題