性能案例分析之内存泄漏 | 您所在的位置:网站首页 › 最大物理内存 › 性能案例分析之内存泄漏 |
一、查看Jvm运行状态的命令 监控jvm的GC情况: jstat -gcutil pid 1000 100 查看jvm配置信息: jmap -heap pid:可以看到java进程的堆的配置信息,各区的空间大小和配置信息 查看jvm中类和对象的占用情况: jmap -histo 5279 | head -20:查看jvm中各个类的实例数、占用内存数量以及类的全名 堆文件dump: jmap -dump:format=b,file=m.hdump 17777:对堆内存进行dump,以文件的形式进行保存下来,可以用jvisualvm等工具对文件进行分析 二、内存泄露有什么现象? 1,tps出现大幅波动,并慢慢降低,甚至降为0,响应时间随之波动,慢慢升高 2,通过jstat命令看到,Jvm中Old区不断增加,FullGC非常频繁,对应的FullGC消耗的时间也不断增加 3,通过jconsole/jvisualvm可以看到,堆内存曲线不断上升,接近上限时,变成一条直线 4,日志报错java.lang.OutOfMemoryError: Java heap space 在案例练习前,先修改tomcat目录下conf/context.xml,将 这行的注释打开 三、内存泄露怎么定位? 1,通过jmap命令:jmap -histo pid | head -20,查看当前堆内存中实例数和占用内存最多的前20个对象 2,通过jvisualvm,进行远程堆dump,然后把dump文件下载下来,用jvisualvm打开进行分析,可以看到更直观的jvm中对象的信息 四、在什么样的场景下监控内存泄露问题? 1,在试压阶段,或任意场景都可以考虑通过jvisualvm和jstat监控jvm的情况 2,在稳定性场景中,一定要关注Jvm内存使用的情况,在长时间的压测下,最容易看出内存泄露的问题 五、Jvm常见参数 -Xms2048m:初始堆大小,建议 |
CopyRight 2018-2019 实验室设备网 版权所有 |