概要
Javaでシステム情報を取得できるOSHIというライブラリについてのメモです。
Sigarとの違い
システム情報を取得するライブラリとして他にSigarがありますが、下記の点でOSHIの方がいい感じです。
- SigarはDLLなどのネイティブなバイナリが必要だが、OSHIの場合は不要
- SigarはWindows版の場合、Java9以降では使用できない(JVMがクラッシュする!)が、OSHIは問題なく使用可能
インストール
build.gradle
dependencies {
compile group: 'com.github.oshi', name: 'oshi-core', version: '3.13.0'
}
使ってみる
OSHIで取得できる情報を適当に抜粋して紹介します。右のコメントは私の環境での出力結果です。
OS情報
var si = new SystemInfo();
var os = si.getOperatingSystem();
// OSの種類
System.out.println(os.getFamily()); // macOS
// バージョン
System.out.println(os.getVersion().getVersion()); // 10.14.2
// メーカー
System.out.println(os.getManufacturer()); // Apple
// 何ビットか
System.out.println(os.getBitness()); // 64
// コードネーム
System.out.println(os.getVersion().getCodeName()); // Mojave
CPU情報
var si = new SystemInfo();
var hard = si.getHardware();
var cpu = hard.getProcessor();
// 物理プロセス数
System.out.println(cpu.getPhysicalProcessorCount()); // 4
// 論理プロセス数
System.out.println(cpu.getLogicalProcessorCount()); // 8
// 名前
System.out.println(cpu.getName()); // Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
// 識別子
System.out.println(cpu.getIdentifier()); // Intel64 Family 6 Model 70 Stepping 1
// ベンダID
System.out.println(cpu.getVendor()); // GenuineIntel
// コンテキストスイッチ数
System.out.println(cpu.getContextSwitches()); // 130336
// ロードアベレージ
System.out.println(cpu.getSystemLoadAverage()); // 2.65576171875
メモリ情報
var si = new SystemInfo();
var hard = si.getHardware();
var memory = hard.getMemory();
// トータルメモリ容量
System.out.println(memory.getTotal()); // 17179869184
// トータルスワップ容量
System.out.println(memory.getSwapTotal()); // 1073741824
// ページサイズ
System.out.println(memory.getPageSize()); // 4096
// 使用可能容量
System.out.println(memory.getAvailable()); // 5858844672
USBデバイス
var si = new SystemInfo();
var hard = si.getHardware();
var usbs = hard.getUsbDevices(false);
for(var usb : usbs) {
// 色々あるのでとりあえずマウスに絞ってみる
if(usb.getName().contains("Mouse")) {
// 名前
System.out.println(usb.getName()); // USB Laser Mouse
// メーカー
System.out.println(usb.getVendor()); // Logitech
}
}
センサー
var si = new SystemInfo();
var hard = si.getHardware();
var sensor = hard.getSensors();
// CPU温度
System.out.println(sensor.getCpuTemperature()); // 48.75
// CPU電圧
System.out.println(sensor.getCpuVoltage()); // 3.63
// CPUファンスピード
System.out.println(Arrays.toString(sensor.getFanSpeeds())); // [2159, 2000]
その他
多いので全部は紹介できないですが、上記以外にもファイルシステム情報、ディスク情報、プロセス情報、サウンドカード情報、電源情報などなど、様々な情報を取得することができます。