性能问题之内存泄露
作者:互联网
现象
- tps出现大幅波动,并慢慢降低,甚至降为0,响应时间随之波动,慢慢升高
- 通过jstat命令看到,JVM中old区不断增加,FullGC非常频繁,对应的FGC消耗的时间也不断增加
- 通过jconsole、jvisualvm可以看到,堆内存曲线不断上升看,接近上限时,变成一条直线
- 应用程序日志报错: java.lang.OutOfMemoryError: Java heap space
图中可以看到,堆内存使用率越来越高,至于100%使用;同时CPU使用率基本与垃圾回收占用CPU使用率是一致的。
2、通过jmeter插件Transactions per Second可以直观查看TPS的变化情况。从下图中可以清楚地看出,接近低第4分钟的时候,TPS已经基本降为0
3、根据上面两个现场我们可以明确内存已经满了,现在我们就要去看下占用内存较大的对象有哪些
如下图,点击jvisualvm监视tab页右上角的“堆dump”按钮,进行远程dump;然后将dump文件下载下来。
4、用jvisualvm将dump文件打开,分析实例数和现在我们就要去看下占用内存大的对象
在jvisualvm中,点击文件->装入,选择下载下来的dump文件。
如下图,可以分析实例信息和对象信息了。
总结
什么样的场景下监控内存泄露问题? 1、在试压阶段,或者任意场景都可以考虑通过jvisualvm和jstat监控jvm的情况 2、在稳定性场景中,一定要关注JVM内存使用的情况,在长时间的压测下,最容易看出内存泄露的问题标签:dump,性能,内存,JVM,jvisualvm,使用率,泄露,占用 来源: https://www.cnblogs.com/daydayup-lin/p/16182092.html