¿Hay alguna forma de controlar el uso de la CPU utilizando Java puro?monitoreo de uso de la CPU Java
Respuesta
Esto no es posible con Java puro. Vea esto article para algunas ideas.
Tal vez, si está atascado, podría "detectar" la disponibilidad de la CPU ejecutando una calculadora intermitente de bogomips en una cadena de fondo, y suavizando y normalizando sus hallazgos. ... vale la pena intentarlo no?
No es una joya en los comentarios sobre el artículo que vincula kgiannakakis:
JavaSysMon gestiona procesos y informes de rendimiento útil del sistema métricas de plataforma cruzada. Puede pensar en como una versión multiplataforma de el comando 'superior' de UNIX, junto con la capacidad de eliminar procesos. Se presenta en la forma de un único archivo JAR/..
-obras en Windows, Mac OS X, Linux y Solaris.
¿Qué le parece usar jmx mbeans?
final OperatingSystemMXBean myOsBean=
ManagementFactory.getOperatingSystemMXBean();
double load = myOsBean.getSystemLoadAverage();
Da -1 para mí en plataformas Windows. –
documentos dice -1 significa que no es compatible. Pero en Linux obtengo un valor inferior a lo que dice el sistema operativo, así que supongo que es la carga de CPU utilizada por la JVM actual. – tgkprog
ref doc http://docs.oracle.com/javase/6/docs/api/java/lang/management/OperatingSystemMXBean.html – tgkprog
Usted puede utilizar granos de JMX para calcular una carga de la CPU. Tenga en cuenta que esto mide la carga de la CPU de su programa Java, no la carga total del sistema. (La pregunta no especificó cuál)
Inicializar:
ThreadMXBean newBean = ManagementFactory.getThreadMXBean();
try
{
if (this.newBean.isThreadCpuTimeSupported())
this.newBean.setThreadCpuTimeEnabled(true);
else
throw new AccessControlException("");
}
catch (AccessControlException e)
{
System.out.println("CPU Usage monitoring is not available!");
System.exit(0);
}
Entonces, como el bucle (suponiendo que la aplicación utiliza un bucle, de lo contrario lo que es el punto de medición de uso de la CPU?) Usar esto:
long lastTime = System.nanoTime();
long lastThreadTime = newBean.getCurrentThreadCpuTime();
while (true)
{
// Do something that takes at least 10ms (on windows)
try
{
int j = 0;
for (int i = 0; i < 20000000; i++)
j = (j + i) * j/2;
Thread.sleep(100);
}
catch (InterruptedException e)
{
}
// Calculate coarse CPU usage:
long time = System.nanoTime();
long threadTime = newBean.getCurrentThreadCpuTime();
double load = (threadTime - lastThreadTime)/(double)(time - lastTime);
System.out.println((float)load);
// For next iteration.
lastTime = time;
lastThreadTime = threadTime;
}
es necesario utilizar doble precisión debido a un largo no encaja en un flotador (aunque podría trabajar 99.9999999999999999% de las veces)
Si el "algo" que está haciendo toma menos de aproximadamente 1.6ms (Windows), entonces el valor devuelto ni siquiera habrá aumentado y siempre medirá 0% de CPU erróneamente.
Debido getCurrentThreadCpuTime
es muy inexacta (con retrasos de menos de 100 ms), alisando ayuda mucho:
long lastTime = System.nanoTime();
long lastThreadTime = newBean.getCurrentThreadCpuTime();
float smoothLoad = 0;
while (true)
{
// Do something that takes at least 10ms (on windows)
try
{
int j = 0;
for (int i = 0; i < 2000000; i++)
j = (j + i) * j/2;
Thread.sleep(10);
}
catch (InterruptedException e)
{
}
// Calculate coarse CPU usage:
long time = System.nanoTime();
long threadTime = newBean.getCurrentThreadCpuTime();
double load = (threadTime - lastThreadTime)/(double)(time - lastTime);
// Smooth it.
smoothLoad += (load - smoothLoad) * 0.1; // damping factor, lower means less responsive, 1 means no smoothing.
System.out.println(smoothLoad);
// For next iteration.
lastTime = time;
lastThreadTime = threadTime;
}
si está utilizando Linux - sólo tiene que utilizar jconsole
- obtendrá toda la pista de java gestión de memoria
- 1. Monitoreo del uso de memoria propia mediante la aplicación Java
- 2. Monitoreo simple de servidores con Java
- 3. Monitoreo de CPU y uso de disco de un solo programa
- 4. ¿Monitorea el uso de la CPU por hilo en Java?
- 5. Uso de la CPU de Jquery
- 6. CPU de acelerador Uso de la aplicación
- 7. de Java a reducir el uso de CPU
- 8. Limitar el uso de memoria y CPU de aplicación Java
- 9. Android Sensor Uso de la CPU
- 10. ¿Cómo reviso el uso de CPU y memoria en Java?
- 11. Cálculo del uso de CPU
- 12. Android - uso de memoria/CPU
- 13. Glassfish: alto uso de CPU
- 14. MySQL alto uso de CPU
- 15. C++ CPU Registrar uso
- 16. Uso de Tornado con Pika para monitoreo de colas asíncronas
- 17. Monitoreo de subprocesos .NET
- 18. ¿Cómo controlo la CPU, la memoria y el uso del disco de la computadora en Java?
- 19. Lista de tareas de la CPU% de uso de
- 20. Plugin de Firefox Uso de CPU
- 21. Obtención de uso de CPU con golang
- 22. Carga de CPU desde Java
- 23. Obtener uso de porcentaje de CPU
- 24. pesada mysql uso de la CPU o la memoria
- 25. Eclipse: Alto uso de la CPU durante la autocompleta
- 26. Monitoreo .NET Aplicaciones ASP.NET
- 27. Configuración de Java para Netbeans 6.8 en OSX 10.5.8 para optimizar el uso de la CPU
- 28. Cómo limitar el uso de la CPU de un proceso
- 29. Conseguir uso de la CPU de un proceso en C#
- 30. cálculo de uso de la CPU del comando superior
Esta es una idea razonable. Sin embargo, tendrá que usar trucos microbenchmark adecuados (ejecutar durante un período de tiempo prolongado, calentar todos los bucles antes del tiempo, usar 'System.nanoTime()'). Todavía habrá un poco de revoloteo en el rendimiento también en el intervalo de tiempo. – BobMcGee