jmap、jstack、jps无法连接jvm解决办法
转载 http://blog.51cto.com/zhangshaoxiong/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:
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/,这个目录是每天执行一次计划任务的目录,所以说,如果设置了比一天更短的清理时间,它是不起作用的。
jmap、jstack、jps无法连接jvm解决办法的更多相关文章
- mstsc 终端服务器超出了最大允许连接的解决办法
终端服务器超出了最大允许连接的解决办法 win7系统:运行,输入mstsc /v xxx.xxx.xxx.xxx /admin win2003系统:运行,输入mstsc /v xxx.xxx.xx ...
- win7 64位系统 pl/sql 无法解析指定的连接标识符解决办法
我用的是win764位,装好后,装了pl/sql 和toad,都连不上数据库,报错位“无法解析指定的连接标识符” 解决办法,经过研究发现安装目录有问题.默认会安装在“C:\Program Files ...
- 基于ORA-12170 TNS 连接超时解决办法详解
转自原文 基于ORA-12170 TNS 连接超时解决办法详解 1.开始----程序-----Oracle------配置和移植工具-----Net Manager----本地----服务命名---o ...
- SQL 2008无法连接的解决办法
问题: 在从本地客户端连接到SQL 2008的时候出现无法连接的错误.错误信息如下所示:
- KVM使用virsh console无法连接的解决办法(转)
一.问题描述: KVM中宿主机通过console无法连接客户机,卡在这里不动. # virsh console vm01 Connected to domain vm01 Escape charact ...
- LNK2005 连接错误解决办法
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@ ...
- [DBNETLIB][ConnectionOpen(Invalid Instance())] 无效的连接 的解决办法
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data Source=192.168.1.28,1433 连接SQL serve ...
- 64位Win7系统下vs2010调试无法连接oracle解决办法
具体的解决办法如下: 1.先将WebDev.WebServer20.EXE和WebDev.WebServer40.EXE文件从Program Files (x86)目录中拷贝出来放到c:\dev目录中 ...
- Linux宝塔面板FTP无法连接的解决办法,跳坑实例
宝塔面板的ftp无法使用解决 先检查这些内容 1.注意内网IP和外网IP 2.检查ftp服务是否启动 (面板首页即可看到) 3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000 ...
随机推荐
- (8)视图层参数request详解
PS:浏览器页面请求的都是get请求 PS:post请求是通过form表单,阿贾克斯发 request里面的常用方法 def index(request): print(request.META) # ...
- windows server 2008 R2无法共享文件夹,无法启用网络发现。
问题描述:在局域网内两台window server 2008 R2服务器上设置共享文件夹,如要再网络中可以看到文件夹,需要开启“网络发现” 但是即使打开了“网络发现”,当重新打开“高级共享设置”的时候 ...
- Linux命令对应英文全称
https://blog.csdn.net/yrc_note/article/details/72598780 拓展:https://blog.csdn.net/u010613363/article/ ...
- 如何取消noarch.rpm包
有一次部署zabbix服务器,不小心rpm -ivh zabbix的el7版本的rpm了,但是我的系统是centos6.5的,所以就尴尬了 rpm -ivh http://repo.zabbix.co ...
- Cassandra如何保证数据最终一致性
Cassandra如何保证数据最终一致性:1.逆熵机制(Anti-Entropy)使用默克尔树(Merkle Tree)来确认多个副本数据一致,对于不一致数据,根据时间戳来获取最新数据. 2.读修复机 ...
- 什么是数学 (R·柯朗 H·罗宾 著)
第1章 自然数 引言 $1 整数的计算 1. 算术的规律 2. 整数的表示 3. 非十进位制中的计算 $2 数学的无限性 数学归纳法 1. 数学归纳法原理 2. 等差级数 3. 等比级数 4. 前n项 ...
- 设置 sideload Outlook Add-ins
上期,我们讲到了用前端技术去建立一个outlook add-ins 我们今天来讲解一下怎样测试一个sideload outlook add-ins. 1. 我们需要登录Outlook在Office 3 ...
- python中a, b = a, a + b
python中a, b = a, a + b a = 0 b = 1 计算a, b = a, a + b,先计算赋值号右边的部分,即 a = 0, a + b = 0+1=1,然后再赋值给左边 也可以 ...
- AI大牛阿里VP贾扬清
贾扬清生长于浙江绍兴,2002年考入清华,并在清华拿到硕士学位,其后远赴UC伯克利获得博士学位. 2013年,贾扬清博士毕业加入之前就已实习了2年的Google,在Jeff Dean麾下任职,参与Te ...
- js对象的key类型
http://javascript.ruanyifeng.com/grammar/object.html#toc2 对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),所以加 ...