Saya ingin memantau informasi sistem berikut di Jawa:
- Penggunaan CPU saat ini ** (persen)
- Memori yang tersedia * (gratis / total)
Ruang disk yang tersedia (gratis / total)
* Perhatikan bahwa maksud saya keseluruhan memori tersedia untuk seluruh sistem, bukan hanya JVM.
Saya mencari solusi lintas platform (Linux, Mac, dan Windows) yang tidak bergantung pada kode saya sendiri yang memanggil program eksternal atau menggunakan JNI. Walaupun ini adalah opsi yang layak, saya lebih suka tidak memelihara kode spesifik OS sendiri jika seseorang sudah memiliki solusi yang lebih baik.
Jika ada perpustakaan gratis di luar sana yang melakukan ini dengan cara yang dapat diandalkan, lintas-platform, itu akan bagus (bahkan jika itu membuat panggilan eksternal atau menggunakan kode asli itu sendiri).
Semua saran sangatlah diapresiasi.
Untuk memperjelas, saya ingin mendapatkan penggunaan CPU saat ini untuk seluruh sistem, bukan hanya proses Java.
SIGAR API menyediakan semua fungsionalitas yang saya cari dalam satu paket, jadi ini adalah jawaban terbaik untuk pertanyaan saya sejauh ini. Namun, karena dilisensikan di bawah GPL, saya tidak dapat menggunakannya untuk tujuan asli saya (sumber tertutup, produk komersial). Mungkin saja Hyperic melisensikan SIGAR untuk penggunaan komersial, tetapi saya belum memeriksanya. Untuk proyek GPL saya, saya pasti akan mempertimbangkan SIGAR di masa depan.
Untuk kebutuhan saya saat ini, saya condong ke arah yang berikut:
- Untuk penggunaan CPU,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(load rata-rata per cpu) - Untuk memori,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
danOperatingSystemMXBean.getFreePhysicalMemorySize()
- Untuk ruang disk,
File.getTotalSpace()
danFile.getUsableSpace()
Keterbatasan:
The getSystemLoadAverage()
dan disk yang metode ruang query hanya tersedia di bawah Jawa 6. Juga, beberapa fungsi JMX mungkin tidak tersedia untuk semua platform (yaitu itu telah melaporkan bahwa getSystemLoadAverage()
pengembalian -1 pada Windows).
Meskipun awalnya dilisensikan di bawah GPL, itu telah diubah menjadi Apache 2.0 , yang umumnya dapat digunakan untuk produk komersial, sumber tertutup.
Jawaban:
Sejalan dengan apa yang saya sebutkan di posting ini . Saya sarankan Anda menggunakan SIGAR API . Saya menggunakan SIGAR API di salah satu aplikasi saya sendiri dan ini sangat bagus. Anda akan menemukannya stabil, didukung dengan baik, dan penuh dengan contoh-contoh berguna. Ini adalah open-source dengan
lisensi GPL 2Apache 2.0. Saksikan berikut ini. Saya merasa itu akan memenuhi kebutuhan Anda.Menggunakan Java dan Sigar API Anda bisa mendapatkan Memori, CPU, Disk, Beban Rata-Rata, info dan metrik Antarmuka Jaringan, informasi Tabel Proses, info Rute, dll.
sumber
Berikut ini seharusnya memberi Anda CPU dan RAM. Lihat ManagementFactory untuk lebih jelasnya.
sumber
Di JDK 1.7, Anda bisa mendapatkan CPU sistem dan penggunaan memori melalui
com.sun.management.OperatingSystemMXBean
. Ini berbeda darijava.lang.management.OperatingSystemMXBean
.sumber
Ini berfungsi dengan baik untuk saya tanpa API eksternal, hanya fitur tersembunyi Java asli :)
sumber
Lihat artikel yang sangat membosankan ini: http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking#UsingaSuninternalclasstogetJVMCPUtime
Untuk mendapatkan persentase CPU yang digunakan, yang Anda butuhkan hanyalah beberapa matematika sederhana:
Catatan: Anda harus mengimpor
com.sun.management.OperatingSystemMXBean
dan tidakjava.lang.management.OperatingSystemMXBean
.sumber
Untuk ruang disk, jika Anda memiliki Java 6, Anda dapat menggunakan metode getTotalSpace dan getFreeSpace di File. Jika Anda tidak menggunakan Java 6, saya yakin Anda dapat menggunakan Apache Commons IO untuk mendapatkan beberapa cara di sana.
Saya tidak tahu ada cara lintas platform untuk mendapatkan penggunaan CPU atau penggunaan memori.
sumber
Banyak dari ini sudah tersedia melalui JMX. Dengan Java 5, JMX built-in dan mereka termasuk penampil konsol JMX dengan JDK.
Anda dapat menggunakan JMX untuk memonitor secara manual, atau menjalankan perintah JMX dari Java jika Anda memerlukan informasi ini di run-time Anda sendiri.
sumber
Jawaban yang diterima pada 2008 merekomendasikan SIGAR. Namun, sebagai komentar dari 2014 (@Alvaro) mengatakan:
Rekomendasi saya adalah menggunakan https://github.com/oshi/oshi
Atau jawaban yang disebutkan di atas .
sumber
sumber
Kode berikut ini hanya Linux (mungkin Unix), tetapi bekerja dalam proyek nyata.
sumber
Buat file batch "Pc.bat" sebagai, typeperf -sc 1 "\ mukit \ processor (_Total) \ %% Waktu Prosesor"
Anda dapat menggunakan kelas MProcess,
}
Kemudian setelah beberapa manipulasi string, Anda mendapatkan penggunaan CPU. Anda dapat menggunakan proses yang sama untuk tugas-tugas lain.
--Mukit Hasan
sumber
typeperf "\processor(_total)\% processor time"
Jika Anda memasukkannya ke file batch, gunakan %% bukan%. Saya menggunakan technet.microsoft.com/en-us/library/bb490960.aspx .