Java – マシンの CPU % のみ抽出する Jar を Cron job で実行 No.81

自己投資としてチャレンジしている内容を Blog で公開しています。

今回はマシン (Ubuntu) の CPU % の使用率をファイルに出力する jar を Cron job で実行したいと思います。(In English Java – Save CPU value into a local file by Cron job with an execution of Jar No.81)

▼1. マシン (Ubuntu) の現在の CPUの値を出力する方法

Java で top -b -n 1 のコマンドを実行し、CPU % の部分のみ取り出し出力します。


▼2. 事前準備

以下の blog をベースとした話となります。

Java – CPU, Memory, Disk, Network などの情報採取 on Ubuntu No.79


▼3. マシン (Ubuntu) の CPU の値を出力する Java コード

3-1. perfch2.java を作成

以下のような Top コマンドの CPU の値のみ表示し、ファイルに保存します。ファイル名は CPU{ファイル出力時のエポックミリ秒}.txt です。

(出力の例)
INFO: %Cpu(s): 11.1 us
package org.example.perflog;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.Instant;
import java.util.logging.Level;
import java.util.logging.Logger;

public class perfch2 {

    private static final Logger log;

    static{
        log = Logger.getLogger(perfch2.class.getName());
    }

    public static void main(String[] args) {
        //System.out.println("top -b -n 1");
        try {
            Process p = Runtime.getRuntime().exec("top -b -n 1");
            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null;
            int i = 0;
            // set j to current local time
            long j = Instant.now().toEpochMilli();

            while ((line = br.readLine()) != null && i < 3) {
                if(i == 2) {
                    // extract string until comma
                    String[] parts = line.split(",");
                    String part1 = parts[0]; 
                    log.log(Level.INFO, part1);
                    
                    // save part1 to file
                    String filename = "/home/ubuntu20/temp/cpu"+ j +".log";
                    java.io.PrintWriter output = new java.io.PrintWriter(filename);
                    output.println(part1);
                    output.close();
                }
                i++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3-2. Jar ファイルを生成

Jar ファイルの生成は、VS Code 上で [Shift]+[Ctrl]+[p] を押して Java:Export Jar を選択します。プロジェクトのフォルダ配下に perfcheck.jar のような jar ファイルが生成されます。
参考: Lightweight Mode, Maven Support, Java Package, and Dependency Management in Visual Studio Code

3-3. Cron job を指定

19:24 に実行するジョブを設定の場合

crontab -e
xxx

 For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
24 19 * * * $JAVA_HOME/bin/java -jar /home/ubuntu20/coding/javatest/perfcheck/perfcheck.jar

3-4. Job 実行後、以下のファイルが出力されることを確認

エポックミリ秒 1669112641416 は 2022/11/22 19:24:01 の日時を意味します。

//Cpu1669112641416.txt

%Cpu(s): 11.8 us

▼4. 参考情報

以上です。参考になりましたら幸いです。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です