Ho un grande programma in Java che utilizza il multithreading. In alcuni casi, il programma inizia a utilizzare il 100% dei tre core del mio sistema a otto core. Nell'uso normale, il programma usa tutti i core all'1-2%. Come posso trovare la classe che sta sovraccaricando i core?Come trovare una classe ad alta intensità di CPU in Java?
risposta
Provare a eseguire il dump dei thread (vedere jps, comandi jstack) e quindi vedere quali metodi vengono eseguiti.
Basta osservare quali metodi vengono eseguiti più frequentemente non è lo stesso che scoprire dove il programma impiega la maggior parte del tempo di elaborazione. – Jesper
@Jesper: esegui un numero di volte pari a 10, quindi cerca le istruzioni che si trovano su più campioni di stack. Quindi la frazione di campioni che contiene una linea è la frazione di tempo di cui quella linea è responsabile, e non sarebbe spesa, ma per quella linea. Il concetto di "dove il programma trascorre il suo tempo" ignora la responsabilità delle chiamate al metodo che fanno passare il tempo a livelli inferiori. –
@Mike Il mio punto è che dovresti misurare quanto tempo è trascorso in quali parti del programma, non solo quante volte vengono chiamati i metodi. Potresti avere un metodo chiamato 1000 volte ma che usa solo il 10% delle volte, o un metodo che viene chiamato 100 volte ma che usa il 90% del tempo del programma. Per ottimizzare, dovresti concentrarti sul metodo meno frequentemente chiamato in questo caso. – Jesper
Utilizzare un profiler come il jvisualvm si raggruppamento con jdk-1.6.0_10
Puoi cercare il loop di attesa occupato : '(while! done) {}'. Raramente un thread scritto correttamente può svolgere un lavoro significativo al 100%, in genere il calcolo viene occasionalmente bloccato dall'I/O o dalla sincronizzazione. - un buon grafico di utilizzo della CPU dovrebbe apparire leggermente ondulato. – Justin
usando un profiler per capire quale thread (s) utilizzano tutti i cicli di CPU, e il metodo (s) hanno sono in esecuzione.
Se si utilizza Eclipse, è possibile utilizzare TPTP profiling tool.
Se si sta seguendo il percorso di profiler commerciale, si consiglia di utilizzare Dynatrace.
Ridicolo costoso sia finanziario che in termini di spese generali. http://williamlouth.wordpress.com/2010/05/25/the-java-application-performance-management-vendor-showdown/ –
Non sono sicuro di quanto sia costoso ma l'ho trovato più utile di JProbe .I percorsi puri di Dynatrace sono molto accurati e interrompono i report in modo appropriato a livello di metodo, livello sql, livello API. È possibile utilizzare il profiler del client per vedere l'esecuzione dello script java, i tempi delle chiamate ajax, i tempi di rendering, i tempi di rete. Sono sicuro che probabilmente ha un prezzo. Ecco perché ho detto che se l'OP sta spendendo i soldi per ottenere uno spot, potrebbe controllarlo. – CoolBeans
Se si utilizza Java su UNIX o alcune versioni di Linux in DTrace con Java.
In realtà le sonde dtrace per la JVM sono piuttosto costose in fase di esecuzione. Sonde OpenCore vs sonde Java DTrace http://opencore.jinspired.com/?page_id=190 –
La soluzione migliore è quella di utilizzare un profiler - questo è quello che sono costruiti per, e c'è un grande in bundle con Java 6.
Altro (lungi dall'essere come ideale una soluzione) è quello di eseguire il programma nell'IDE di Eclipse (se è quello che si usa) in modalità di debug. Puoi quindi guardare i thread in esecuzione. SE molti di loro sono sospesi, quello che non è potrebbe essere il tuo colpevole. Forza l'interruzione (dalla barra degli strumenti) e puoi vedere dove si trova. Ci sono molte possibilità che troverai un ciclo chiaro o occupato in attesa.
- 1. In che modo un EJB può parallelizzare un processo lungo e ad alta intensità di CPU?
- 2. Gestione memoria per applicazioni ad alta intensità di memoria
- 3. utilizzo della CPU ad alta nanosleep?
- 4. Quale linguaggio di programmazione per la simulazione del portafoglio di trading ad alta intensità di calcolo?
- 5. Glassfish - alta CPU usge
- 6. Aggiornamento efficiente di una QTableView ad alta velocità
- 7. Strategie comuni per gestire gli errori di arrotondamento in caso di soft ad alta intensità di valuta?
- 8. Prestazioni VS scadenti - CPU alta su IsAssertEtwEnabled
- 9. Come nascondere automaticamente una porzione di torta ad alta risoluzione
- 10. Trovare una classe di enumerazione utilizzando Reflection in Java
- 11. Come inviare un GCM ad alta priorità?
- 12. Immagini ad alta risoluzione in un'interfaccia utente
- 13. Come trovare un'istanza di classe in una JVM in esecuzione
- 14. C# calcoli ad alta precisione
- 15. Schermata ad alta risoluzione in Android
- 16. QPainter prestazioni ad alta frequenza di fotogrammi
- 17. Come posso trovare i riferimenti di una classe in Eclipse?
- 18. Controllo grafico ad alta densità Silverlight
- 19. Stack di tecnologia ad alta scalabilità
- 20. Algoritmi di corrispondenza stringa ad alta velocità
- 21. CPU alta in redis 2.8 (elasticache) cache.r3.large
- 22. Come lavoro con decimali ad alta precisione in PHP
- 23. Tyrus - semplice applicazione java - Impossibile trovare una classe di implementazione
- 24. Tempo di sistema ad alta precisione in python
- 25. Come creare una classe dinamicamente in java
- 26. Come trovare il numero di CPU in Go lang?
- 27. Controlli di intensità FlashLED
- 28. Trading ad alta frequenza in JVM con Scala/Akka
- 29. Cartelle disegnabili per palmari ad alta risoluzione
- 30. Localizzazione geografica ad alta precisione Html5
In generale, una classe non sta sovraccaricando la macchina, potrebbe essere un metodo particolare. – Uri