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_$USER($USER是启动java进程的用户),在linux中默认是/tmp。目录下会有些pid文件,存放jvm进程信息。

jps、jstack等工具读取/tmp/hsperfdata_$USER下的pid文件获取连接信息。

2.1jstack报错原因

jstack报错:Unable to open socket file。是因为这个java进程的pid文件删除了。

为什么会被删除呢?这是因为linux操作系统为了防止/tmp目录文件过多,有个删除管理机制:tmpwatch。

查看关键配置/etc/cron.daily/tmpwatch:

flags=-umc /usr/sbin/tmpwatch "$flags"

-x /tmp/.X11-unix -x /tmp/.XIM-unix \

-x /tmp/.font-unix -x /tmp/.ICE-unix

-x /tmp/.Test-unix 240 /tmp /usr/sbin/tmpwatch "$flags" 720 /var/tmp

for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?};

do if [ -d "$d" ]; then /usr/sbin/tmpwatch "$flags" -f 720 "$d" fi done

系统每天会用tmpwatch命令检查并删除 /tmp 下超过240小时未访问过的文件和目录。

2.2高版本jps、jstack不能工作原因

这是一个从Java 6 update 21 引入的bug sunbug 7009828,在Java 6 update 25修复。具体原因是:

jdk16_21/24开始,jvm启动时产生进程号的临时文件目录优先使用-Djava.io.tmpdir指定的目录,没有指定-Djava.io.tmpdir参数才使用/tmp/hsperfdata_$USER。

正好tomcat指定了-Djava.io.tmpdir=${tomcat_home}/tmp/。而jps、jstack从/tmp/hsperfdata_$USER目录读取不到pid信息,所以才报错。

三、解决办法
3.1 修改tmpwatch设置

排查对应的/tmp/hsperfdata_*的目录,让jvm自己来管理,保证jps,jstat等命令可用。

修改/etc/cron.daily/tmpwatch

/usr/sbin/tmpwatch "$flags" -x /tmp/hsperfdata_* -x /tmp/.X11-unix -x /tmp/.XIM-unix

-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp

3.2 修改tomcat配置或者升级jdk

1)修改tomcat的Djava.io.tmpdir参数,统一使用/tmp目录。

修改catalina.sh添加

CATALINA_TMPDIR=/tmp

重启tomcat

2)升级jdk到Java 6 update 25.

3.3 其他java程序重启

重启java进程,重新生成pid文件。

参考URl:

1. http://pt.alibaba-inc.com/wp/experience_382/java-long-running-jps-tools-such-as-a-solution-can-not-connect-jvm-2.html

2. http://underlap.blogspot.com/2011/03/java-update-breaks-jps-jconsole-etc.html

另外说明:

1、在JDK 64bit 1.7.0_01版本也出现了这个问题。

2、在CentOS6以后,/etc/cron.daily/tmpwatch有所改变

#! /bin/sh

flags=-umc

/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \

-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \

-X ‘/tmp/hsperfdata_*‘ 10d /tmp

/usr/sbin/tmpwatch "$flags" 30d /var/tmp

for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do

if [ -d "$d" ]; then

/usr/sbin/tmpwatch "$flags" -f 30d "$d"

fi

done

上面红色字体就是新加入的。

目录/etc/cron.daily/,这个目录是每天执行一次计划任务的目录,所以说,如果设置了比一天更短的清理时间,它是不起作用的。

时间: 2024-10-09 12:09:48

Unable to open socket file: target process not responding or HotSpot VM not loaded的相关文章

Turbo C 编程中“Unable to open include file 'stdio.h'”问题的解决

问题: 初学Turbo C,不知道为什么,每次写完一个程序要编译的时候,总出现Error: c:/**/**.c   Unable to open include file 'stdio.h'  为什么每次都打不开“stdio.h"呢?我看过了,它在Include文件下,好好的呀.也试过把下载并安装的其它的TurboC的Stdio.h文件 复制过来,还是没用... 解决方法: include <stdio.h>表示搜索stdio.h这个文件的路径在option中指定的位置 inclu

记一次DG搭建过程中ORA-09925: Unable to createaudit trail file 错误

今天做Oracle DG  编写initorcl的时候,修改完以后,sqlplus就不能再登陆,一直报 ERROR: ORA-09925: Unable to createaudit trail file Linux Error: 2: No such file ordirectory Additional information:9925 ORA-01075: you are currentlylogged on 一直找不到原因,后来在网上偶然找到个帖子说了这样一个情况,试了下,果然有效 [o

Sqlite: unable to open database file

A database connect, there updated both queries (different statement, and regardless of order), after completing the implementation, not close, will have an extension called s3db-journal of the (temporary) file, if the use of the connect again the upd

Unable to load template file &#39;rj\ThinkPHP/Tpl/dispatch_jump.tpl&#39;----thinkphp3.2.3

Unable to load template file 'rj\ThinkPHP/Tpl/dispatch_jump.tpl'----thinkphp3.2.3 1.报错原因:将thinkphp默认模板引擎改为smarty模板引擎,导致调用success()和error()方法失败. 2.解决方案一: 找到ThinkPHP\Library\Think\Controller.class.PHP文件中的protected function error()和protected function su

Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!

Eclipse 编译没问题,但是运行就出现这个报错:Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder! 这个报错是由于安卓的SDK版本太高导致的.两个解决方法,一个是直接使用Android studio,一个是删除高版本的构建包. 先看看报错情况: 如图提示,加载失败26.0.1,那么我们需要打开SDK管理器,并删除这几个包 删除后,重启Eclipse并Clean项目即可.

问题-FireDAC连接Sqlite3提示“unable to open database file”

相关资料:http://www.dfwlt.com/forum.php?mod=viewthread&tid=1497&extra= 问题现象:FireDAC连接Sqlite3在开发电脑上没有问题,但将程序放在XP上就提示“unable to open database file”(后来发现别的WIN7也不行). 问题原因:可能是因为字符串编码问题. 问题处理:在FDConnection1控件上双击,出现的设置中,必须设置二项,"OpenMode=CreateUTF8"

不要把file,process或者super权限授予管理员以外的账号

file权限的主要作用是通过select ....into outfile 写到服务器上具有写权限的目录下,作为文本格式存放,具有权限的目录也就是启动mysql时的用户权限目录.(没有理解) 可以将有读权限的文本文件通过load data infile 命令写入到数据库表,如果这些表中存放了很重要的信息,将对系统造成很大的安全隐患. process的权限能被用来执行show full processlist,查看当前所有用户执行的查询的明文文本,包括设定或改变密码的查询,在默认情况下,每个用户都

【android】 Unable to open content: file:///sdcard/hello.3gp 3gp视频不能播放

[报错] sd卡对应路径中已放置相关视频,但运行还是会报下面的错误: VideoView: Unable to open content: file:///sdcard/hello.3gp java.io.FileNotFoundException: /sdcard/hello.3gp: open failed: EACCES (Permission denied) at libcore.io.IoBridge.open(IoBridge.java:452) at java.io.FileInp

解决:django.db.utils.OperationalError: unable to open database file

这是一个从GitHub上下载的,一个网站项目的源码.想要在自己的电脑上运行,期间过程相当曲折,不过至此终于是完成了. 1.安装过程: python2->virtualenv->django1.9.8 2.模块安装 pip install xadmin pip uninstall xadmin pip install django-simple-captcha pip install DjangoUeditor pip install Pillow 3.运行: python manage.py