想查看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 — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)