Me gustaría monitorear la siguiente información del sistema en Java:
- Uso actual de la CPU ** (porcentaje)
- Memoria disponible * (libre / total)
Espacio disponible en disco (libre / total)
* Tenga en cuenta que me refiero a la memoria general disponible para todo el sistema, no solo la JVM.
Estoy buscando una solución multiplataforma (Linux, Mac y Windows) que no se base en mi propio código para llamar a programas externos o usar JNI. Aunque estas son opciones viables, preferiría no mantener yo mismo el código específico del sistema operativo si alguien ya tiene una mejor solución.
Si hay una biblioteca gratuita por ahí que lo haga de manera confiable y multiplataforma, sería genial (incluso si realiza llamadas externas o utiliza el código nativo).
Cualquier sugerencia es muy apreciada.
Para aclarar, me gustaría obtener el uso actual de la CPU para todo el sistema, no solo los procesos de Java.
La API SIGAR proporciona toda la funcionalidad que busco en un paquete, por lo que es la mejor respuesta a mi pregunta hasta ahora. Sin embargo, debido a que tiene licencia bajo la GPL, no puedo usarlo para mi propósito original (una fuente cerrada, producto comercial). Es posible que Hyperic pueda licenciar SIGAR para uso comercial, pero no lo he investigado. Para mis proyectos GPL, definitivamente consideraré SIGAR en el futuro.
Para mis necesidades actuales, me inclino por lo siguiente:
- Para uso de CPU,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(promedio de carga por CPU) - Por memoria,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
yOperatingSystemMXBean.getFreePhysicalMemorySize()
- Para espacio en disco,
File.getTotalSpace()
yFile.getUsableSpace()
Limitaciones:
Los getSystemLoadAverage()
métodos de consulta y espacio en disco solo están disponibles en Java 6. Además, algunas funciones de JMX pueden no estar disponibles para todas las plataformas (es decir, se ha informado quegetSystemLoadAverage()
devuelve -1 en Windows).
Aunque originalmente tenía licencia bajo GPL, se ha cambiado a Apache 2.0 , que generalmente se puede usar para productos comerciales de código cerrado.