关于java:解决jstack的报错Unable-to-open-socket-file

88次阅读

共计 774 个字符,预计需要花费 2 分钟才能阅读完成。

原文网址:​​解决 jstack 的报错:Unable to open socket file_IT 利刃出鞘的博客 -CSDN 博客​​

简介

阐明

本文介绍解决 jstack 的报错的办法,报错信息为:Unable to open socket file。

分享 Java 技术星球:​​自学精灵 – IT 技术星球​​

具体报错信息:

过程号: 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

概述

咱们通常会用 jstack、jmap 等工具排查 CPU 占用高、内存占用低等问题。但在应用这些命令时有时会报错,如下所示:

起因及解决方案

1. 用户权限不正确

起因

如果执行 java 程序的用户与执行 jstack 命令的用户不统一,会导致报错。

解决方案

切换到执行 java 程序的那个用户再执行 jstack 命令。

办法

第一步:查找 java 过程对应的用户(命令为:ps -aux | grep “ 过程号 ”)

例:

第二步:应用 su 命令切换到对应用户

su root

2./tmp 门路没有过程信息

起因

java 过程启动的时候,默认会在 /tmp/hsperfdata_$USER 上面创立一个以 PID 命名的文件,外面蕴含了一些信息,会被 jstack、jmap 命令应用到。当文件不存在时就会报上述谬误。

导致 /tmp 下没有相干文件的起因有:

  1. 应用了 docker 来启动
  2. 应用了 systemd 来启动(systemd 用于监控过程状态)

解决方案

  • 如果是应用了 docker 来启动

<!—->

  • 解决办法:须要进入到容器中去执行 jstack 命令。

<!—->

  • 如果是应用了 systemd 来启动

<!—->

  • 解决办法:批改一项配置:PrivateTmp=true 改为 false

正文完
 0