Chinaunix首页 | 论坛 | 博客
  • 博客访问: 279229
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 452
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-22 17:07
个人简介

心态决定命运

文章分类

全部博文(73)

文章存档

2017年(21)

2016年(27)

2015年(21)

2014年(4)

我的朋友

分类: 系统运维

2016-07-20 09:09:11



转自://

今日对线上tomcatjstack时发现如下异常


点击(此处)折叠或打开

  1. Unable to open socket file: target process not responding or HotSpot VM not loaded

原因分析
后来尝试不同的jdk版本发现tomcat1.6.24版本以下的jmap,jstack都无法操作,而在1.6.18版本可以执行jmap,jstack.


jvm运行时会生成一个目录hsperfdata_$USER($USER是启动java进程的用户),linux中默认是/tmp,目录下会有些pid文件,存放jvm进程信息,jmap,jstack等工具会读取/tmp/hsperfdata_$USER下的pid文件获取连接信息.
知道这个原因后,我马上检查了/tmp/hsperfdata_root目录,果然没有pid对应的文件,但在$TOMCAT_HOME目录中的temp目录中有对应的文件.

解决方案

通过google与实验,发现以下三种方式均可解决问题

1.      从报错信息中我们可以看到,由于java进程的pid文件删除了,所以工具找不到对应的文件,但为什么会被删除呢?这是由于linux操作系统为了防止/tmp目录文件过多,有个删除管理机制tmpwatch,我们查看这个文件


点击(此处)折叠或打开

  1. vim /etc/cron.daily/tmpwatch

点击(此处)折叠或打开

  1. 3
  2. 4
  3. 5
  4. flags=-umc
  5. /usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
  6.     -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
  7.     -X '/tmp/hsperfdata_*' 30d /tmp
  8. /usr/sbin/tmpwatch "$flags" 720 /var/tmp
  9. for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
  10.     if [ -d "$d" ]; then
  11.     /usr/sbin/tmpwatch "$flags" -f 720 "$d"
  12.     fi
  13. done
      这里第四行是新增的,表示系统每天会用tmpwatch命令检查并删除/tmp下超过30天未访问的文件和目录.
      2.修改tomcat的Djava.io.tmpdir参数,统一使用/tmp目录,修改catalina.sh添加CATALINA_TMPDIR=/tmp即可


3.      修改tomcatDjava.io.tmpdir参数,统一使用/tmp目录,修改catalina.sh添加CATALINA_TMPDIR=/tmp即可.3.     
这里第四行是新增的,表示系统每天会用tmpwatch命令检查并删除/tmp下超过30天未访问的文件和目录.

4.      最后一种就是升级至java 6 update 25,java 7是否有此问题并没有验证,毕竟开发与生产环境都是java 6,有兴趣的朋友可以尝试后给我留言.

 



阅读(1839) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~