Verbindingsdumpen maken van een JVM

Een draadstortplaats is een lijst van alle draden van Java die momenteel in een Virtuele Machine van Java (JVM) actief zijn. In dit artikel worden de verschillende manieren besproken waarop u thread-dumps kunt verkrijgen van een JVM in Adobe Experience Manager.

Beschrijving description

Omgeving

Adobe Experience Manager

Probleem/symptomen

Hoe te om draaddumps van JVM op Linux, UNIX, of Vensters te verkrijgen?

Een draadstortplaats is een lijst van alle draden van Java die momenteel in een Virtuele Machine van Java (JVM) actief zijn.

Er zijn verscheidene manieren om draaddumps van JVM te nemen. Het wordt hoogst geadviseerd om meer dan 1 draadstortplaats te nemen. Een goede praktijk is 10 draaddumps met een regelmatig interval (bijvoorbeeld, één draadstortplaats om de tien seconden) te nemen.

Resolutie resolution

Stap 1: De PID van uw Java-proces ophalen

Het eerste stuk informatie u een draadstortplaats zult moeten kunnen verkrijgen is PID van uw proces van Java.

De Java JDK wordt geleverd met de JPS-opdracht, die alle Java-procesid's opsomt. U kunt deze opdracht als volgt uitvoeren:

jps -l 70660 sun.tools.jps.Jps 70305

Opmerking: In Linux en UNIX moet u deze opdracht mogelijk uitvoeren als sudo -u user jps -l, waarbij "gebruiker" de gebruikersnaam is van de gebruiker waarop het Java-proces wordt uitgevoerd.

Als dit niet werkt of als u uw Java-proces nog steeds niet kunt vinden (pad niet ingesteld, JDK niet geïnstalleerd of oudere Java-versie), gebruikt u

  • UNIX, Linux en Mac OS X: ps -el | grep java
  • Windows: Druk op Ctrl+Shift+Esc om het taakbeheer te openen en de PID van het Java-proces te zoeken

Stap 2: Vraag een draadstortplaats van JVM aan

jstack

Indien geïnstalleerd/beschikbaar, raden we u aan de jstack gebruiken. Het drukt draaddumps aan de console van de bevellijn.

Om een draadstortplaats te verkrijgen die jstack gebruikt, stel het volgende bevel in werking:
jstack -l <pid>

U kunt opeenvolgende draaddumps aan een dossier uitvoeren door de consoleoutput te gebruiken omleiden/toevoegt richtlijn:
jstack -l <pid> >> threaddumps.log

Opmerkingen:

  • Het Jstack-gereedschap is beschikbaar vanaf JDK 1.5 (voor JVM in Windows is het alleen beschikbaar in sommige versies van JDK 1.5 en JDK 1.6).

  • jstack werkt zelfs als de -Xrs jvm-parameter is ingeschakeld

  • Het is niet mogelijk om het gereedschap Stapel van JDK 1.6 te gebruiken om threaddumps te nemen van een proces dat op JDK 1.5 loopt.

  • In Linux en UNIX, moet u het bevel als gebruiker in werking stellen die het java proces bezit:
    sudo -u java-user jstack -l <pid>

    (< java-gebruiker> moet worden vervangen door de id van de gebruiker die het Java-proces uitvoert zoals)

  • In Windows, als u jstack in werking stelt en de fout "Onvoldoende opslag is beschikbaar om dit bevel"te verwerken dan moet u jstack als gebruiker van het vensterensysteem of de gebruiker in werking stellen die het Java proces bezit. U kunt dit doen door psexec te gebruiken dat u kunt downloaden hier. Om jstack als gebruiker van het SYSTEEM in werking te stellen, gebruik een bevel als dit:

    psexec -s jstack <pid>   >> threaddumps.log

    Als u psexec niet op de server kunt installeren, dan kunt u een .bat dossier creëren dat het bevel bevat en het in werking stellen het gebruiken van de taakplanner van Vensters (als verschillende gebruiker).

  • Als het Java-proces niet reageert, kan het soms helpen om de optie te gebruiken -J-d64 (op 64-bits systemen), bijvoorbeeld:
    jstack -J-d64 -l   <pid>   >> threaddumps.log

  • Als de jstack-opdracht (jstack -l <pid> >> threaddumps.log) genereert de fout [ 1] Voer hieronder de opdracht uit als de gebruiker die eigenaar is van het Java-proces. Bijvoorbeeld:
    sudo -u sling jstack -l <pid> >> threaddumps.log

Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 22893: Operation not permitted

sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 22893: Operation not permitted

...

Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 22893: Operation not permitted

...

sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:138)

JSTACK-SCRIPT

