Windows 下 Tomcat 内存占用过高问题跟踪 (jmap 的使用)
一、问题描述
Tomcat 下面部署很多个 java 项目的 war 包,tomcat 启动一段时间后,发现 cpu 占用过高,整个界面卡死!
二、通过 tasklist 命令查看 java 进程下的线程
三、通过 jstack 把进程下所以的 Java 线程栈的内容打印出文本中
四、引出 jmap
使用 jstack 我们能够生成虚拟机当前时刻的线程快照,包含虚拟机中每一个线程正在执行的方法堆栈的集合,用于定位线程出现长时间停顿的原因,如死锁、死循环、外部资源长时间等待等。但是有时候我们需要观察到内存对象实例,此时我们可以使用 jmap 命令。
四、jmap 的作用
Jmap 可以用来查看内存信息,实例个数以及占用内存大小.
jmap -histo[:live] 打印每个 class 的实例数目,内存占用,类全名信息. VM 的内部类名字开头会加上前缀”*”. 如果子参数加上 live 后,只统计活的对象数量.
五、jmap 的使用
1、堆内存 dump 到指定目录,jmap -dump:b,file=project.hprof pid
2、dump 生成的文件可以用 jvisualvm 命令工具导入该 dump 文件分析: 打开 jdk 的 bin 目录的 jvisualvm 工具,选择文件,再选择装入,并选中对应的文件类型,即可进行导入文件,分析内存对象。
如若转载,请注明出处:开源字节 https://sourcebyte.cn/article/188.html
评论