实战:用SkyWalking排查xxl-job RPC超时问题
创作时间:
作者:
@小白创作中心
实战:用SkyWalking排查xxl-job RPC超时问题
引用
CSDN
1.
https://blog.csdn.net/weixin_53132064/article/details/142953918
在使用xxl-job过程中遇到"xxl-rpc remoting error(Read timed out)"问题,通过SkyWalking监控发现频繁的GC活动。通过调整JVM参数,成功解决了调度失败的问题。本文详细记录了问题排查和解决过程,对Java开发和运维人员具有参考价值。
一、组件简介和问题描述
SkyWalking 简介
Apache SkyWalking 是一个开源的 APM(应用性能管理)工具,专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能,帮助开发者快速定位和解决性能瓶颈和故障。
xxl-job 简介
xxl-job 是一个轻量级的分布式任务调度框架,支持定时任务的管理与执行。它提供了简单易用的界面和丰富的功能,适合于各种业务场景。
遇到的问题
在使用 xxl-job 的过程中,突然有一天开始遇到了以下错误:
- 错误码:500
- 错误信息:
msg:xxl-rpc remoting error(Read timed out)
并且出现了大量的调度结果失败,但是执行结果成功的情况。这个错误通常表示在与 xxl-job 的 RPC 通信过程中发生了超时,可能由以下原因引起:
- 网络问题:服务间的网络连接不稳定,导致请求超时。(排查了不是这个问题)
- 服务没收到任务下发(如果这样的话它是不会执行的)
- 服务收到下发但是没有及时回复给xxl-job服务(怀疑)
二、开始使用SkyWalking 排查问题
JVM指标查看
通过SkyWalking监控发现系统发生了频繁的GC活动,具体表现为年轻代和老年代的GC。下图展示了监控结果:
第一次发生是在10-12 21:35
此时发生了老年、年轻代GC
21:35分的时候发生一次
此时也是发生了老年、年轻代GC
三、猜测并调整
基于监控结果,怀疑频繁的GC活动可能是导致RPC超时的原因。因此,尝试通过调整JVM参数来优化GC行为:
-Xmn3G
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=6
-XX:InitiatingHeapOccupancyPercent=40
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
1. 年轻代和老年代的设置
- **
-Xmn3G
**:设置年轻代的大小为 3 GB。年轻代的大小会影响到 GC 的频率。适当增大年轻代的大小可以减少年轻代 GC 的次数,但同时也要注意不要过大,以免影响老年代的内存。
2. Survivor Ratio
- **
-XX:SurvivorRatio=8
**:这个参数定义了 Eden 区和 Survivor 区的比例。在你的设置中,Eden 区占 8 份,Survivor 区占 1 份。适当调整这个比例,可以优化对象在年轻代中的存活时间,从而减少 GC 次数。可以考虑增加 Survivor 区的比例,以便更多的存活对象能够进入 Survivor 区,减少晋升到老年代的频率。
3. 最大晋升阈值
- **
-XX:MaxTenuringThreshold=6
**:这个参数定义了对象在年轻代中存活的最大 GC 次数,超过这个次数的对象将被晋升到老年代。如果希望减少老年代的 GC 次数,可以考虑增加这个值,允许对象在年轻代中存活更长时间,从而减少晋升到老年代的频率。
4. 堆占用率
- **
-XX:InitiatingHeapOccupancyPercent=40
**:这个参数定义了老年代开始 GC 的堆占用率。适当提高这个值,可以延迟老年代的 GC,减少其发生频率。
5. G1 垃圾回收器
- **
-XX:+UseG1GC
和
-XX:MaxGCPauseMillis=200
**:G1 垃圾回收器旨在减少 GC 暂停时间,适当调整这些参数可以优化 GC 性能。通过设置合理的暂停目标,可以在一定程度上减少 GC 的次数。
6. 直接内存大小
- **
-XX:MaxDirectMemorySize=512m
**:虽然这个参数主要控制直接内存的使用,但合理配置可以避免因直接内存不足而导致的额外 GC。
四、调整后重启服务
重启服务后发现老年代已经很久没有了GC触发,年轻代的GC也没有了那么频繁。CPU利用率也不再那么高了。
五、回到问题
发现这个错误已经不报了,并且全部是调度、执行都成功:
- 错误码:500
- 错误信息:
msg:xxl-rpc remoting error(Read timed out)
六、GC的解释
年轻代 GC
- 类型:通常使用的是 Minor GC。
- 影响:年轻代 GC 通常会导致短暂的 STW,暂停所有应用程序线程。由于年轻代 GC 的目的是清理短生命周期的对象,因此它的执行时间通常较短,通常在几毫秒到几秒之间。
老年代 GC
- 类型:通常使用的是 Major GC 或 Full GC。
- 影响:老年代 GC 通常会导致更长时间的 STW,因为它需要检查整个堆的内容。老年代的 GC 过程可能会更复杂,导致暂停时间更长,通常从几秒到几十秒不等。
G1垃圾回收器的特点
- 并行性:
- G1 GC 在进行垃圾回收时会使用多个线程来并行处理,这样可以更有效地利用多核 CPU,减少停顿时间。
- 增量式回收:
- G1 将堆分为多个区域(Region),在进行垃圾回收时,它会增量地回收这些区域,而不是一次性回收整个堆。这种方式可以降低 GC 的停顿时间。
热门推荐
“杏花村”与“汾酒”的关系及差异
航母新力量:电磁弹射系统如何引领海军航空装备发展
重装系统蓝屏怎么办:十大解决方法指南
草莓是最脏的水果?1个步骤就让你的草莓洗了等于白洗!
18尺长矛方阵是“伪史”?瑞士军团靠啥武器横扫15、16世纪欧陆战场
车牌号摇号方法大盘点:如何确保摇号公平性?
无特效药无疫苗 感染腺病毒怎么办?对话中日友好医院专家
自媒体运营中,如何选择一个吸引人的头像?
澳大利亚的货币情况是怎样的?这种货币在国际上有怎样的地位?
被汇率改变的港人:北上消费热潮持续,“双向奔赴”再升温
风油精的成分
八字初学者必读:五本入门书籍推荐
五大联赛薪资榜单出炉!巴萨当冤大头,第一薪金令人意外
2.85亿登顶!足坛巨星年度收入排行,姆巴佩第五,C罗笑了
贷款合同实际利率探究
孕妇便秘怎么办?专家推荐这些解决与预防方法
不同网络如何设置文件夹共享:一网打尽共享文件夹设置技巧
《女神异闻录5皇家版》角色好感提升攻略:高卷杏篇
西游记七大圣联盟揭秘:驱神大圣禺狨王竟是金丝猴精
四象属水的星座:巨蟹座、天蝎座、双鱼座的性格特征
化妆品塑料包装都有哪些材质?
清明祭祖文范例,清明节祭词精选
清明扫墓祭文大全 清明节祭祖通用祭文
原神七神为什么要毁灭坎瑞亚?揭秘坎瑞亚覆灭之谜
不去健身房,10个动作在家练遍全身肌肉
丙子时是几点到几点 丙子时柱男命的八字日柱影响
黑龙江中医药大学揭示当归四逆汤治疗痛经新机制
海豚的多重寓意:智慧、温和与自由的象征
已进入高发期!感染了诺如病毒怎么办?
5岁男童误吞塑料玩具,紧急手术化险为夷