ฉันต้องการตรวจสอบข้อมูลระบบต่อไปนี้ใน Java:
- การใช้งาน CPU ปัจจุบัน ** (เปอร์เซ็นต์)
- หน่วยความจำที่มี * (ฟรี / ทั้งหมด)
พื้นที่ว่างในดิสก์ (ฟรี / ทั้งหมด)
* โปรดทราบว่าฉันหมายถึงหน่วยความจำโดยรวมที่มีให้สำหรับทั้งระบบไม่ใช่เฉพาะ JVM
ฉันกำลังมองหาโซลูชันข้ามแพลตฟอร์ม (Linux, Mac และ Windows) ที่ไม่พึ่งพารหัสของตัวเองที่เรียกใช้โปรแกรมภายนอกหรือใช้ JNI แม้ว่าสิ่งเหล่านี้เป็นตัวเลือกที่ทำงานได้ แต่ฉันไม่ต้องการบำรุงรักษาโค้ดเฉพาะระบบปฏิบัติการด้วยตนเองถ้ามีคนที่มีทางออกที่ดีกว่า
หากมีไลบรารี่ฟรีที่ทำสิ่งนี้ในลักษณะข้ามแพลตฟอร์มที่เชื่อถือได้นั่นจะยอดเยี่ยม (แม้ว่าจะทำการโทรภายนอกหรือใช้รหัสเนทีฟเอง)
ข้อเสนอแนะใด ๆ ที่ชื่นชมมาก
เพื่อชี้แจงฉันต้องการได้รับการใช้งาน CPU ปัจจุบันสำหรับทั้งระบบไม่ใช่เฉพาะกระบวนการ Java (es)
SIGAR API ให้ฟังก์ชั่นทั้งหมดที่ฉันกำลังมองหาในแพ็คเกจเดียวดังนั้นมันจึงเป็นคำตอบที่ดีที่สุดสำหรับคำถามของฉัน อย่างไรก็ตามเนื่องจากได้รับอนุญาตภายใต้ GPL ฉันไม่สามารถใช้เพื่อวัตถุประสงค์ดั้งเดิมของฉันได้ (แหล่งข้อมูลปิดผลิตภัณฑ์เชิงพาณิชย์) อาจเป็นไปได้ว่า Hyperic อาจให้สิทธิ์ SIGAR เพื่อการใช้งานเชิงพาณิชย์ แต่ฉันไม่ได้ตรวจสอบ สำหรับโครงการ GPL ของฉันฉันจะพิจารณา SIGAR ในอนาคต
สำหรับความต้องการในปัจจุบันของฉันฉันกำลังโน้มตัวต่อไปนี้:
- สำหรับการใช้งาน CPU
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(โหลดเฉลี่ยต่อ cpu) - สำหรับหน่วยความจำ
OperatingSystemMXBean.getTotalPhysicalMemorySize()
และOperatingSystemMXBean.getFreePhysicalMemorySize()
- สำหรับพื้นที่ดิสก์
File.getTotalSpace()
และFile.getUsableSpace()
ข้อ จำกัด :
getSystemLoadAverage()
และพื้นที่ดิสก์สอบถามวิธีการนี้ใช้ได้เฉพาะภายใต้ Java 6. นอกจากนี้บางฟังก์ชันการทำงาน JMX อาจไม่สามารถใช้ได้กับทุกแพลตฟอร์ม (คือมันได้รับรายงานว่าgetSystemLoadAverage()
ผลตอบแทน -1 ใน Windows)
แม้ว่าจะได้รับสิทธิ์การใช้งานภายใต้ GPL แต่เดิมได้ถูกเปลี่ยนเป็นApache 2.0ซึ่งโดยทั่วไปสามารถใช้สำหรับผลิตภัณฑ์แบบปิดแหล่งที่มา