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情况的问题,以下是一些可能的解决方案:
使用netty对象池:netty提供了一个对象池,可以复用ByteBuf对象,从而减少GC频率。
优化netty配置:您可以尝试调整netty的配置来提高性能。例如,通过-XX:ParallelGCThreads参数设置并行GC线程数,以提高垃圾回收的效率。
减少对象创建和销毁:每个线程都会不断创建、销毁entity对象可能导致频繁的GC。您可以尝试使用netty对象池来复用entity对象,减少对象创建和销毁的次数。
调整JVM参数:您可能需要调整JVM参数来优化性能。例如,通过-XX:MetaspaceSize和-XX:MaxMetaspace参数设置元空间的初始大小和最大大小。
监控和诊断:使用监控工具和日志来诊断并发问题。
00
相似问题