如何排查hpet导致的CPU高负载——《OceanBase诊断系列》之十

1. 前言

我在OceanBase问答社区协助用户排查了一个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)文档
  • obdiag github地址: GitHub - oceanbase/obdiag: obdiag (OceanBase Diagnostic Tool) is designed to help OceanBase users quickly gather necessary information and analyze the root cause of the problem.
  • obdiag SIG 营地: oceanbase-diagnostic-tool · OceanBase 技术交流
  • 第一篇如何修炼成“神医”——《OceanBase诊断系列》之一
    第二篇走进SQL审计视图——《OceanBase诊断系列》之二
    第三篇快速收集诊断信息,敏捷诊断工具obdiag应用实践——《OceanBase诊断系列》之三
    第四篇如何快速分析OB集群日志,敏捷诊断工具obdiag分析能力实践——《OceanBase诊断系列》之四
    第五篇防患未然,OceanBase巡检工具应用实践——《OceanBase诊断系列》之五
    第六篇obdiag帮你读懂全链路诊断日志——《OceanBase诊断系列》之六
    第七篇如何排查合并问题——《OceanBase诊断系列》之七
    第八篇轻松掌握锁冲突问题的排查方法——《OceanBase诊断系列》之八
    第九篇obdiag如何实现一键采集20+故障场景的诊断信息——《OceanBase诊断系列》之九​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀unittest编写测试用例🚀unittest测…

智慧医疗时代:探索互联网医院开发的新篇章

在智慧医疗时代,互联网医院开发正引领着医疗服务的创新浪潮。通过将先进的技术与医疗服务相结合,互联网医院为患者和医生提供了全新的互动方式,极大地提升了医疗服务的便捷性和效率。本文将深入探讨互联网医院的开发,介绍其技术实…

巧秒用AI写作工具做影视解说文案,效率高!

在自媒体内容输出的快节奏当下,影视解说已经成为一种受欢迎的内容形式。然而,创作高质量的影视解说文案往往需要花费大量的时间和精力。随着人工智能技术的不断发展,AI写作工具为我们提供了一种全新的、高效的解决方案。 AI写作工具利用先进的…

电商API接口接入电商平台实现品牌价格、销量、评论数据监控

电商数据接口API在现代电商运营中扮演着至关重要的角色。它不仅能够实现品牌价格、销量、评论数据的监控,还能帮助商家优化销售策略,提升业务效率。下面将详细探讨如何通过接入电商平台的API接口来实现这些功能: 选择适合的电商平台 主流平台…

思科模拟器--06.单臂路由升级版--多端路由互连实验--24.5.20

实验图纸如下: 第0步: 先放置六台个人电脑,一台交换机和一台2911路由器(千兆路由器(G0开头的)) 接着,用直通线将 PC0的F0,PC1的F0分别和交换机的F0/0, F0/1连接 交换机的F0/3和路由器的G0/0连接 PC2的F0,PC3的F0分别和交换机的F0/4, F0/5连接 交换机的F0/6和路由器的G0/1…

【杂七杂八】Huawei Gt runner手表系统降级

文章目录 Step1:下载安装修改版华为运动与健康Step2:在APP里进行配置Step3:更新固件(时间会很长) 目前在使用用鸿蒙4 111版本的手表系统,但是感觉睡眠检测和运动心率检测一言难尽,于是想到是否能回退到以前的版本&…

Elasticsearch 分析器的高级用法二(停用词,拼音搜索)

Elasticsearch 分析器的高级用法二(停用词,拼音搜索) 停用词简介停用词分词过滤器自定义停用词分词过滤器内置分析器的停用词过滤器注意,有一个细节 拼音搜索安装使用相关配置 停用词 简介 停用词是指,在被分词后的词…

Qt案例练习(有源码)

项目源码和资源:Qt案例练习: qt各种小案例练习,有完整资源和完整代码 1.案例1 项目需求:中间为文本框,当点击上面的复选框和单选按钮时,文本框内的文本会进行相应的变化。 代码如下: #include "dialog.h" …

Git提交和配置命令

