当前位置: 首页 > news >正文

打印大对象日志导致GC问题的解决

内容:

  • rpc调用外部服务时,需要将req和resp的信息打印出来,以便于排查问题。
  • 但是有的rpc服务的resp信息过于庞大,比如resp中有List<>信息,list很大很大时
  • 会导致log.info打印信息时,产生GC,影响业务

通过将大对象拆分为小对象,解决GC耗时过长问题,进而解决GC过长对业务的影响(TP999过长导致超时、慢sql)等

1、背景

正常情况下,2M、3M就为大对象。会直接被分配至old region。如果此大对象为日志对象,被频繁的加入老年代,会引起Full Gc,影响接口性能或db性能。

2、解决

将大对象,part拆分为小对象再打印,这样young gc更快,影响更小

3、code实现(以List的拆分为例)

@Slf4j
@Component
public class PartLogUtils {public <V> void partLog(List<V> info,int count,Logger logger,String format) {List<List<V>> result = splitInfo(info, count);logInfo(result, logger, format);}private <V> List<List<V>> splitInfo(List<V> info, int count) {List<List<V>> result = Lists.newArrayList();if (CollectionUtils.isEmpty(info) || info.size() < count) {result.add(info);return result;}List<V> temp = Lists.newArrayList();int index = 0;for (V item : info) {index++;temp.add(item);if (index % count == 0) {result.add(temp);temp = Lists.newArrayList();}}if (temp.size() > 0) {result.add(temp);}return result;}private <V> void logInfo(List<V> infoList, Logger logger, String format) {for (V item : infoList) {logger.info(format, GsonUtils.toJsonStr(item));}}}

类A中使用

private  final  static Logger logger = LoggerFactory.getLogger(A.class);PartLogUtils.partLog(resp, 2000, logger,"queryUserInfo:[{}]");

4、打印Map对象的优化同理

http://www.lryc.cn/news/174388.html

相关文章:

  • 【Docker】学习笔记
  • 网易云信4K 8K RTC助力远程医疗的技术实践
  • 【排序算法】冒泡排序、插入排序、归并排序、希尔排序、选择排序、堆排序、快速排序
  • Linux学习笔记-应用层篇
  • MySQL数据库的存储引擎
  • Linux-多路转接-epoll
  • Java面试被问了几个简单的问题,却回答的不是很好
  • 概率论几种易混淆的形式
  • PyTorch数据增强后的结果展示
  • 指定程序在哪个GPU上运行
  • Linux CentOS7 vim多文件编辑
  • PAT甲级真题1153: 解码PAT准考证
  • linux信号
  • JavaWeb开发-05-SpringBootWeb请求响应
  • Ubuntu下载
  • Vue 的组件加载顺序和渲染顺序
  • leetcode Top100(17)矩阵置零
  • 论文精读(2)—基于稀疏奖励强化学习的机械臂运动规划算法设计与实现(内含实现机器人控制的方法)
  • 快速安装keepalive
  • nginx实现反向代理实例
  • 使用Freemarker填充模板导出复杂Excel,其实很简单哒!
  • windows环境下安装logstash同步数据,注册系统服务
  • java服务内存说明及配置详解
  • Mybatis-MyBatis的缓存
  • 计算机组成原理之硬件的基本组成,深入介绍两大计算机结构体系,从底层出发认识计算机。
  • 二十五、MySQL事务的四大特性和常见的并发事务问题
  • 辨析常见的医学数据分析(相关性分析回归分析)
  • SpringBoot项目中只执行一次的任务写法
  • TCK、TMS、TDI、TDO的含义
  • R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据...