【OceanBase诊断调优】——hpet(高精度时钟源)引起的CPU高问题排查

news2024/11/27 12:52:51

最近总结一些诊断OCeanBase的一些经验,出一个【OceanBase诊断调优】专题出来,也欢迎大家贡献自己的诊断OceanBase的方法。

1. 前言

昨天在问答区帮忙排查一个用户CPU高的问题,帖子链接:《刚刚新安装的OceanBase集群,没有任何数据,CPU占用非常高,这正常吗?》,总结了一下诊断经验,供其他人参考。

2. 问题现象

集群创建完成,创建了一个租户,还未曾导入数据,就出现cpu居高不下的情况,如图是其中一个节点的

3. 适用版本

OBServer 2.x版本, OBServer 3.x版本, OBServer 4.x版本

4. 排查过程

  1. 用obdiag收集了一下cpu高场景的信息obdiag gather scene run --scene=observer.cpu_high,从其中的top.txt信息中看到内核态使用CPU过高。

补充知识:在 Linux 的 CPU 状态信息中发现,有“%us、%sy、%ni、%id、%wa、%hi、%si、%st”等状态。
● us:用户空间占用CPU百分比(Host.cpu.user)
● sy:内核空间占用CPU百分比(Host.cpu.system)
● ni:用户进程空间内改变过优先级的进程占用CPU百分比
● id:空闲CPU百分比(Host.cpu.idle)
● wa:等待输入输出的CPU时间百分比
● hi:硬件中断
● si:软件中断
● st:实时

2. 使用 sudo perf top -p 命令采集到的数据如下图所示:

发现排在第一位置的是read_hpet, 占用了71.13%,而这个read_hpet是和时钟源相关的,有理由怀疑是时钟源导致的节点CPU高。

3. 【扩展排查】通过perf图去看调用关系

可以手动抓取 perf 调用图分析热点函数,步骤如下:

# 生成 perf 调用图
sudo perf record -o perf.data -e cycles -c 100000000 -p $(pidof -s observer) -g -- sleep 20
sudo perf script -i perf.data -F ip,sym -f > data.viz

当然也可以直接用obdiag gather perf命令来执行一键收集,此处省略了perf数据生成图片的操作,感兴趣的可以去查perf官网的资料。

其中热点函数跟 perf top 的结果一致。

查询相关资料,发现在Linux操作系统上tsc是首选时钟源——因为它的开销低很多,而hpet作为后备时钟源。一个千万次事件计数的基准测试显示,TSC花费约0.6秒,而HPET花费略微超过12秒,ACPI电源管理计时器花费约24秒。

4. 确认机器时钟源

cat /sys/devices/system/clocksource/clocksource0/current_clocksource
hpet

问题集群的时钟源为hpet,OceanBase官网文档中推荐时钟源为tsc,当 OBServer 服务器使用 hpet 作为时钟源类型时,获取系统时间的开销会比较大,进而可能导致内核态 CPU 使用率高

5. 解决办法

方法一:临时切换时钟源

# 第一步,查看当前系统可用的时钟源(输出包含 tsc 方可执行第二步)
cat /sys/devices/system/clocksource/clocksource0/available_clocksource

# 第二步,临时切换时钟源(重启后失效)
sudo bash -c 'echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource'

方法二:永久切换时钟源

如果可用时钟源列表中没有 tsc,也能生效,只要 CPU 支持 稳定tsc 特性即可(可通过执行命令 cat /proc/cpuinfo | grep constant_tsc 验证是否支持 ) 。

第一步,执行sudo vi /etc/default/grub。

在原配置行 GRUB_CMDLINE_LINUX 后面的参数值中追加参数设置 clocksource=tsc tsc=reliable clocksource_failover=hpet (表示启用 tsc 作为时钟源,如果 tsc 不可用则用 hpet 兜底)

# 将如上参数配置项修改为如下形式
# 如果之前已经有 clocksource 等参数的,就直接替换
GRUB_CMDLINE_LINUX="原参数设置 clocksource=tsc tsc=reliable clocksource_failover=hpet"

