当前位置: 首页 > news >正文

jmx prometheus引起的一次cpu飙高

用户接入了jmx agent进行prometheus监控后,在某个时间点出现cpu飙高

排查思路:
1、top,找到java进程ID
2、top -Hp 进程ID,找到java进程下占用高CPU的线程ID
3、jstack 进程ID,找到那个高CPU的线程ID的堆栈。
4、分析堆栈信息

通过排查思路,找到了是jmx prometheus的线程:
在这里插入图片描述
jmx prometheus的源码:
在这里插入图片描述
这里只有for循环,很简单的逻辑,所以我们在思考会不会数据量太多了。

通过arthas查看方法返回数据:
watch io.prometheus.jmx.$ findExisting ‘{params,returnObj,throwExp}’ -n 5 -x 3
查看meban数据大小
在这里插入图片描述
prometheus 数据:kafka的客户端id一直在变,所以猜想是不是数据量越大prometheus就会越大
在这里插入图片描述
结论:kafaka 消费数据量比较大的时候,jmx 数据就会比较大。jmx prometheus默认的逻辑是会读取全部的java mbean然后转换成prometheus 数据格式,mbean数据比较多的时候,循环就会比较多,cpu计算就会飙高。mbean中的数据有业务客户端的添加进去的,它的数据量是不可控的。

解决方案: 不读取所有的mbean数据,只读取指定的数据格式

http://www.lryc.cn/news/11667.html

相关文章:

  • Android 虚拟 A/B 详解(六) SnapshotManager 之状态数据
  • Python快速入门系列之一:Python对象
  • 【博客626】不同类型的ARP报文作用以及ARP老化机制
  • nacos discovery和config
  • 【算法数据结构体系篇class06】:堆、大根堆、小根堆、优先队列
  • 试题 算法提高 最小字符串
  • 已解决ImportError: cannot import name ‘featureextractor‘ from ‘radiomics‘
  • 乡村振兴研究:全网最全指标农村经济面板数据(2000-2021年)
  • C语言中用rand()函数产生一随机数
  • 关于系统架构
  • LeetCode 1237. 找出给定方程的正整数解
  • 【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置
  • 学习OpenGL图形2D/3D编程
  • 2023美赛思路 | A题时间序列预测任务的模型选择总结
  • PHP教材管理系统设计(源代码+毕业论文)
  • nps内网穿透工具
  • webpack打包时的热模块替代配置以及source-map
  • Seata架构篇 - TCC模式
  • 前端最全面试题整理
  • 大数据之-Nifi-监控nifi数据流信息_监控数据来源_bub轻松复现---大数据之Nifi工作笔记0011
  • CUDA编程接口
  • 惠普打印机使用
  • Ubuntu升级cmake
  • CCNP350-401学习笔记(101-150题)
  • 分享112个HTML娱乐休闲模板,总有一款适合您
  • k8s快速入门
  • NG ZORRO知识点总结
  • go中的值方法和指针方法
  • OKR常见挑战以及应对方法探讨
  • SpringAMQP消息队列(SpringBoot集成RabbitMQ)