jps jstat 命令失效的問題
阿新 • • 發佈:2019-01-22
這裡以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幾個程序,因為一樣找不到pidhadoop裡的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即可