第二步,生成 grub.cfg 文件

grub2-mkconfig -o /boot/grub2/grub.cfg

然后重启系统,以便设置生效。

可通过如下命令行验证当前的时钟源是否修改成功:

# 查看 当前系统的时钟源
cat /sys/devices/system/clocksource/clocksource0/current_clocksource

参考文档:https://repost.aws/zh-Hans/knowledge-center/manage-ec2-linux-clock-source

6. 后续Action

obdiag已收纳该场景的需求,巡检项会在即将发布的obdiag 2.1.0 中带上。CPU场景的经验也会沉淀到obdiag的代码中,敬请期待。

7. 附录

  • obdiag 下载地址: OceanBase分布式数据库-海量数据 笔笔算数
  • obdiag 官方文档: OceanBase分布式数据库-海量数据 笔笔算数
  • obdiag github地址: GitHub - oceanbase/oceanbase-diagnostic-tool: OceanBase Diagnostic Tool is designed to help OceanBase users quickly gather necessary information and analyze the cause of the problem.
  • obdiag SIG 营地: oceanbase-diagnostic-tool · OceanBase 技术交流

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

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

相关文章

leetcode 221 最大正方形面积

示例 3: 输入:matrix [["0"]] 输出:0 # 最大正方形面积 def max_square(matrix):m len(matrix)n len(matrix[0])if m 0 or n 0::return Nonemax_side 1dp [[0] * (n 1) for _ in range(m 1)]for i in range(1, m 1):fo…

AI大模型探索之路-训练篇1:大语言模型微调基础认知

文章目录 前言一、微调技术概述二、微调的必要性三、大模型的微调方法四、微调过程中的技术细节五、微调后的模型评估与应用总结 前言 在人工智能的广阔研究领域内,大型预训练语言模型(Large Language Models, LLMs)已经成为推动技术革新的关…

国产麒麟v10系统下打包electron+vue程序,报错unknown output format set

报错如下: 报错第一时间想到可能是代码配置原因报错,查看代码似乎感觉没啥问题 又查看具体报错原因可能是因为icon的原因报错,后面查阅发现ico在各系统平台会不兼容,也就是ico是给win下使用的,此处改下图标格式就ok&am…

【机器学习】近邻类模型:KNN算法在数据科学中的实践与探索

近邻类模型:KNN算法在数据科学中的实践与探索 一、KNN算法的基本原理二、KNN算法的变种与改进三、KNN算法的Python实践四、总结与展望 在数据科学领域,分类和回归是两大核心问题。随着大数据时代的到来,传统参数化模型在某些复杂场景中已难以…

Selenium IDE 常见错误笔记

错误1:Failed:Exceeded waiting time for new window to appear 2000ms 这个错误通常出现在第一次运行时,有两个原因: Firefox阻止了弹出式窗口,在浏览器设置里允许这个操作即可。 有些网站设置了反扒机制,脚本运行…

数据结构复习指导之队列

文章目录 队列 考纲内容 复习提示 1.队列的基本概念 1.1队列的定义 1.2队列常见的基本操作 1.3重要考点 2.队列的顺序存储结构 2.1队列的顺序存储 2.2循环队列 2.3循环队列的操作 2.4重要考点 3.队列的链式存储结构 3.1队列的链式存储 3.2链式队列的基本操作 3…

LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵)