一、提交代码到仓库 在软件开发中,版本控制是一个至关重要的环节。而Git作为目前最流行的版本控制系统之一,为我们提供了便捷高效的代码管理和协作工具。在日常开发中,我们经常需要将本地代码提交到远程仓库,以便于团队协作和版本…

AI大模型的口语练习APP

开发一个使用第三方大模型的口语练习APP涉及多个步骤,从需求分析到部署上线。以下是详细的开发流程和关键步骤,通过系统化的流程和合适的技术选型,可以有效地开发出一个功能丰富、用户体验良好的口语练习APP。北京木奇移动技术有限公司&#…

pip如何快速install packet

1、在后面加-i https://mirrors.aliyun.com//pypi//simple或https://pypi.tuna.tsinghua.edu.cn/simple pip install numpy -i https://mirrors.aliyun.com//pypi//simplepip install numpy1.21.0 -i https://pypi.tuna.tsinghua.edu.cn/simple2、需要注意的是,如果…

数据意外删除?安卓手机数据恢复教程来帮你解救

手机不仅仅是一个通讯工具,更是我们记录生活、工作、学习等各种信息的重要载体,无论是拍照、录音、录像,还是文字记录,手机都能轻松完成。可有时候我们会不小心删除一些重要的数据,这时候我们该怎么办呢?别…

查看bond接口详细信息

cat /proc/net/bonding/bondX 命令用于查看 Linux 系统中的网络绑定(bonding)接口的详细信息。在该命令中,bondX 是网络绑定接口的名称,其中 X 是数字,表示具体的网络绑定接口编号。 输出内容详解: 1. E…

Edge浏览器:重新定义现代网页浏览

引言 - Edge的起源与重生 Edge浏览器,作为Microsoft Windows标志性的互联网窗口,源起于1995年的Internet Explorer。在网络发展的浪潮中,IE曾是无可争议的霸主,但随着技术革新与用户需求的演变,它面临的竞争日益激烈。…

推荐网站(17)audiohub免费音乐平台

今天,我要向您推荐一个非常实用的网站——AudioHub。这是一个提供免费音乐的平台,特别适合需要无版权音乐资源的创作者、视频制作人、播客主持人以及任何需要背景音乐的项目。里面的音乐无版权,可商用。 链接直达:https://audiohu…

AWS EC2 连接 AWS RDS(Mysql)

1 创建RDS数据库 点击创建数据库 引擎选项 模板 设置 连接 2 EC2连接Mysql $ sudo yum list mariadb* Installed Packages mariadb-connector-c.x86_64 3.1.13-1.amzn2023.0.3 amazonl…

【uniapp】CSS实现多行文本展开收起的文字环绕效果

1. 效果图 收起状态 展开状态 2. 代码实现 <view class"word-wrap" id"descriptionTxt"><view class"fold-text" v-if"isFold"><text class"fold-btn" click"changFold">全文</text&g…

如何搭建sqli-labs靶场?(SQL注入的练习场)

目录 一、phpstudy(小皮面板的下载) 二、sqli-labs靶场的下载和靶场文件修改 三、网站的配置 四、访问网站 一、phpstudy(小皮面板的下载) 什么是phpstudy&#xff1f; 小皮面板是一款服务器集成环境的WEB面板&#xff0c;它的功能很强大&#xff0c;支持Web端管理&#xff…

智慧水务可视化大屏,一屏纵览水务信息。

智慧水务可视化大屏通常需要展现以下几类信息&#xff1a; 01.实时监测数据&#xff1a; 包括水源水质、水压、水位、水流速等实时监测数据&#xff0c;通过图表、曲线等形式展示&#xff0c;帮助监测人员了解当前水务系统的运行状态。 02.设备运行状态&#xff1a; 展示水泵…

多联机分户计费控制系统

中央空调多联机分户计费控制系统&#xff0c;针对国内常见几种品牌的多联机空调系统实行&#xff0c;远程控制与计费管理。系统采用MQTT网络协议&#xff0c;以订阅/发布模式实行设备感知&#xff0c;实现对室外机、室内机的状态监测、实时故障报警、累计分摊费用的实时数据传导…