Analyse van de threads
Volg de stappen en de beste praktijken in dit artikel worden gedetailleerd om AEM Java met succes te analyseren draaddumps gebruikend het 🔗 hulpmiddel van de Analysator van de Verbinding van 0} IBM {.
Beschrijving description
Milieu
Adobe Experience Manager
Uitgave
Hoe te om AEM Java draaddumps te analyseren gebruikend het hulpmiddel van de Analysator van de Draad van IBM?
Resolutie resolution
-
De download en installeert Analysator van de Draad van IBM(wij zullen het IBM TDA voor kort roepen).
-
Vang draaddumpsvan een AEM instantie die prestatieskwesties ervaren.
-
Open de thread dumps in IBM TDA.
-
Om de details van een draadstortplaats te bekijken, selecteer het dossier in de lijst, dan klik de knoop van het Detail van de Verbinding .
-
De soort door Diepte van de Stapel met langste stapels bovenop.
-
Bekijk de threads met een stapeldiepte van 10 lijnen of langer. Â Dat zijn meestal de draden van het grootste belang.
Neem nota van draden die van belang zijn.
-
De soort door draad Staat .
-
De rol neer aan de Runable draden. De in werking stellen draden zijn degenen die actief de tijd van cpu gebruikten toen de draadstortplaats werd genomen.
Nota: Wanneer het herzien van Runnable draden, kunt u draden negeren die in Threads worden vermeld die sectie bij de bodem van deze pagina kunnen worden genegeerd.
-
Zoek runable draden die deel van de toepassing, bijvoorbeeld, draden van de achtergrondbaan of verzoekdraden uitmaken (verzoekdraden hebben namen als dit - 127.0.0.1
[
1347028187737]
GET /content/sites/global/en/sitemap.static-delivery.httpd.html HTTP/1.1).Als u ze hebt gevonden, klikt u er een voor een op.
-
Voor elke verzoekdraad, kunt u te weten komen wanneer browser van de gebruiker het verzoek aan de server door timestamp in de draadnaam te bekijken maakte.
Bijvoorbeeld, in de draadnaam hierboven, is timestamp (in milliseconde unix epoch formaat) 1347028187737.
Wij kunnen dat epochaantal in een datum/tijd omzetten gebruikend www.epochconverter.com.
Elke draadstortplaats toont de datum en de tijd toen het werd genomen.
U kunt het verschil in tijd tussen de verzoektijd en de tijd van de draadstortplaats nemen om te zien hoe lang een verzoek actief is geweest voor.
-
Na het herzien van de verzoekdraden, scrol door andere Runable draden.
Zodra u een Runnable draad van rente hebt gevonden, dan bekijk het middenpaneel, het Wachten draden .
Threads die daar wordt vermeld wacht op de geselecteerde draad om een monitor vrij te geven.
Als u geen wachtende draden ziet, dan zou uw geselecteerde draad nog de eigenaar van a Slot(zie het uitvoeren van klassen van Slotvoor details) kunnen zijn.
Bijvoorbeeld, met a ReentrantReadWriteLockkunt u niet vertellen welke draad de slothouder is aangezien de sloten veelvoudige monitors intern uitvoeren.
Zo zou u de broncode kunnen moeten bekijken om het met een draad aan te passen die de slothouder zou kunnen zijn.
-
Als de draad een slot had of monitor dat vele andere draden op wachtten, dan ga door de rest draaddumps om te zien of kunt u andere draden vinden die de zelfde kwestie hebben.
Zie als de zelfde draad nog in de andere dumps (in IBM TDA bestaat kunt u veelvoudige draaddumps selecteren en klikken vergelijk Threads knoop om de staat van een draad over veelvoudige draaddumps te bekijken.
-
Zie de Dienst van de Collector in het hieronder ontsproten scherm:
-
In deze mening kunt u de draad over veelvoudige draaddumps zien om te zien of is het een lange lopende draad.
Basistatief als de draad in de Runable staat over veelvoudige dumps is en een lange stapel heeft, dan betekent dat gewoonlijk het een lange lopende draad is.
-
Als u niet veel het kijken naar Runable draden vond, dan ga terug naar de draadlijst, selecteer een draadstortplaats, dan klik op Gedetailleerde knoop van de Monitor op het hoogste paneel.
IBM TDA opent een venster dat een boomstructuurmening toont van monitor die draden en hun wachtende draden bezitten.
Nota: Het zou sommige draden van de draadpool, zoals de monitor van de de draaddraad van de servletmotor kunnen tonen, nutteloze draden zouden kunnen worden genegeerd.
U kunt gewoonlijk vertellen een draad een nutteloze draad van de draadpool is omdat het grootste deel van de tijd zij slechts 10 stapellijnen of minder hebben.
Het gebruik van cpu van het het niveauniveau van de Verbinding (het platform van Linux slechts) :
-
Als u
top -H -b -n1 -p <javapid>
output naast draaddumps gevangen, dan kunt u het draad-vlakke gebruik van cpu van verwijzingen voorzien.Open de bovenste uitvoer en ontvang de proces-id van de threads die de CPU gebruiken.
Zet procesidentiteitskaart in hexadecimaal om, dan onderzoek naar die hexadecimale waarde in het overeenkomstige dossier van de draadstortplaats.
Identiteitskaart zou nid van één van de draden moeten aanpassen.
-
Als de passende draad die meeste cpu gebruikt de draad van VM of om het even welke GC draden is dan zou u een geheugenkwestie kunnen hebben.
Herhaal de zelfde oefening voor meer draaddumps en hoogste output, en als er een patroon van deze draden die de tijd van cpu nemen is, hebt u een geheugenkwestie.
-
Als u het geheugenprobleem hebt bevestigd, legt u de volgende keer dat het probleem optreedt een heapdump vast.
Zie dit artikel van de Problemen van het Geheugen analyserenvoor meer details bij het vangen van en het analyseren van heapdumps.
Threads die kan worden genegeerd :
- VM-thread: dit is een VM-systeemthread.
- Threads die met GC taakdraad begint: Dit zijn vuilnisthreads.
- Threads met namen vergelijkbaar met
- [ 1347028691218]  in code at java.net.PlainSocketImpl.socketAccept(Native Method)
: dit zijn threads van de thread-pool van de servlet-engine die op nieuwe verbindingen wachten.