旋转图像/矩阵的重点是寻找旋转前后对应位置的坐标关系。 示例: 图1 旋转图像/矩阵的输入输出示意图 代码: class Solution:def rotate(self, matrix):n len(matrix)for i in range(n // 2):for j in range(i, n - 1 - i):topleft matrix[i][j]ma…

线上申报开放时间!2024年阜阳市大数据企业培育认定申报条件、流程和材料

2024年阜阳市大数据企业培育认定申报条件、流程和材料,线上申报开放时间整理如下 一、2024年阜阳市大数据企业培育认定申报要求 (一)经营范围 申请认定的企业应当从事以下生产经营活动: 1.从事数据收集、存储、使用、加工、传输、…

Scrapy爬虫框架入门(豆瓣电影Top 250)

文章目录 Scrapy 官网Scrapy 文档GithubScrapy 简介项目结构爬虫实现XPath 教程创建 Scrapy 项目配置用户代理网页 dom 元素 IP 代理池IP代理池作用配置IP代理池申请IP代理池 Scrapy 官网 https://scrapy.org/ Scrapy 文档 https://docs.scrapy.org/en/latest/ Github htt…

快速入门Web开发(中)后端开发(有重点)

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 CSDN 图片导入做的不是很好,因此如果有没有…

Oracle 数据迁移同步优化(三)

简述 CloudCanal 最近再次对其 Oracle 源端数据同步进行了一系列优化,这些优化基于用户在真实场景中的反馈,具备很强的生产级别参考意义。 本文将简要介绍这些优化项,希望带给读者一些收获。 增量事件 SCN 乱序问题MISSING_SCN 事件干扰新…

信息系统项目管理师0069:数据运维(5信息系统工程—5.2数据工程—5.2.3数据运维)

点击查看专栏目录 文章目录 5.2.3数据运维1.数据存储2.数据备份3.数据容灾4.数据质量评价与控制记忆要点总结5.2.3数据运维 数据开发利用的前提是通过合适的方式将数据保存到存储介质上,并能保证有效的访问,还要通过数据备份和容灾手段,保证数据的高可用性。数据质量管理是在…

让直播和视频通话更精彩的实时换脸神器: 亲妈都未必认识

DeepFacelive:让直播和视频通话更精彩的实时换脸神器! 你是否想在直播或视频通话时,给观众带来惊喜和欢乐?你是否想尝试一下换脸的乐趣,展现出不同的自己?如果你的答案是肯定的,那么你一定不能错…

什么是云手机?云手机有什么用?

过去,我们手中的手机是我们生活、工作、娱乐的得力助手,但随着时代的变迁和技术的发展,我们需要的不仅仅是一部手机,而是一个更强大、更灵活的工具。在这个时候,云手机横空出世,成为了我们手机使用的新选择…

性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法

文章目录 一、前言二、加密接口1、什么是SM22、被测接口加密逻辑 三、准备工作四、JMeter 扩展实现步骤1:准备开发环境步骤2:了解实现方法步骤3:runTest 方法步骤4:getDefaultParameters 方法步骤5:setupTest 方法 五、…

MATLAB 向量

MATLAB 向量 向量是一维数字数组。MATLAB允许创建两种类型的向量 行向量 列向量 行向量 行向量通过将元素集括在方括号中并使用空格或逗号定界元素来创建。 示例 r [7 8 9 10 11] MATLAB将执行上述语句并返回以下结果- r 7 8 9 10 11 列向量 列向量 通过将元素集括在方…

GPU深度学习环境搭建:Win10+CUDA 11.7+Pytorch1.13.1+Anaconda3+python3.10.9

1. 查看显卡驱动及对应cuda版本关系 1.1 显卡驱动和cuda版本信息查看方法 在命令行中输入【nvidia-smi】可以当前显卡驱动版本和cuda版本。 根据显示,显卡驱动版本为:Driver Version: 516.59,CUDA 的版本为:CUDA Version 11.7。 此处我们可以根据下面的表1 显卡驱动和c…

Android Studio实现内容丰富的安卓校园超市

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目代号168 1.开发环境 后端用springboot框架,安卓的用android studio开发 android stuido3.6 jdk1.8 idea mysql tomcat 2.功能介绍 安卓端: 1.注册…

# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(2)

从浅入深 学习 SpringCloud 微服务架构(六)Feign(2) 一、feign 的配置: 1、从 Spring Cloud Edgware 开始,Feign 支持使用属性自定义 Feign。 对于一个指定名称的 FeignClient(例如该 Feign …

迅雷不限速破解方法

背景:现在迅雷和百度云的下载速度真的太恶心了,所以总有大佬可以采用厉害的方法进行破解,在网上看了一圈,很多都是骗人或者是无效的,找了一个靠谱的方法,亲测速度能达到10M以上,非常给力。 以下…