liunx下jstat无法查看虚拟机状态
想查看 liunx 下 jvm 的运行情况, 但是使用jstate -gcutil pid
一直说找不到, 解决之后记录一下.
首先下载了最新的 jdk
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-linux-x64.tar.gz
之前软件都是放在/home/user
下的, 感觉不合适却不知道哪里更合适. 了解了一下 liunx 的目录结构/usr
下放系统的应用, 而用户安装的应用一般放在/usr/local
下.
还顺便了解了一下各个目录的作用, 详见liunx 目录结构.
把 jdk 的包解压到对应的地方就可以了. 然后是配置环境变量
JAVA_HOME=/usr/local/jdk1.8.0_112
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin:/usr/bin
然后是配置 tomcat 使用的 jdk. 一般会注释掉使用默认, 如果需要指定, 在tomcat_dir/bin/catalina.sh
加上下面这段, 记得要去掉注释
#export JAVA_HOME=/usr/local/jdk1.8.0_112
#export JRE_HOME=$JAVA_HOME/jre
#export JAVA_BIN=$JAVA_HOME/bin
启动后, 这时候使用 jstat 查看该 tomcat 的状态提示pid not found
, 使用 jps 也没有这条信息, 但是ps
查看明明就有, 顿时感觉很坑爹.
一顿查找资料后, 逐步解决.
首先 java 进程会向 /tmp 里写文件, 路径为hsperfdata_$user/$pid
, 如果在 tmp 下没有这个文件 jps 就会查找不到这个线程. 如果 tmp 下的 java 临时文件有误就会提示xx -- process information unavailable
,
这时候把 tmp 下hsperfdata_
这样的都删了, 然后重启 java 程序, 再使用 jps 就能正常输出结果了.
然后 tomcat 的 catalina.sh 里开头设置CATALINA_TMPDIR=/tmp
, 这样下面的脚本执行 -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \
, 这样就可以达到效果是加上 java 参数-Djava.io.tmpdir=/tmp
.
这时候重启 tomcat 后, 输入jstat -gcutil pid
, 就可以显示 jvm 的情况了
S0 — Heap 上的 Survivor space 0 区空间使用率
S1 — Heap 上的 Survivor space 1 区空间使用率
E — Heap 上的 Eden space 区空间使用率
O — Heap 上的 Old space 区空间使用率
M — Metaspace 区空间使用率
CSS - 压缩类空间使用率
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间 (单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间 (单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间 (单位秒)