JDK自带工具查看内存

JDK自带工具查看内存

​ 今天维护之前写的一个项目,在本地跑一会出现java.lang.OutOfMemoryError: PermGen space

所以这里说一下怎么解决这个问题,以及如何查看内存使用情况,虚拟机的其他情况其他的地方说。

PermGen space 全称是Permanent Generation space ,是指内存的永久保存区域

这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行预编译的时候。

命令行模式

1.首先通过jps 查看java进程,可以找到对应的pid,通过pid可以进行查看当前进程的内存使用情况

在这里插入图片描述

2.jstat -gccapacity 4316[进程pid] 查看vm中内存对象的使用和占用大小。

PGCMN显示最小的perm的内存,PGCMX显示最大的perm的内存,PGC是当前新生成的perm内存占用量,PC是当前perm内存占用量。

jstat -gcutil 4316 是查看GC汇总统计。P是perm占用比。

这两个命令只是简单的查看内存运行情况,能知道运行的大概情况

在这里插入图片描述

jstat -gcutil 4316 10000[ms] 6[次] 一定时间执行一次查看内存情况,可以通过操作下程序观察内存情况
在这里插入图片描述

jstat命令是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。

3.jps -v 查看进程的jvm参数

在这里插入图片描述

4.输入jmap -heap 5628[pid]可以查看内存使用情况

这种比上面那些命令我觉得更直观方便些。这里看到MaxPermSize最大才82M,后面会进行修改,内存溢出问题就解决了
在这里插入图片描述

图形界面模式

1.jconsole

在cmd输入jconsole可以查看进程的内存使用情况,也可以在bin目录中找到这个程序,jconsole是jdk自带的内存分析工具
在这里插入图片描述

2.jvisualvm

在cmd输入jvisualvm可以进入jdk另外一个自带的内存分析工具,也可以在bin目录中找到这个程序,可以看做是jconsole的升级版,可以分析dump

[外链图片转存失败(img-G6mguxPV-1564584979185)(file:///C:/Users/hejiahao/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg)]

jmap -dump:format=b,file=xxxx.dump[文件名,*.hprof也行] 4316[pid]生成对应进程的dump文件,可以通过jvisualvm打开dump查看情况。点击文件–>装入–>文件类型选dump。Dump里面可以查看哪些类占用的资源较多
在这里插入图片描述

在eclipse中的运行配置中添加运行参数,-XX:+HeapDumpOnOutOfMemoryError是当发生内存溢出的时候生成dump文件,然后可以使用jvisualvm打开文件进行分析。
在这里插入图片描述

修改后可以输入jmap -heap pid可以看到我们修改的地方已经改变
在这里插入图片描述
当然也可以在jvisualvm中查看改变的情况
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值