Vorrei chiedere se esiste un modo semplice per determinare l'utilizzo della cpu per thread in java. GrazieMonitorare l'utilizzo della cpu per thread in java?
risposta
Anche se dipende dalla piattaforma, credo che quello che stai cercando sia ThreadMXBean: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ThreadMXBean.html. È possibile utilizzare il metodo getThreadUserTime, ad esempio, per ottenere ciò di cui si ha bisogno. Per verificare se la tua piattaforma supporta la misurazione della CPU, puoi chiamare isThreadCpuTimeSupported().
Credo che il JConsole (archived link) vuol fornire questo tipo di informazioni attraverso un plugin
Esso utilizza la funzione ThreadMXBean getThreadCpuTime().
Qualcosa lungo la linea del:
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);
}
}
utilizzando java.lang.management.ThreadMXBean. Come ottenere un ThreadMXBean:
ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
allora si può interrogare quanto un thread specifico sta consumando utilizzando:
long cpuTime = tmxb.getThreadCpuTime(aThreadID);
Speranza che aiuta.
Infatti l'oggetto ThreadMXBean fornisce la funzionalità necessaria (tuttavia potrebbe non essere implementata su tutte le macchine virtuali).
In JDK 1.5 c'era un programma dimostrativo che faceva esattamente quello che ti serviva. Era nella cartella demo/gestione e si chiamava JTop.java
Unfortnately, non è lì in Java6. Forse puoi trovarlo su google o scaricare JDK5.
Prova il plug-in JConsole "TopThreads". Vedere http://lsd.luminis.nl/top-threads-plugin-for-jconsole/
Link è marcio, https://arnhem.luminis.eu/new_version_topthreads_jconsole_plugin/ – Joost
option_1: Livello codici
Nel codice logica di business; all'inizio chiama call start() e infine blocca call stop(). In modo da ottenere tempo CPU per l'esecuzione della logica dal thread corrente in esecuzione. Quindi collegalo. 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: livello monitor usando i plugin (scatola di AIX di IBM che non hanno il supporto jvisualvm)
Se si pensa che è in ritardo l'aggiunta di codice ora, allora si può preferire JConsole con supporto per i plugin. Ho seguito l'articolo this. Scarica il vaso topthreads da tale articolo e correre ./jconsole -pluginpath topthreads-1.1.jar
Option_3: livello monitor usando TOP (turno A) + jstack (macchina Unix, che ha il supporto 'Shif + H')
Segui this tutorial, dove il comando top darà l'opzione per trovare il thread della CPU superiore (nid).Prendi quel controllo che si trova nel file di output jstack.
- 1. Strumenti per monitorare l'esecuzione del thread java
- 2. Utilizzo CPU per thread
- 3. Javascript- Monitorare in modo dinamico l'utilizzo della CPU/memoria
- 4. Come impostare l'affinità core della CPU di un thread Java?
- 5. Java - relazione tra thread e CPU
- 6. come monitorare l'utilizzo della CPU di uno script PHP
- 7. Multithreading Java nel carico della CPU
- 8. Utilizzo elevato della CPU nell'applicazione java - perché?
- 9. Java ridurre l'utilizzo della CPU
- 10. Statistiche thread per CPU in Linux
- 11. Tempo di esecuzione della CPU in Java
- 12. Come ottenere l'utilizzo della cpu per thread su windows (win32)
- 13. Utilizzo CPU Python profilo per thread
- 14. Come monitorare l'utilizzo della memoria Java?
- 15. Come monitorare un processo in Linux CPU, memoria e tempo
- 16. dual-core utilizzo della CPU w/singolo thread Java in esecuzione
- 17. Java: Matcher.find utilizzando elevato utilizzo della CPU
- 18. Indirizzo della variabile per-cpu
- 19. Come monitorare un thread di vitale importanza
- 20. Utilizzo della CPU del throttle sul thread di sfondo
- 21. Utilizzo della CPU per applicazione in Android
- 22. Trova l'utilizzo della CPU per una discussione in Linux
- 23. Monitorare le prestazioni della rete per un processo specifico
- 24. Utilizzo CPU cpu per ogni processo che utilizza sysctl()?
- 25. CPU caricata da Java
- 26. Come monitorare l'utilizzo della memoria dell'applicazione java nella finestra mobile
- 27. Profilo CPU iOS: perché questa thread potrebbe risucchiare il 99,9% della CPU?
- 28. utilizzo della CPU alto per dormire processi
- 29. Quali sono i limiti pratici dei thread per CPU?
- 30. Monitorare una modifica della proprietà
Solo una nota, si potrebbe anche voler controllare che CpuTime sia abilitato nella JVM che si sta eseguendo. 'threadBean_.isThreadCpuTimeEnabled()' restituirà il valore booleano e puoi sempre impostarlo se non è con 'threadBean_.setThreadCpuTimeEnabled (true)' – Graham