使用jvisualvm工具进行OOM问题排查和调优。

1.业务场景介绍:

使用Springboot项目进行activityMQ的接入。把消息分发到另外两个地方:rocketMQ和DataHub。实现数据的传输。并保证数据的一致性。

2.问题介绍

代码写完。运行后。发现没过多久项目就报错。java.lang.OutOfMemoryError: unable to create new native thread

3.问题排查

使用工具jvisualvm进行排查.工具是安装jdk后自带的。

我的Mac路径是在/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/jvisualvm

找不到可以用find命令进行查询:find / -name jvisualvm

双击启动后的页面如下。

然后找到需要排查的本地项目进程。open it.

从上图可以看到问题有哪些?

a.cpu占用比较高。一直不停的在使用cpu资源。40%到55%左右。

b.使用的内存也很好。jvm回收不过来。

c.线程数量也在不断增加。开始1000多到2000+。这是很不合理的。

4.优化结果

这样我们就可以看到是多线程的问题引起的。经过一两个小时的优化。具体代码不好展示。?我们来看看优化后的monitor监控情况如何:

 

对比不难看出来。优化的结果还是很棒的。已经达到了我们想要的效果。

a.cpu也不会占用太高。

b.也没有报java.lang.OutOfMemoryError: unable to create new native thread异常了。

c.线程数量也是比较小的数量。稳定在一个水平下。

5.排查工具jvisualvm的其他功能分享

查看jvm 的参数

也可以看线程查问题原因。

当然还可以打heap dump 和Thread dump.用来分析dump文件来定位问题的原因。

最后感谢大家的支持。希望能帮助到大家。。

 

 


版权声明:本文为lujiawei00原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。