【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题

一、组件简介和问题描述

SkyWalking 简介

Apache SkyWalking 是一个开源的 APM(应用性能管理)工具,专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能,帮助开发者快速定位和解决性能瓶颈和故障。

xxl-job 简介

xxl-job 是一个轻量级的分布式任务调度框架,支持定时任务的管理与执行。它提供了简单易用的界面和丰富的功能,适合于各种业务场景。

遇到的问题

在使用 xxl-job 的过程中,突然有一天开始遇到了以下错误:

  • 错误码:500
  • 错误信息msg:xxl-rpc remoting error(Read timed out)

并且出现了大量的调度结果失败,但是执行结果成功的情况

这个错误通常表示在与 xxl-job 的 RPC 通信过程中发生了超时,可能由以下原因引起:

  1. 网络问题:服务间的网络连接不稳定,导致请求超时。(排查了不是这个问题)
  2. 服务没收到任务下发(如果这样的话它是不会执行的)
  3. 服务收到下发但是没有及时回复给xxl-job服务(怀疑)

二、开始使用SkyWalking 排查问题 

JVM指标查看

发现发生了很多次年轻代、老年代GC,每分钟花费最多快达到了1秒

第一次发生是在10-12 21:35

此时发生了老年、年轻代GC

21:35分的时候发生一次

此时也是发生了老年、年轻代GC

三、猜测并调整 

是不是每次发生调度失败的时候都会有GC 存在呢,我们试着修改一下JVM启动参数

-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垃圾回收器的特点

  1. 并行性

    • G1 GC 在进行垃圾回收时会使用多个线程来并行处理,这样可以更有效地利用多核 CPU,减少停顿时间。
  2. 增量式回收

    • G1 将堆分为多个区域(Region),在进行垃圾回收时,它会增量地回收这些区域,而不是一次性回收整个堆。这种方式可以降低 GC 的停顿时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tbox编译注意问题

Tbox是一个强大的开源库,感谢做为ruki的无私奉献。 tbox: 跨平台的c开发库,提供asio、stream、容器、算法、xml/json/plist解析、数据库等常用模块 在使用tbox开源库的数据库模块时,没有使用xmake进行编译,而是使用make编译的。…

Golang | Leetcode Golang题解之第474题一和零

