netty对象池应用解决gc频发问题?

来源:10-5 Recycler的使用

慕斯卡5447126

2022-01-22

老师,请教个生产问题。
业务背景:每10分钟会拉取一批数据(100条左右,每条两百多个字段),然后根据业务需要会分发200次消息到rabbitMQ,MQ消费者根据各自的业务对这批数据进行saveBatch/updateBatch, 之后会进行websocket推送,mq配置的并发线程数5,每个线程处理耗时10s左右
现象:这个过程cpu会飙高200%~300%,gc情况也会剧增
猜测:每个线程都会不断创建、销毁entity对象造成gc频繁

解决方案:目前想尝试用netty对象池去复用entity对象,看是否能降低gc情况

但有点无从下手,从数据库查询出的list不知如何复用

写回答

1回答

好帮手慕小蓝

2025-02-11

关于使用netty对象池来复用entity对象以降低GC情况的问题,以下是一些可能的解决方案:

  1. 使用netty对象池:netty提供了一个对象池,可以复用ByteBuf对象,从而减少GC频率。

  2. 优化netty配置:您可以尝试调整netty的配置来提高性能。例如,通过-XX:ParallelGCThreads参数设置并行GC线程数,以提高垃圾回收的效率。

  3. 减少对象创建和销毁:每个线程都会不断创建、销毁entity对象可能导致频繁的GC。您可以尝试使用netty对象池来复用entity对象,减少对象创建和销毁的次数。

  4. 调整JVM参数:您可能需要调整JVM参数来优化性能。例如,通过-XX:MetaspaceSize和-XX:MaxMetaspace参数设置元空间的初始大小和最大大小。

  5. 监控和诊断:使用监控工具和日志来诊断并发问题。


0
0

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程