只需4个步骤,分析解决在生产环境下JVM内存泄露问题
作者:未完成交响曲
发现异常
首先通过我们内部搭建的日志平台发现我们线上环境一个java应用有大量的http接口请求超时,登录linux服务器查看网络环境没有问题,判断是应用自身运行异常,重启应用后发现异常还在,开始查找问题。
初步查找问题
通过指令:jstat -gcutil 查看jvm内存占用和gc情况:
发现老年代内存占用比例过高,并且每次fullGC后并没有有效回收。老年代内存占用百分比变化趋势大致如下:
初步判断大量请求超时和服务瘫痪的直接原因:
每次fullGC后的内存占用越来越高 内存占用增长速度越来越快 fullGC的频率越来越高 最终占用达到100%,服务完全瘫痪
分析处理
使用指令:jmap -histo:live * | more 查看堆内存中的对象数量和大小
发现Log4jLogEvent这个对象实例很多,占用内存也异常的大,初步分析是异步日志传输速度跟不上,导致日志对象堆积在内存中。
尝试使用调整Flume传输日志参数:提高flume单次传输量,减少最大延迟时间
重启应用并监控接口调用情况发现应用暂时恢复正常了。
后续分析
在前一步分析内存的同时,使用指令:jmap -dump:format=b,file=heapDump.hprof将实时内存信息导出(dump过程比较慢,所以在问题暂时处理完后进行后续分析),使用mat分析内存结构:
可以看到主要占据堆内存的对象信息,果然是Flume异步传输日志堵塞的问题。
总结
对jvm内存泄露这类问题的解决,主要是要善于利用jvm提供的类似jstat、jmap等工具来分析查找问题。这次问题虽然解决,但是后续还是存在出现此类问题的风险。所以除了加强jvm问题排查能力的同时,我们也将建立应用监控平台的计划提上日程,希望能对jvm内存、线程等应用实时运行指标进行监控,便于尽早发现问题。
欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
几行 Python 代码实现 Windows 下的文件批量重命名
几行 Python 代码实现 Windows 下的文件批量重命名 一 背景 “C:UsersgyslDocuments数据结构”目录中存在许多文件,现需要对其进行重命名,命名规则为:匹配文件名的前六个字符(这些文件的前六个字符就能区分文件名称,且不重复),源文件及重命名之后的文件的扩展名都是“.mp4”。 二 实现代码 # -*- coding:utf-8 -*- import os, re, shutil dst_dir = r'C:\Users\sysl\Documents\数据结构' file_list = os.listdir(dst_dir) for file in file_list: new_name = re.findall(r'^[数据结构]{4}[0-9]{2}|\.mp4$',file) # \u4E00-\u9FA5 if len(new_name) == 2 and file != new_name[0] + new_name[1]: shutil.move(os.path.join(dst_dir,file),os.path.join(dst_dir,new...
- 下一篇
RSA解密 优化 的原理详解 ,synchronized的使用
一、 原来代码 示例代码: private static org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider = null; public static org.bouncycastle.jce.provider.BouncyCastleProvider getBouncyCastleProviderInstance() { if (bouncyCastleProvider == null) { bouncyCastleProvider = new org.bouncycastle.jce.provider.BouncyCastleProvider(); } return bouncyCastleProvider; } 二、 优化后代码 示例代码: private static volatile org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider ; public static org.bouncycas...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度