Hier is een script (aangepast aan het eclipse.org) die een reeks draaddumps gebruikend jstack zal nemen. Het neemt ook het cpu gebruik van het draadniveau gebruikend hoogste bevel.

Voer het als volgt uit:

sudo -u <user> jstackSeries.sh
<pid> <aemserveruser> <count> <delay>

Bijvoorbeeld: sudo -u aemuser jstackSeries.sh 1234 aemserveruser 10 3

  • 1234 is de betaler van het Java-proces
  • cq5serveruser is de gebruiker van Linux of van UNIX die het proces van Java zoals loopt
  • 10 is hoeveel draaddumps u moet nemen
  • 3 is de vertraging tussen elke stortplaats

Opmerking: De bovenste uitvoer heeft de native thread-id in decimale notatie, terwijl de stapeluitvoer het knooppunt in hexadecimale notatie heeft. U kunt de hoge cpu draad van de hoogste output aan de stapeloutput aanpassen door draad identiteitskaart in hexadecimaal om te zetten.

Naast het bovenstaande script hebben we ook een vergelijkbare Windows Powershell-script en een Adobe AEM specifiek script op github.

Alternatieve manieren om een Thread Dump te verkrijgen

Als de jstack is niet beschikbaar, kunt u als volgt draaddumps nemen:

Opmerking: Sommige gereedschappen kunnen geen thread-dumps vanuit JVM gebruiken als de opdrachtregelparameter -Xrs is ingeschakeld. Als u problemen ondervindt met het gebruik van thread dumps, controleert u of deze optie is ingeschakeld.

UNIX, Mac OS X en Linux (JDK 1.4 of lagere versie)

Op UNIX, Mac OS X, en Linux, kunt u een signaal van de IT naar het proces van Java verzenden om het te vertellen om een draadstortplaats aan standaardoutput uit te voeren.

  1. Voer deze opdracht uit om dit te doen:
    kill -QUIT <pid>

    Mogelijk moet u deze opdracht uitvoeren als sudo -u user kill -QUIT <pid> waarbij "gebruiker" de gebruiker is waarop het Java-proces wordt uitgevoerd.

  2. Als u CQSE begint met het crx-quickstart/server/start script, dan worden uw thread-dumps uitgevoerd naar crx-quickstart/server/logs/startup.log. Als u een server van de derdetoepassing zoals JBoss, WebSphere, Tomcat, of andere gebruikt, zie de documentatie van de server om te weten te komen aan welk dossier de standaardoutput wordt geleid.

Windows:

JDK 1.X

  1. Download javadump.exe (zie hieronder).
  2. Start de JVM met deze drie argumenten (deze moeten in de juiste volgorde staan):
    -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile= C:\temp\jvmoutput.log
  3. Druk op Ctrl+Shift+Esc om Taakbeheer te openen.
  4. De PID van het Java-proces zoeken.
  5. Voer vanaf de opdrachtregel de volgende handelingen uit: javadump.exe   <pid>
  6. De draadstortplaats zal in verschijnen jvmoutput.log in stap 2 vermelde bestand.

JDK 1.6

Krijg een draadstortplaats van jconsole met een plug-in: [ 0]

Hier is hoe u een draadstortplaats kunt verzoeken:

  1. Voeg de volgende parameter toe aan de JVM die Communique in werking stelt:
    Dcom.sun.management.jmxremote
  2. Download en installeer JDK 1.6 (als dit nog niet is gebeurd).
  3. Download en extraheer de Hulpprogramma Thread Dump Analyzer. [ 1]
  4. Uitvoeren jconsole.exe van JDK 1.6:
    jconsole.exe -pluginpath /path/to/file/tda.jar
  5. Klik op de knop Draad-dumpen tab.
  6. Klik op de knop Dumping met verbindingen aanvragen koppeling.

Opmerking: Als u AEM 6.x in werking stelt en de lopende draden wilt waarnemen, kunt u verzoeken http://<host>:<port>/system/console/status-Threads om een draadlijst te krijgen. Nochtans, gelieve te merken op dat deze draaddumps niet met de analysehulpmiddelen van de draadstortplaats zoals samurai of tda zullen werken.

Van toepassing op:

Alle producten van de Adobe die in een JVM lopen

Hulpprogramma's voor Thread-dump

[ 0] PsExec v2.42 in Sysinternals in Microsoft documentatie.

[ 1] TDA - Thread Dump Analyzer op de website van irockel: Github.com.

[ 2] Java Thread Dump Analyzer op FastThread.

[ 3] IBM Thread and Monitor Dump Analyzer voor Java op IBM Support Assistant Documentation.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f