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.
-
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. -
Als u CQSE begint met het
crx-quickstart/server/start
-script, worden de thread-dumps uitgevoerd naarcrx-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
- Download javadump.exe (zie hieronder).
- Start de JVM met deze drie argumenten (deze moeten in de juiste volgorde staan):
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile= C:\temp\jvmoutput.log
- Druk op Ctrl+Shift+Esc om Taakbeheer te openen.
- De PID van het Java-proces zoeken.
- Voer vanaf de opdrachtregel het volgende uit:
javadump.exe <pid>
- 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:
- Voeg de volgende parameter toe aan de JVM die Communique in werking stelt:
Dcom.sun.management.jmxremote
- Download en installeer JDK 1.6 (als dit nog niet is gebeurd).
- De download en haalt het nut van de Analysator van de Stortplaats van de Thread.
[
1]
- Voer
jconsole.exe
van JDK 1.6 uit:jconsole.exe -pluginpath /path/to/file/tda.jar
- Klik de dumps van de Draad tabel.
- 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.