自己投資としてチャレンジしている内容を 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)
Summary
▼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 -exxx 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. 参考情報
- Java – CPU, Memory, Disk, Network などの情報採取 on Ubuntu No.79
- Lightweight Mode, Maven Support, Java Package, and Dependency Management in Visual Studio Code
以上です。参考になりましたら幸いです。