来这公司一年碰到的问题比我过去10年都多

news2024/11/23 1:21:30

无意间发现我们 Kafka 管理平台的服务的 open files 和 CPU 监控异常,如下图,有一台机器 CPU 和 opfen files 指标持续在高位,尤其是 open files 达到了4w+。

c23e58e97c5b39455700ba3138a23d29.png eae250c59357643b9be400b56f2550c7.png

原因分析

第一反应是这个服务请求很高?但是这个服务是一个管理服务不应该有很高的请求量才对,打开监控一看,QPS少的可怜。

68ea84c676b6a840267b6caed0312bd9.png

既然机器还在就找 devops 同学帮忙使用 Arthas 简单看下是什么线程导致的,竟然是 GC 线程,瞬时 CPU 几乎打满了。

1a6f0bfadc153f7852dd4382e1ea2bec.jpeg

查看了 GC 监控,每分钟 5~6 次相比其他的正常节点要多很多,并且耗时很长。

问题节点GC Count

51f45d80a0308d4913ee60ef79615557.jpeg

正常节点GC Count

e820128f6c61e9cacf9369cea0a435b7.jpeg

应该是代码出问题了,继续求助 devops 将线上有问题的机器拉了一份 dump,使用 MAT 工具分析了下,打开 dump 就提示了两个风险点,两个都像是指标相关的对象。

e7b6ee839fbbafe558716385de2908f6.jpeg

查看详情发现两个可疑对象,一个是 60+M 的 byte[], 一个是 60+M 的 map,都是指标相关的对象,问题应该出在指标上。

7147d2d44bdb617167ab11e220b3e652.jpeg

初步去排查了下代码,看是否有自定义指标之类的,发现一个 job 会对指标进行操作,就把 job 停了一段时间,GC 少了很多,但是 open files 只减少了一点点, 很明显不是根本原因。

ce27bce6dd4846f8bdb923a798aee393.png 70444c8beac134404ac12d02bd52f064.png

继续深入,将 byte[] 保存成字符串查看(确实文本也有60+M),发现全是 JMX 的指标数据,我们的系统使用了两种指标一种是Micrometer,一种是 prometheus-jmx-exporter,这个 byte[] 数组就是第二种指标的数据。

a412421602f89312fe69335b508798fb.jpeg

并且这些指标中发现有非常多的 kafka_producer 开头的指标。

0b10c345d99becc0c4e25f6bac500ffa.jpeg

为了验证是否属于 JMX 的指标数据,再次求助 devops 拉取线上有问题机器的 JMX 指标接口, 看返回的是否是 60M+ 的指标数据,发现根本拉不下来。

454d639c8103ee387b26aa06490f2c75.jpeg

到此基本确认问题出在 JMX 指标上, 那这些指标谁注册的呢?

通过指标名称在源代码里搜索,发现是来自org.apache.kafka.common.network.Selector.SelectorMetrics,是 kafka-client注册的指标。

具体的创建顺序如下,每创建一个KafkaProducer,就会以 client id 为唯一标识创建一个SelectorMetrics, 而创建 KafkaProducer 会创建一个守护线程,并开启一个长连接定时去 Broker 拉取/更新 Metadata 信息,这个就是open files飙高的根本原因。

KafkaProducer -> Sender -> Selector -> SelectorMetrics

527c63109320a14b4f91e8b31f19f973.jpeg

难道创建了很多 KafkaProducer???查看构造方法调用的地方,找到了真凶。。。

5f5f8675864d70d6c6d1d5894dd92f9b.png

这段代码是为了支持延迟消息,业务服务每发一个延迟消息,就会执行一次这段逻辑, 就会创建一个 KafkaProducer,并且会随着收到的消息越来越多导致创建的 KafkaProducer 越来越多,直至系统无法承受。。。

庆幸的是我们延迟消息并不是太多,没有直接把系统给打挂掉

那为什么只有一个节点会有问题,其他节点没有问题呢?这个比较简单直接说结果了,就是这段消费逻辑消费的 topic 只有一个分区....

解决方案:

由于 Kafka 管理平台会连接多个 Broker,所以此处将创建的 KafkaProducer 根据 Cluster 缓存起来进行复用。

问题总结:

  1. 1. KafkaProducer 本身是一个很重的对象,并且线程安全,创建的时候注意考虑场景

  2. 2. 此次问题完全是凭运气提前发现了,证明监控系统也存在不够完善的地方, 我们使用 Prometheus 的标准差函数 (stddev() by()) 配置了资源严重倾斜的监控告警,防止出现类似的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云安全的挑战与发展:云原生安全将是未来趋势吗?

引言 随着企业数字化转型的推进和云计算的普及,云安全已经成为了当下IT行业的热点话题之一。尽管云计算已经被广泛应用,但在云安全方面仍存在一些挑战和问题。本文将探讨当前云安全面临的挑战,并分析云原生安全在未来的发展趋势。 第一章 云…

Opera One将取代 Opera 浏览器

导读Opera 日前推出了一款名为 Opera One 的新浏览器,该浏览器正处于开发者预览阶段,用户可以访问官网下载试用(链接)。这个浏览器的终极目标是在今年晚些时候取代其当家的 Opera 浏览器。 Opera One 遵循 "模块化设计理念&q…

