Me gustaría preguntar si hay alguna manera simple de determinar el uso de la CPU por hilo en Java. Gracias¿Monitorea el uso de la CPU por hilo en Java?
Respuesta
Aunque esto depende de la plataforma, creo que lo que estás buscando es ThreadMXBean: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ThreadMXBean.html. Puede usar el método getThreadUserTime, por ejemplo, para obtener lo que necesita. Para verificar si su plataforma es compatible con la medición de la CPU, puede llamar a isThreadCpuTimeSupported().
creo que el JConsole (archived link) proporciona esta clase de información a través de un plugin
Utiliza la función ThreadMXBean getThreadCpuTime().
Algo a lo largo de la línea:
long upTime = runtimeProxy.getUptime();
List<Long> threadCpuTime = new ArrayList<Long>();
for (int i = 0; i < threadIds.size(); i++) {
long threadId = threadIds.get(i);
if (threadId != -1) {
threadCpuTime.add(threadProxy.getThreadCpuTime(threadId));
} else {
threadCpuTime.add(0L);
}
}
int nCPUs = osProxy.getAvailableProcessors();
List<Float> cpuUsageList = new ArrayList<Float>();
if (prevUpTime > 0L && upTime > prevUpTime) {
// elapsedTime is in ms
long elapsedTime = upTime - prevUpTime;
for (int i = 0; i < threadIds.size(); i++) {
// elapsedCpu is in ns
long elapsedCpu = threadCpuTime.get(i) - prevThreadCpuTime.get(i);
// cpuUsage could go higher than 100% because elapsedTime
// and elapsedCpu are not fetched simultaneously. Limit to
// 99% to avoid Chart showing a scale from 0% to 200%.
float cpuUsage = Math.min(99F, elapsedCpu/(elapsedTime * 1000000F * nCPUs));
cpuUsageList.add(cpuUsage);
}
}
utilizando java.lang.management.ThreadMXBean. Cómo obtener una ThreadMXBean:
ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
continuación, se puede consultar la cantidad de un hilo específico está consumiendo mediante el uso de:
long cpuTime = tmxb.getThreadCpuTime(aThreadID);
espero que ayude.
De hecho, el objeto ThreadMXBean proporciona la funcionalidad que necesita (sin embargo, es posible que no se implemente en todas las máquinas virtuales).
En JDK 1.5 había un programa de demostración que hacía exactamente lo que necesita. Estaba en la carpeta demo/management y se llamaba JTop.java
Desafortunadamente, no está allí en Java6. Tal vez puedas encontrar en google o descargar JDK5.
Pruebe el plugin JConsole "TopThreads". Ver http://lsd.luminis.nl/top-threads-plugin-for-jconsole/
El enlace está podrido, https://arnhem.luminis.eu/new_version_topthreads_jconsole_plugin/ – Joost
OPCION_1: Nivel Código
En su código de lógica de negocio; al principio, llame a la API de inicio() y finalmente a la llamada de bloqueo(). De modo que obtendrá tiempo de CPU para ejecutar su lógica por el hilo en ejecución actual. Luego regístrate. Reference.
class CPUTimer
{
private long _startTime = 0l;
public void start()
{
_startTime = getCpuTimeInMillis();
}
public long stop()
{
long result = (getCpuTimeInMillis() - _startTime);
_startTime = 0l;
return result;
}
public boolean isRunning()
{
return _startTime != 0l;
}
/** thread CPU time in milliseconds. */
private long getCpuTimeInMillis()
{
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
return bean.isCurrentThreadCpuTimeSupported() ? bean.getCurrentThreadCpuTime()/1000000: 0L;
}
}
Option_2: Monitor de nivel de uso de plugins (cuadro de AIX de IBM, que no tienen el apoyo jvisualvm)
Si usted piensa que es el retraso en la adición de código de ahora, entonces usted puede preferir JConsole con complementos compatibles. Seguí el artículo this. Descargar el frasco topthreads de ese artículo y ejecutar ./jconsole -pluginpath topthreads-1.1.jar
option_3: nivel de monitor usando TOP (desplazamiento H) + jstack (máquina Unix que tiene soporte 'SHIFT + H')
Seguir this tutorial, donde el comando superior dará la opción de encontrar el hilo superior de la CPU (nid).Toma ese control que nid en el archivo de salida jstack.
- 1. ¿Qué hilo Java está acaparando la CPU?
- 2. ¿Monitorea el uso de la red de un proceso?
- 3. monitoreo de uso de la CPU Java
- 4. Perfil Python Uso de CPU por subproceso
- 5. Uso de la CPU en el modo por lotes superior
- 6. Cómo obtener el uso de CPU por hilo en Windows (win32)
- 7. Cómo recuperar el uso de la CPU por proceso
- 8. uso de la CPU aumentando hasta 100% en bucle infinito en el hilo
- 9. ¿Cómo reviso el uso de CPU y memoria en Java?
- 10. de Java a reducir el uso de CPU
- 11. Limitar el uso de memoria y CPU de aplicación Java
- 12. hilo de obtener el 100% de la CPU muy rápido
- 13. ¿Cómo puedo usar de manera programada memoria, hilo y uso de CPU desde mi aplicación Java?
- 14. ¿Cómo controlo la CPU, la memoria y el uso del disco de la computadora en Java?
- 15. Java - ¿Cómo puedo monitorear el uso de memoria y CPU de otro proceso?
- 16. ¿Cómo obtener el uso de la CPU en C?
- 17. Configuración de Java para Netbeans 6.8 en OSX 10.5.8 para optimizar el uso de la CPU
- 18. ¿Por qué el contador de rendimiento de la CPU siguió informando 0% de uso de la CPU?
- 19. Devolver el uso de la CPU en WMI con C#
- 20. Uso de la CPU de Jquery
- 21. CPU de acelerador Uso de la aplicación
- 22. Configuración del uso máximo de CPU por proceso en Windows
- 23. C++ CPU Registrar uso
- 24. Android Sensor Uso de la CPU
- 25. uso de CPU de subproceso múltiple en C#
- 26. doble núcleo utilización de la CPU w solo hilo/Java que se ejecuta
- 27. Consumo de CPU cuando el hilo está durmiendo usando Thread.sleep
- 28. Cálculo del uso de CPU
- 29. ASP.Net IIS7 Obtención de uso de CPU por solicitud
- 30. ¿Monitorea el contenido de archivos/directorios?
Solo una nota, es posible que también desee verificar que CpuTime esté habilitado en la JVM que está ejecutando. 'threadBean_.isThreadCpuTimeEnabled()' devolverá el valor booleano y siempre se puede establecer si no está con 'threadBean_.setThreadCpuTimeEnabled (true)' – Graham