Analisi delle immagini thread di AEM

Segui i passaggi e le best practice descritti in questo articolo per analizzare correttamente le immagini thread Java AEM utilizzando IBM Thread Analyzer strumento.

Descrizione description

Ambiente

Adobe Experience Manager

Problema

Come analizzare le immagini thread Java dell’AEM utilizzando IBM Thread Analyzer strumento?

Risoluzione resolution

  1. Scarica e installa IBM Thread Analyzer (IBM TDA in breve).

  2. Acquisisci le immagini thread da un’istanza AEM che presenta problemi di prestazioni.

  3. Apri le immagini thread in IBM TDA.

  4. Per visualizzare i dettagli di un’immagine thread, seleziona il file nell’elenco, quindi fai clic su Dettagli thread pulsante.

  5. Ordina per Profondità stack con gli stack più lunghi in cima.

  6. Esamina i thread con profondità dello stack pari a 10 righe o superiore.  Di solito sono i thread di maggiore interesse.

    Prendere appunti sui thread di interesse.

  7. Ordina per thread Stato.

  8. Scorri verso il basso fino a Eseguibile thread. I thread eseguibili impiegano attivamente il tempo della CPU quando si acquisiscono immagini thread.

    Nota: quando si rivede Eseguibile thread, è possibile ignorare i thread elencati nella  Threads che può essere ignorato  nella parte inferiore della pagina.

  9. Trova i thread eseguibili che fanno parte dell’applicazione, ad esempio i thread di processi in background o i thread di richiesta (questi ultimi hanno nomi simili al seguente:  127.0.0.1 [ 1347028187737] GET /content/sites/global/en/sitemap.static-delivery.httpd.html HTTP/1.1).

    Dopo averli individuati, dai clic su ognuno di essi.

  10. Per ogni thread di richiesta, puoi scoprire quando il browser dell’utente ha effettuato la richiesta al server osservando la marca temporale nel nome del thread.

    Ad esempio, nel nome del thread qui sopra, la marca temporale (in formato epoca Unix in millisecondi) è  1347028187737.

    È possibile convertire l’epoca in data e ora utilizzando www.epochconverter.com.

    Ogni immagine thread mostra la data e l’ora in cui è stata acquisita.

    Puoi prendere in considerazione la differenza tra il tempo della richiesta e il tempo di immagine del thread per vedere per quanto tempo una richiesta è stata attiva.

  11. Dopo aver esaminato i thread di richiesta, scorri l’altro Eseguibile thread.

    Una volta trovato un thread di tuo interesse, osserva il pannello centrale, Thread in attesa.

    In Threads sono elencati casi in attesa che il thread selezionato rilasci un monitor.

    Se non sono presenti thread in attesa, il thread selezionato potrebbe essere ancora proprietario di un Blocca (vedere implementazione delle classi di Blocca per i dettagli).

    Ad esempio, con un ReentrantReadWriteLock non è possibile stabilire quale thread sia il titolare del blocco, poiché i blocchi implementano più monitor internamente.

    Potrebbe quindi essere necessario esaminare il codice sorgente per stabilire una corrispondenza con un thread che possa essere il titolare del blocco.

  12. Se il thread aveva un blocco o un monitor su cui molti altri thread erano in attesa, scorri il resto delle immagini thread per vedere se è possibile trovare altri thread con lo stesso problema.

    Verifica se lo stesso thread esiste ancora nelle altre immagini. In IBM TDA puoi selezionare più immagini thread e fare clic su Confronta Threads per visualizzare lo stato di un thread in più immagini thread.

  13. Consulta la Servizio Raccolta nella schermata seguente:

  14. In questa vista puoi vedere il thread in più immagini thread per verificare se si tratta di un thread a esecuzione prolungata.

    Fondamentalmente, se il thread si trova nel  Eseguibile in più immagini e dispone di uno stack lungo, il che in genere significa che si tratta di un thread a esecuzione prolungata.

  15. Se non hai trovato molto da guardare il Eseguibile thread, quindi torna all’elenco dei thread, seleziona un’immagine thread, quindi fai clic su Dettagli monitor nel pannello superiore.

IBM TDA apre una finestra che mostra una struttura dei thread proprietari del monitor e dei relativi thread in attesa.

Nota: potrebbe visualizzare alcuni thread pool di thread, come il monitor del pool di thread del motore servlet; i thread inattivi potrebbero essere ignorati.

In genere è possibile affermare che un thread è un thread pool di thread inattivi perché la maggior parte delle volte presenta solo 10 righe di stack o meno.

Utilizzo della CPU a livello di thread (solo piattaforma Linux):

  1. Se hai acquisito top -H -b -n1 -p <javapid> oltre alle immagini thread, è possibile creare riferimenti incrociati all'utilizzo della CPU a livello di thread.

    Aprire l'output superiore e ottenere l'ID processo dei thread che utilizzano la CPU.

    Converti l’ID processo in esadecimale, quindi cerca tale valore esadecimale nel file dell’immagine thread corrispondente.

    L’ID deve corrispondere al valore nid di uno dei thread.

  2. Se il thread corrispondente che utilizza più CPU è il Thread VM o qualsiasi GC thread, potrebbe verificarsi un problema di memoria.

    Ripeti lo stesso esercizio per più immagini thread e output più alto. Se si verifica un modello che indica che questi thread richiedono tempo per la CPU, si verifica un problema di memoria.

  3. Se il problema è stato confermato, acquisisci un’immagine heap la prossima volta che si verifica.

    Vedi questo Articolo sui problemi di memoria da analizzare per ulteriori dettagli sull’acquisizione e l’analisi delle immagini heap.

Threads che può essere ignorato:

  • Thread VM: si tratta di un thread di sistema VM.
  • Thread che iniziano con il thread di attività GC: si tratta di thread di raccolta degli oggetti inattivi.
  • Threads con nomi simili a - [ 1347028691218]  in code at java.net.PlainSocketImpl.socketAccept(Native Method): si tratta di thread del pool di thread del motore servlet in attesa di nuove connessioni.
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f