Netty(2)

Netty 文章目录 Netty4 Netty 模型4.1 Netty 模型介绍4.2 Netty demo4.3 Netty 异步模型4.3.1 基本介绍4.3.2 异步模型4.3.3 Future-Listener 机制4.4 Netty 任务队列 task 4 Netty 模型 4.1 Netty 模型介绍 Netty 线程模式:Netty 主要基于主从 Reactor 多线程模型…

2023年开源社项目委员会介绍

2023 项目委员会成员 项目委员会主席:石垚 (tech-querykaiyuanshe.org) 项目委员会秘书 :丁文昊 (dingwenhaokaiyuanshe.org) 开源社官网项目组: 组长:石垚 (tech-queryk…

2023 ATTCK v13版本更新指南

一、什么是ATT&CK ATT&CK(Adversarial Tactics, Techniques, and Common Knowledge )是一个攻击行为知识库和模型,主要应用于评估攻防能力覆盖、APT情报分析、威胁狩猎及攻击模拟等领域。 二、ATT&CK 发展历史 1996年&#xff1…

【UE】高级载具插件-04-坦克瞄准开火

在上一篇文章中(【UE】高级载具插件-03-子弹击中目标时使目标破碎),我们实现了坦克开火的功能。本篇博客介绍的是实现坦克瞄准开火的功能。 效果 步骤 1. 首先将学习FPS游戏时用到的动态准心控件蓝图资源导入 2. 在项目设置中增加两个操作…

穿越有序链表的迷宫:探索力扣“合并两个有序链表”的解题思路

本篇博客计划讲解力扣“21. 合并两个有序链表”这道题,这是题目链接。 老规矩,先来审下题干。 输出示例如下: 提示: 这道题目相当经典,同时是校招的常客。大家先思考一下,再来听我讲解。 思路&…

7.1 幂法和反幂法

学习目标: 如果我要学习幂法及反幂法,我会遵循以下步骤: 1. 学习理论知识:首先我会找到可靠的教材或者网上资源,学习幂法及反幂法的理论知识,包括其原理、公式、算法流程、收敛性等方面的内容。这些知识可…

Cadence Allegro BGA类器件扇孔操作教程

对于BGA扇孔,同样过孔不宜打孔在焊盘上,推荐打孔在两个焊盘的中间位置。很多工程师为了出线方便,随意挪动BGA里面过孔的位置,甚至打在焊盘上面,如图1所示,从而造成BGA区域过孔不规则,易造成后期…

3.shell脚本例子

文章目录 1.计算从1到100所有整数的和2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和3.求从1到100所有整数的偶数和、奇数和4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在&a…

【Java EE】-Servlet(一) 创建Maven下的webapp项目

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容:创建一个基于maven…

【云计算•云原生】5.云原生之初识OpenStack

文章目录 OpenStack起源OpenStack基本组件HorizonNovaSwiftCinderKeystoneNeutronGlanceCeilometerTroveHeat OpenStack简单框架模型 OpenStack起源 OpenStack是一个由NASA和Rackspace合作研发并发起的,以Aapache许可证授权的自由软件和开放源代码项目。为公有云及…

JS 实现区块链分布式网络

JS 实现区块链分布式网络 这里主要 JS 实现区块链 实现的部分继续下去,对 Blockchain 这个对象有一些修改,如果使用 TS 的话可能要修改对应的 interface,但是如果是 JS 的话就无所谓了。 需要安装的依赖有: express body-parse…

字节跳动ByteHouse与亚马逊云科技携手打造新一代云数仓服务

随着全球化的发展,越来越多的中国企业开始涉足海外市场,开展跨境业务。在这个过程中,强大的数据分析能力是出海企业不可或缺的重要一环。通过有效的数据分析,能帮助企业更好地了解全球市场对产品的需求便于调整产品战略&#xff0…

微服务---RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署)

RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署) 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见…

Python每日一练(20230506) 存在重复元素I、II、III

目录 1. 存在重复元素 Contains Duplicate I 2. 存在重复元素 Contains Duplicate II 3. 存在重复元素 Contains Duplicate III 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 存在重…

项目管理-数据管理能力DCMM模型

DCMM 数据管理能力成熟度评估模型简介 DCMM(Data Management Capability Maturity Assessment Model,数据管理能力成熟度评估模型)是我国首个数据管理领域国家标准,将组织内部数据能力划分为八个重要组成部分,描述了每…

重新定义座舱智能化的下半场?谁能抓住弯道超车的窗口期

2020年,高通8155上车之前,行业的定义更多是4G联网互联网生态(智能手机的复刻),以斑马智行为代表;而随着集成异构计算、高性能AI引擎(8TOPS算力)的高通8155密集上车,驱动行…

车载多屏互动联动动画版本同屏幕大小情况方案设计--众筹项目

hi,粉丝朋友们: 背景及成果展示 本节带大家来开始学习多屏幕互动的动画版本设计,回忆一下我们已经在之前blog和wms课程中学习了多屏互动的非动画版本如下: 再来看看今天我们想要实现有动画版本的成果: 是不是相比之…

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …