Ich musste laufen jmap
, um einen Heap-Dump meines Prozesses zu erstellen. aber jvm
zurückgegeben:
Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
Also habe ich verwendet -F
:
./jmap -F -dump:format=b,file=heap.bin 10330
Attaching to process ID 10331, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.51-b03
Dumping heap to heap.bin ...
- Verwenden
-F
ist in Ordnung für Heap Dump? - Ich warte 20 Minuten und bin noch nicht fertig. Irgendwelche Ideen warum?
quelle
Genau wie ben_wing sagte, können Sie laufen mit:
(In meinem Fall ist der Benutzer
jboss-as
, aber Ihr könntejboss
oder ein anderer sein.)Aber es war nicht genug, weil es mich nach einem Passwort fragte (
[sudo] password for ec2-user:
), obwohl ich laufen konnte,sudo
ohne mich mit anderen Befehlen zur Eingabe eines Passworts aufzufordern.Ich habe hier die Lösung gefunden und musste erst eine hinzufügen
sudo
:Es funktioniert mit anderen Befehlen wie
jcmd
undjinfo
auch.quelle
sudo
rettet meinen Tag![root@v5 ~]# sudo sudo -u es jmap -dump:file=tmp.bin 26283
dreht Fehlersudo: jmap: command not found
. Ich habe bereits Java-Pfad in .bash_profile konfiguriert, was soll ich tun.es
Benutzer ausgeführt werden, das.bash_profile
nicht angewendet wird (weil das Bash-Profil mit Ihrem Benutzer zusammenhängt, nehme ich an). Ich rate den Java - Pfad in einer globaleren Art und Weise aufzunehmen, oder vielleicht den Java - Pfad in dem Befehl angeben, wiesudo sudo -u es PATH="$PATH:/java/path" jmap -dump:file=tmp.bin 26283
(wo/java/path
der Java - Pfad ist, und stellen Sie sicher , dass esjmap
darin ).sudo sudo -u es /usr/java/jdk1.8.0_181-cloudera/bin/jmap -dump:file=tmp.bin 26283
funktioniert. Danke vielmals.Wenn Ihre Anwendung als systemd-Dienst ausgeführt wird. Sie sollten die Dienstdatei öffnen, die unter Ihrem Dienstnamen steht
/usr/lib/systemd/system/
und nach diesem benannt ist. Überprüfen Sie dann, ob das Attribut privateTmp wahr ist.Wenn dies der Fall ist, sollten Sie es in false ändern und den Dienst dann wie folgt mit dem Befehl
systemctl daemon-reload systemctl restart [servicename]
aktualisieren : Wenn Sie jmap / jcmd vor dem Neustart ausführen möchten, können Sie das execStop-Skript in der Dienstdatei verwenden. Geben Sie einfach den Befehl ein und führen Sie ihn aussystemctl stop [service name]
quelle