题目: 题解: func findMaxForm(strs []string, m, n int) int {dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for _, s : range strs {zeros : strings.Count(s, "0")ones : len(s) - zerosfor j : m; j > zeros; j--…

数据库血缘工具学习,使用以及分享

一.血缘关系是什么?为什么要分析血缘关系? 首先,什么是血缘关系? 是指在数据的全生命周期中,从数据的产生、处理、加工、融合、流转到最终消亡,数据之间自然形成的一种类似人类血缘的关联关系。 说的再简…

PyTorch 2.5 发布带来一些新特性和改进

官网:https://github.com/pytorch/pytorchGitHub:https://github.com/pytorch/pytorch原文:https://github.com/pytorch/pytorch/releases/tag/v2.5.0 主要亮点 (Highlights)] SDPA CuDNN 后端:为 torch.nn.functional.scaled_d…

Zico 2 靶机 - 详细流程

✨ 准备工作 靶机 && kali 环境要求 机器名网络配置靶机Zico 2NAT 模式攻击机kaliNAT 模式 靶机下载链接:zico2: 1 ~ VulnHub 打开 VMware,将 zico2.ova 拖拽到 VMware 中 设置 虚拟机名称(A) - 存储路径(P)- 导入 若是,…

3DsMax删除FBX 导出的预设

3DsMax删除FBX 导出的预设 文档 https://help.autodesk.com/view/3DSMAX/2025/CHS/?guidGUID-9939F041-5E2D-4AA8-A732-6C2A1DFB5314删除静态FBX 这个预设 使用everything 搜索预设文件的后缀.fbxexportpreset ,然后 文件路径 C:\Users\GoodCooking\Documents\3…

C++标准模板库--vector

vector 介绍 vector(向量)是一种序列容器,表示为可以改变大小的数组。vector中的元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素,且与数组一样高效。但与数组不同的是&#xff…

React01 开发环境搭建

React 开发环境搭建 一、创建 React 项目二、项目精简 一、创建 React 项目 执行下述命令创建 react 项目 blu-react-basis npx create-react-app blu-react-basis项目目录结构如下: 执行下述命令启动项目 npm run start启动效果如下: 二、项目精简 …

51单片机的万年历【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块时钟模块按键蜂鸣器等模块构成。适用于电子万年历、数字时钟万年历等相似项目。 可实现功能: 1、LCD1602实时显示年月日星期和北京时间,具备闰年判断功能 2、按键可设置闹钟时间 3、按键可修改当前时…

案例-登录认证

案例-登录认证 在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,所以我们今天的主题就是登录认证。 最终我们…

redo文件误删除后通过逻辑备份进行恢复

问题描述 开发同事让在一个服务器上查找下先前库的备份文件是否存在,如果存在进行下恢复。翻了服务器发现备份文件存在,多愁了一眼竟翻到了该备份文件于2024.6.17日恢复过的日志,赶紧和开发沟通说2024.6.17号已经恢复过了为啥还要恢复&#x…

空间大数据的数据变换与价值提炼

在数字化时代,空间大数据正成为推动社会经济发展的关键因素。空间大数据不仅体量巨大,而且具有高速流转、多样类型和真实性等特点,它们在获取、存储、管理、分析方面超出了传统数据库软件工具的能力范围。地理信息系统(GIS&#x…

AWS账号与邮箱的关系解析

在当今数字化时代,云计算服务的普及使得越来越多的企业和个人用户开始使用亚马逊网络服务(AWS)。作为全球领先的云服务平台,AWS为用户提供了丰富的计算、存储和数据库服务。然而,对于许多新用户来说,关于AW…

openresty通过header_filter_by_lua记录特定的请求头和特定的响应头到日志文件

有时我们希望记录特定的请求头信息和特定的响应头信息,以便能够通过关联请求信息和响应头信息,来实现记录请求和响应的对应关系。这里通过逐步尝试和优化的方式进行尝试。具体包括将需要的请求头和响应头组织到一条日志记录,输出到单独的错误日志文件记录等的配置尝试。 1.…

C语言中的文件操作:从基础到深入底层原理

文件操作是几乎所有应用程序的重要组成部分,特别是在系统级编程中。C语言因其高效、灵活以及接近硬件的特点,成为了文件操作的理想选择。本文将全面深入地探讨C语言中的文件操作,从文件系统的概念到具体的文件操作函数,再到底层的…

c++的哈希表、哈希桶的介绍与实现

目录 前言 哈希概念 哈希冲突 哈希函数 哈希冲突解决 闭散列 —— 开放定址法 开散列 —— 链地址法(拉链法、哈希桶) 哈希表的闭散列实现 哈希表的结构 哈希表的仿函数 哈希表的插入 哈希表的查找 哈希表的删除 哈希表的开散列实现&#xff…

如何查看默认网关地址:详细步骤

在日常的网络配置与故障排查中,了解并正确查看默认网关地址是一项基础且至关重要的技能。默认网关是连接本地网络与外部网络(如互联网)的关键节点,它扮演着数据包转发的重要角色。无论是家庭网络、办公室网络还是更复杂的网络环境…

MySQL:基于Spring监听Binlog日志

binlog的三种模式 MySQL 的二进制日志(binlog)有三种不同的格式,通常被称为 binlog 模式。这三种模式分别是 Statement 模式、Row 模式和Mixed 模式。 Statement 模式: 在 Statement 模式下,MySQL 记录每个会更改数…

【编程语言】Kotlin快速入门 - 类与对象

类的组成 Kotlin中类的基本组成可写成以下的形式,Kotlin也是使用class关键字声明一个类的,我在此也同时加入了name和age两个字段。 class Student: Person() {var name ""var age 1fun eat() {println("$name is $age")} }Kotli…