IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 记一次线上fullgc排查历程 -> 正文阅读

[大数据]记一次线上fullgc排查历程

在公司一次重大项目中,生产环境突然发生频繁fullgc问题,通过cat发出警告。很不幸,这次项目非常重要,领导很看重,所以得赶紧解决问题,下面就是排查的艰苦历程

22:10 线上可以报警,出现fullgc问题,初步判断是服务器少了,于是申请堆线上服务器进行扩容,扩容之后,还是有fullgc问题

22:30 初步通过代码判断是自己查询了大对象导致老年代内存快速增长,目前业务中只有一个地方老年待,于是盲目改代码:一次查询修改成分页查询

修改完代码 进行发布 还是依然fullgc

23:30 突然发现启动参数 配置的内存是2G,于是乎修改成6g ,心想一定是这个地方内存小了导致的

?修改完之后进行发布,发现fullgc频率低了很大但是依然存在fullgc问题

12:00 开始进行dump文件下载分析

jmap -dump:format=b,file=/tmp/heapDump.hprof pid?

00:50 dump文件下载完成,开始进行正式分析,利用mat工具对dump文件进行分析

分析Leak Supercts视图 发现代码确定存在很大的问题

?选择一个地址进行具体分析

?当前具体的堆内存信息

?

内存对应的详细信息

简单介绍一下这里的MySQL JDBC内存信息

<class>代表类相关的信息

catalog:mysql 目录 类似schema?

connection:对应数据库连接信息 记录用户名 密码 url? 连接数等数据库连接的配置

owningStatement:对应JDBC42PreparedStatement 记录预编译语句相关

field:对应查询的字段

columnLabelToIndex:对应查询列的索引

rowData:对应列的数据

找出内存泄露的地方 那我们怎么定位到是SQL语句呢?

科普一下,在SQL语句执行的流程中我们都知道 SQL语句一般都会进行预编译 与之对应的JDBC功能都是Statement语句 所以我们找到内存中带有Statement的内存信息 如下图

在这个图中 我们惊喜的发现了新大陆 originalSql 这个就是保存原始未解析之前的SQL信息


?根据有问题的SQL在到代码中反查,确实发现了这段代码

没有走索引而且一次性查询的数据量非常大

导致fullgc的原因是这样的

故事还得从这个接口的作用说起,此接口是提供给监控服务使用,每完成一单主动交易,监控服务就会调用此接口校验是否需要查询可用库存,随着iat_task_detail表数据库越来越大30W+,任务执行速度越来越快,导致内存中堆积大量查询结果,大对象直接进入老年代,不会进行yong gc,大量请求直接导致老年代瞬间达到fullGC条件,就会执行fullGC,然后任务还在继续,就会导致fullGC释放之后,很短时间有达到fullGC条件,会继续fullGC,不断循环往复, 这就是cat监控短时间内有大量fullGC问题的根源

知道了问题根因,那我们如何解决呢?

解决办法就很简单了,针对本次单层货权,不需要查询此SQL 直接返回true,就行了,是不是很简单

03:10 修改完代码重写发布,fullgc问题解决了,监控了一个小时发现正常了?

04:00 回家?睡觉了。。。。

思考总结:针对fullgc问题 我们还是的根据dump文件对代码进行分析才行,一定要动手实践,所谓的高手就是跨过坑和大海

?

?

?

?

?

?

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:53:00  更:2021-12-08 13:54:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:48:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码