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工具查看jvm线程的运行情况时出现上述错误。就是因为该进程长时间没有启停,在/tmp/hsperfdata_‘username’/文件夹下的该进程文件被Linux自身的机制(tmp下面不能存放很多文件)删除,需重新启停。所以要注意/etc/cron.daily/tmpwatch改文件在生产的情况。否则出现内存泄漏,或者内存溢出时,很难排查,或者出现系统运行缓慢时,想要观察系统运行情况也没办法,再或者,想把现场保存至dump文件中,等待大神解决也不能做。
解决办法:
转载:http://zhangshaoxiong.blog.51cto.com/4408282/1310166
对线上服务器的java应用dump操作时发现,以下报错,不能dump。jps也获取不到java进程的pid。
jmap -dump:file=/data/dump/jvm_en.hprof 20176
20176: 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
重启后,jps可以获得该java进程的pid,jstack也可以dump线程。
而tomcat:
jdk1.6.24版本下的,jps、jstack都无法操作
jdk1.6.18版本可以执行jps、jstack。
二、原因分析
jvm运行时会生成一个目录hsperfdata_ U S E R ( USER( USER(USER是启动java进程的用户),在linux中默认是/tmp。目录下会有些pid文件,存放jvm进程信息。
jps、jstack等工具读取/tmp/hsperfdata_ U S E R 下 的 p i d 文 件 获 取 连 接 信 息 。 2.1 j s t a c k 报 错 原 因 j s t a c k 报 错 : U n a b l e t o o p e n s o c k e t f i l e 。 是 因 为 这 个 j a v a 进 程 的 p i d 文 件 删 除 了 。 为 什 么 会 被 删 除 呢 ? 这 是 因 为 l i n u x 操 作 系 统 为 了 防 止 / t m p 目 录 文 件 过 多 , 有 个 删 除 管 理 机 制 : t m p w a t c h 。 查 看 关 键 配 置 / e t c / c r o n . d a i l y / t m p w a t c h : f l a g s = − u m c / u s r / s b i n / t m p w a t c h " USER下的pid文件获取连接信息。 2.1jstack报错原因 jstack报错:Unable to open socket file。是因为这个java进程的pid文件删除了。 为什么会被删除呢?这是因为linux操作系统为了防止/tmp目录文件过多,有个删除管理机制:tmpwatch。 查看关键配置/etc/cron.daily/tmpwatch: flags=-umc /usr/sbin/tmpwatch " USER下的pid文件获取连接信息。2.1jstack报错原因jstack报错:Unabletoopensocketfile。是因为这个<