jps jstat 命令失效的问题

这里以hadoop的进程为例,大家看做是普通java进程即可

1.tmpwatch

man tmpwatch可以看到
tmpwatch是用来删除一些上时间未使用的临时文件
NAME
       tmpwatch  -  removes  files which haven’t been accessed for a period of
       time
OPTIONS
       -u, --atime
              Make  the  decision  about  deleting  a file based on the file’s
              atime (access time). This is the default.

              Note that the periodic updatedb file system scans keep the atime
              of directories recent.

       -m, --mtime
              Make  the  decision  about  deleting  a file based on the file’s
              mtime (modification time) instead of the atime.

       -c, --ctime
              Make the decision about deleting a  file  based  on  the  file’s
              ctime (inode change time) instead of the atime; for directories,
              make the decision based on the mtime.
       -d, --nodirs
              Do not attempt to remove directories, even if they are empty.

       -d, --nosymlinks
              Do not attempt to remove symbolic links.

这里重点看-umc和-d 参数         
-umc很清楚    访问,修改,创建时间
-d参数             不会删除子目录,即使是空的,也不会删除符号连接

2./etc/cron.daily/tmpwatch

cat /etc/cron.daily/tmpwatch可以看到定时执行的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

该任务每天执行一次
这里看到-umc同时被设置,如果同时被设置,那么取的是最大时间,时间以小时为单位
-x表示需要跳过的路径,这些路径不会被删除
想必大家看明白这段脚本了

3.jinfo

使用jinfo命令查看一个进程
jinfo 30352
结果如下
Attaching to process ID 30352, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.4-b02
Java System Properties:

java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = /usr/java/jdk1.6.0_29/jre/lib/amd64
java.vm.version = 20.4-b02
。。。。。。。。。。。。。。。。
file.encoding.pkg = sun.io
sun.java.launcher = SUN_STANDARD
user.country = US
sun.os.patch.level = unknown
java.vm.specification.name = Java Virtual Machine Specification
user.dir = /home/hadoop/hadoop
java.runtime.version = 1.6.0_29-b11
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
java.endorsed.dirs = /usr/java/jdk1.6.0_29/jre/lib/endorsed
os.arch = amd64
java.io.tmpdir = /tmp
line.separator = 
。。。。。。。。。。。。。。。。
。。。。。表示省略,其中注意红字部分
java.io.tmpdir = /tmp
这里表示java进程的临时输出目录
且会在/tmp/生成进程的pid文件,并且会生产/tmp/hsperfdata_用户名 目录
我这里是
hadoop-hadoop-jobtracker.pid	     hsperfdata_root
hadoop-hadoop-namenode.pid	     Jetty_0_0_0_0_50030_job____yn7qmk
hadoop-hadoop-secondarynamenode.pid  Jetty_0_0_0_0_50070_hdfs____w2cu08
hsperfdata_hadoop		     Jetty_0_0_0_0_50090_secondary____y6aanv
大家可以清楚的看到pid文件,以及hsperfdata_hadoop目录
结合上面的tmpwatch就会明白,如果长时间运行,上述设置是240小时,也就是10天,以上目录就会删除

4.jps失效

pid删除那么jps命令就无法查找到pid,其实这时候还在运行,在hadoop中调用stop_all.sh也会无法关闭hadoop几个进程,因为一样找不到pid
hadoop里的hadoop-env.sh文件中,默认是关闭了的。删除 # export HADOOP_PID_DIR=/var/hadoop/pids 前面的#
把路径设置成你想要的路径。
那么pid就会输出到你指定路径,这样就无需担心jps失效的问题了。

5.jstat失效

我们先看下hsperfdata_hadoop是什么
ls /tmp/hsperfdata_hadoop/

可以看到
31498  31664  31749

看起来象进程id,使用jps命令看下
31989 Jps
31749 JobTracker
31664 SecondaryNameNode
31498 NameNode

和hadoop的三个java进程一一对应

这里面放的就是jstat所需要的数据了

一旦删除jstat就无法使用,怎么样才能防止定时任务删除呢

你可能想到了文章开头的-d参数  

只需在tmpwatch脚本开头的-umc改为-umcd即可




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值