Fork me on GitHub

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

 

posted @ 2021-08-04 15:31  低调的神  阅读(695)  评论(0编辑  收藏  举报