Мне пришлось запустить jmap
, чтобы снять дамп моего процесса. но jvm
вернулся:
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
Итак, я использовал -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 ...
- Использование
-F
является Allright для принятия дамп кучи? - Жду 20 минут и еще не закончил. Есть идеи, почему?
источник
Как сказал ben_wing , вы можете работать с:
(в моем случае это пользователь
jboss-as
, но может быть вашjboss
или другой.)Но этого было недостаточно, потому что он запрашивал у меня пароль (
[sudo] password for ec2-user:
), хотя я мог работатьsudo
без запроса пароля с другими командами.Я нашел решение здесь , и мне просто нужно было
sudo
сначала добавить еще одно :Он работает с другими командами, такими как
jcmd
иjinfo
.источник
sudo
спасает мне день![root@v5 ~]# sudo sudo -u es jmap -dump:file=tmp.bin 26283
получается ошибкаsudo: jmap: command not found
. Я уже настроил путь java в .bash_profile, что мне делать.es
пользователь,.bash_profile
не применяется (потому что профиль bash связан с вашим пользователем, я полагаю). Я советую включить путь java более глобальным способом или, возможно, указать путь java в команде, напримерsudo sudo -u es PATH="$PATH:/java/path" jmap -dump:file=tmp.bin 26283
(где/java/path
находится путь java, и убедитесь, что он естьjmap
в нем ).sudo sudo -u es /usr/java/jdk1.8.0_181-cloudera/bin/jmap -dump:file=tmp.bin 26283
работает. Большое спасибо.Если ваше приложение работает как служба systemd, вы должны открыть служебный файл, который находится под
/usr/lib/systemd/system/
именем вашей службы и назван по нему. Затем проверьте, есть ли privateTmp атрибут .Если это правда, вы должны изменить его на false, а затем обновить службу с помощью следующей команды:
systemctl daemon-reload systemctl restart [servicename]
Если вы хотите запустить jmap / jcmd перед перезапуском, вы можете использовать сценарий execStop в служебном файле. Просто введите в него команду и выполнитеsystemctl stop [service name]
источник