加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

值得阅读的内存泄露分析总结和Tomcat调优

发布时间:2019-03-02 14:31:08 所属栏目:外闻 来源:今日头条
导读:副标题#e# 写在最前面,运行环境:tomcat8,jdk1.8,windows server 2008内存16G,软件LoadRunner11,MAT和JProfile9.1。 问题描述:前段时间遇到一个很奇怪的问题,开发的WEB应用,经常会毫无症状的宕掉,然后抓了线程栈看下,发现之前写的数据库链接池出

用MAT分析后感觉还是有点不确定,然后又用Jprofile实时监控了一下JVM状态,不得不说这个工具真的很强大,可以监控本地的JVM进程,也可以监控远程的JVM进程,监控内容从内存,对象,GC到线程,CPU,数据库连接状态覆盖面很广。

具体的使用有兴趣的可以去下载下来玩玩,下图是内存监控的视图,这里支持对整个Heap的监控,也可以分开监控Eden Space和Old Gen。从这个回收视图可以看出对Eden Space的回收基本每次都可以很彻底(主要看波谷有多低),如果存在内存泄露的情况,不会每次回收都能触及波谷,而且波谷会慢慢升高,因为内存泄露会导致一些对象无法被回收,而且随着软件运行时间和压力增大,泄露的对象会慢慢积累,所以GC完之后蓝色显示Used size是不可能达到最低点几乎为0的大小。

下面这张图是对GC状态的监控

分析到这里基本可以确定应用不存在内存泄露的情况。然后用这个软件也有一些其他发现。它有个线程分析视图可以抓取到线程的状态,主要是查看压力测试下线程阻塞的状态,我发现很多线程都block在写日志文件的地方,各进程间对日志文件的写操作肯定是互斥的,一次只允许一个进程对日志文件进行写操作,同一时间如果后台有几百个进程同时需要对日志文件进行写操作,这时就进入了阻塞状态,如下图所示:

从之前的MAT分析Heap中对象中也发现很多打印的日志数据都存在Heap中,到现在看到这么多线程阻塞在log4j的地方,控制好日志的输出对高并发的WEB应用影响还是挺大的。

除了视图还可以监控数据库连接的情况,事务的完成时间,连接池的状况,连接串的状况,还可以根据一些筛选条件进行筛选,功能十分强大。

最后再放一张总的监控视图:

由于这个两个软件都是临时下载初次使用,可能还有很多强大的功能没尝试,以后还可以继续研究研究。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读