Centos7 Tomcat 内存增大 ,jmap查看内存使用情况与生成heapdump
Open JDK 安装的1.8并不支持自带Jmap之类的JVM工具
无奈只能重新安装版本,不能直接wget 下载连接 ,需要输入如下命令下载离线包安装
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" “http://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.rpm“
下载完成后输入
rpm -ivh jdk-8u191-linux-x64.rpm
解压 安装后可能会出现读取link /usr/bin/java 失败,这个软连接指向的是jdk安装包的bin路径,因为之前装过所以存在,现在需要修改该路径。
会发现指向了 /etc/alternatives/java路径,cd进取发现了刚才创建的新的java.1指向的路径是最新安装的,但是现在需要修改现有的java 指向最新的jdk路径。
进入jdk路径下的bin目录
输入如下命令,指向正确
./java -version
再次进入cd /etc/alternatives/ 路径 ll命令列出所有的
rm java 删掉当前的 java软link
输入命令创建新的 java link
ln -s /usr/java/jdk1.8.0_191-amd64/bin/java java
ll命令查看下 ,安装正常
java -version 出现了新安装的路径
通过top 列出当前活动进程 及占用内存资源,找出进程pid 29779
printf "%x\n" 29779 进程 命令得出十六进制值7453
用jstack 29779 打印得出好多进程等待的 信息
通过jstack 29779 >jstack.txt可以将信息打印到本地
jmap -dump:live,format=b,file=文件名 2657
这里更加强大一些,可以指定是存活的对象,还有生成heapdump的文件名。
jmap -histo:live 29779 >dump1.txt 统计活着的对象
jstat -gc 12538 5000
jstat -gcutil 15736
jstat -gccause 15736 输出-gcutil提供的信息以及最后一次执行GC的发生原因和当前所执行的GC的发生原因
每5 秒一次显示进程号为 12538的 java进成的 GC情况,结果如下图:
打印GC 日志
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/gc_dump.hprof -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/root/gc.log
参考:https://www.jianshu.com/p/47994df4ebb3