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

Milieu

Adobe Experience Manager

Uitgave/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

Nota: In Linux en UNIX, kunt u dit bevel als sudo -u user jps -l in werking moeten stellen, waar "gebruiker"de gebruikersbenaming van de gebruiker is die het proces van Java zoals loopt.

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, adviseren wij gebruikend het jstack hulpmiddel. 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

Nota's:

  • 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 parameter -Xrs jvm 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-user > zou met identiteitskaart van de gebruiker moeten worden vervangen dat het proces van Java zoals loopt)

  • 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 hierkunt downloaden. Om jstack als gebruiker van het SYSTEEM in werking te stellen, gebruik een bevel als dit:

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

    Als u geen psexec op de server kunt installeren, dan kunt u een .bat dossier tot stand brengen dat het bevel bevat en het in werking stelt gebruikend de de taakplanner van Vensters (als verschillende gebruiker).

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

  • Als het jstack bevel (jstack -l <pid> >> threaddumps.log) de fout [ 1 ] hieronder werpt, dan stel het bevel als gebruiker in werking die het java proces bezit. 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 a manuscript(aangepast van op eclipse.org) dat 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 pid van het proces van Java
  • cq5serveruser is Linux of de gebruiker van UNIX die het proces van Java als looppas
  • 10 is hoeveel draaddumps te nemen
  • 3 is de vertraging tussen elke stortplaats

Nota: de hoogste output heeft inheemse draad identiteitskaart in decimaal formaat terwijl de jstack output het eind in hexadecimaal 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 manuscript hierboven, hebben wij ook gelijkaardige Powershell van Vensters manuscript en een Adobe AEM specifiek manuscript op github.

Alternatieve manieren om een Thread Dump te verkrijgen

Als het jstack hulpmiddel niet beschikbaar aan u is, dan kunt u draaddumps als volgt nemen:

Nota: sommige hulpmiddelen kunnen draaddumps van JVM niet nemen als de bevellijnparameter -Xrs wordt toegelaten. 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, worden de 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 het volgende uit: javadump.exe   <pid>
  6. De draadstortplaats zal in het jvmoutput.log dossier verschijnen dat in stap 2 wordt vermeld.

JDK 1.6

Krijg een draadstortplaats van jconsole hulpmiddel, door een stop te gebruiken: [ 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. De download en haalt het nut van de Analysator van de Stortplaats van de Thread. [ 1 ]
  4. Voer jconsole.exe van JDK 1.6 uit:
    jconsole.exe -pluginpath /path/to/file/tda.jar
  5. Klik de dumps van de Draad tabel.
  6. Klik de verbinding van de Dump van de Verbinding van het Verzoek .

Nota: als u AEM 6.x in werking stelt en de lopende draden wilt waarnemen, kunt u http://<host>:<port>/system/console/status-Threads verzoeken 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.

is op van toepassing:

Alle producten van de Adobe die in een JVM lopen

Hulpprogramma's voor Thread-dump

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

[ 1 ] TDA - de Analysator van de Dump van de Dunop irockel/tda op Github.com.

[ 2 ] de Analysator van de Dump van de Dun van de Verbinding van Javaop FastThread.

[ 3 ] de Schakelaar van IBM en de Analysator van de Reliëf van de Monitorvoor Java op de Hulp van de Steun van IBM Documentatie.

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