me gustaría controlar la siguiente información del sistema en Java:¿Cómo controlo la CPU, la memoria y el uso del disco de la computadora en Java?
- uso de la CPU actual ** (por ciento)
- disponible de memoria * (libre/total)
espacio en disco disponible (libre/total)
* Tenga en cuenta que me refiero a la memoria general disponible para todo el sistema, no solo la JVM.
Busco una solución multiplataforma (Linux, Mac y Windows) que no se basa en mi propio código llamar programas externos o el uso de JNI. Aunque estas son opciones viables, preferiría no mantener el código específico del sistema operativo si alguien ya tiene una mejor solución.
Si hay una biblioteca gratuita que hace esto de una manera fiable y multiplataforma, sería genial (incluso si realiza llamadas externas o utiliza el código nativo en sí).
Cualquier sugerencia es muy apreciada.
Para aclarar, me gustaría obtener el uso actual de la CPU para todo el sistema, no solo para el (los) proceso (s) Java.
La API de SIGAR proporciona toda la funcionalidad que estoy buscando en un paquete, por lo que es la mejor respuesta a mi pregunta hasta el momento. Sin embargo, debido a que está licenciado bajo la GPL, no puedo usarlo para mi propósito original (un producto comercial de código cerrado). 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 estoy inclinando hacia el siguiente:
- Para uso de la CPU,
OperatingSystemMXBean.getSystemLoadAverage()/OperatingSystemMXBean.getAvailableProcessors()
(promedio de carga por CPU) - Para la memoria, y
OperatingSystemMXBean.getTotalPhysicalMemorySize()
OperatingSystemMXBean.getFreePhysicalMemorySize()
- Por espacio de disco,
File.getTotalSpace()
yFile.getUsableSpace()
Limitaciones:
El getSystemLoadAverage()
y los métodos de consulta de espacio en disco solo están disponibles en Java 6. Además, es posible que algunas funciones JMX no estén disponibles para todas las plataformas (es decir, se informó que getSystemLoadAverage()
devuelve -1 en Windows).
Aunque originalmente fue licenciado bajo GPL, es has been changed a Apache 2.0, que generalmente se puede usar para productos comerciales de código cerrado.
Para aclarar, la API sigar le consigue información del sistema. Si desea información jvm, use JMX. –
SIGAR estar bajo la GPL no le impide usarlo, solo significa que debe ponerse en contacto con los autores y solicitar licencias alternativas. Los autores a menudo aceptan con gusto una pequeña tarifa y permiten licencias comerciales. –
Desde la versión 1.6.4 SIGAR está utilizando la licencia de Apache. – Soundlink