Tôi muốn theo dõi thông tin hệ thống sau đây trong Java:
- Sử dụng CPU hiện tại ** (phần trăm)
- Bộ nhớ khả dụng * (miễn phí / tổng số)
Dung lượng đĩa trống (miễn phí / tổng cộng)
* Lưu ý rằng tôi có nghĩa là bộ nhớ tổng thể có sẵn cho toàn bộ hệ thống, không chỉ JVM.
Tôi đang tìm kiếm một giải pháp đa nền tảng (Linux, Mac và Windows) không dựa vào mã của riêng tôi để gọi các chương trình bên ngoài hoặc sử dụng JNI. Mặc dù đây là những tùy chọn khả thi, tôi không muốn tự mình duy trì mã dành riêng cho hệ điều hành nếu ai đó đã có giải pháp tốt hơn.
Nếu có một thư viện miễn phí ngoài đó thực hiện điều này theo cách đa nền tảng, đáng tin cậy, thì đó sẽ là điều tuyệt vời (ngay cả khi nó thực hiện các cuộc gọi bên ngoài hoặc sử dụng chính mã nguồn gốc).
Bất kỳ đề xuất đều được đánh giá cao.
Để làm rõ, tôi muốn có được mức sử dụng CPU hiện tại cho toàn bộ hệ thống, không chỉ các quy trình Java.
API SIGAR cung cấp tất cả các chức năng tôi đang tìm kiếm trong một gói, vì vậy đây là câu trả lời tốt nhất cho câu hỏi của tôi cho đến nay. Tuy nhiên, do được cấp phép theo GPL, tôi không thể sử dụng nó cho mục đích ban đầu của mình (một nguồn đóng, sản phẩm thương mại). Có thể Hyperic có thể cấp phép cho SIGAR cho mục đích thương mại, nhưng tôi chưa xem xét nó. Đối với các dự án GPL của tôi, tôi chắc chắn sẽ xem xét SIGAR trong tương lai.
Đối với nhu cầu hiện tại của tôi, tôi đang nghiêng về những điều sau đây:
- Đối với việc sử dụng CPU,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(tải trung bình trên mỗi cpu) - Dành cho bộ nhớ
OperatingSystemMXBean.getTotalPhysicalMemorySize()
vàOperatingSystemMXBean.getFreePhysicalMemorySize()
- Đối với không gian đĩa
File.getTotalSpace()
vàFile.getUsableSpace()
Hạn chế:
Các getSystemLoadAverage()
phương thức truy vấn không gian đĩa và ổ đĩa chỉ khả dụng trong Java 6. Ngoài ra, một số chức năng JMX có thể không khả dụng cho tất cả các nền tảng (tức là đã được báo cáo getSystemLoadAverage()
trả về -1 trên Windows).
Mặc dù ban đầu được cấp phép theo GPL, nó đã được đổi thành Apache 2.0 , thường được sử dụng cho các sản phẩm thương mại, nguồn đóng.