1. ホーム

[解決済み】OSレベルのシステム情報を取得する

2022-04-03 19:10:52

質問

現在、様々なプラットフォーム(主にSolaris、Linux、Windows)で実行可能なJavaアプリを作っています。

現在使用しているディスク容量、CPU使用率、使用メモリなどの情報をOSから抽出することに成功した方はいらっしゃいますか?Javaアプリ自体が消費しているものについてはどうでしょうか?

できれば、JNIを使わずにこれらの情報を取得したいのですが。

どのように解決するのですか?

Runtimeクラスから限られたメモリ情報を取得することができます。これは本当にあなたが探しているものではありませんが、私は完全性のためにそれを提供することを考えました。以下はその例です。Edit: java.io.Fileクラスからディスク使用量の情報を得ることもできます。ディスク使用量に関するものは、Java 1.6以降が必要です。

public class Main {
  public static void main(String[] args) {
    /* Total number of processors or cores available to the JVM */
    System.out.println("Available processors (cores): " + 
        Runtime.getRuntime().availableProcessors());

    /* Total amount of free memory available to the JVM */
    System.out.println("Free memory (bytes): " + 
        Runtime.getRuntime().freeMemory());

    /* This will return Long.MAX_VALUE if there is no preset limit */
    long maxMemory = Runtime.getRuntime().maxMemory();
    /* Maximum amount of memory the JVM will attempt to use */
    System.out.println("Maximum memory (bytes): " + 
        (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));

    /* Total memory currently available to the JVM */
    System.out.println("Total memory available to JVM (bytes): " + 
        Runtime.getRuntime().totalMemory());

    /* Get a list of all filesystem roots on this system */
    File[] roots = File.listRoots();

    /* For each filesystem root, print some info */
    for (File root : roots) {
      System.out.println("File system root: " + root.getAbsolutePath());
      System.out.println("Total space (bytes): " + root.getTotalSpace());
      System.out.println("Free space (bytes): " + root.getFreeSpace());
      System.out.println("Usable space (bytes): " + root.getUsableSpace());
    }
  }
}