码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【OceanBase诊断调优】——hpet(高精度时钟源)引起的CPU高问题排查


    最近总结一些诊断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过高。

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

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

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

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

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

    1. # 生成 perf 调用图
    2. sudo perf record -o perf.data -e cycles -c 100000000 -p $(pidof -s observer) -g -- sleep 20
    3. 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. 确认机器时钟源

    1. cat /sys/devices/system/clocksource/clocksource0/current_clocksource
    2. hpet

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

    5. 解决办法

    方法一:临时切换时钟源

    1. # 第一步,查看当前系统可用的时钟源(输出包含 tsc 方可执行第二步)
    2. cat /sys/devices/system/clocksource/clocksource0/available_clocksource
    3. # 第二步,临时切换时钟源(重启后失效)
    4. 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 兜底)

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

    第二步,生成 grub.cfg 文件

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

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

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

    1. # 查看 当前系统的时钟源
    2. 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 技术交流
  • 相关阅读:
    Qt+FFmpeg+opengl从零制作视频播放器-7.OpenGL播放视频
    从gles,vulkan到metal(二)-- 同步和内存
    Element Plus中Cascader 级联选择器(选择任意一级选项 - 更改下拉框选中方式)
    在项目中使用TS封装 axios,一次封装永久使用
    HTML知识小结之CSS
    【C++】超详细typedef用法和实例,看完不信你不会
    ⑮霍兰德EA*型如何选专业?高考志愿填报选专业
    AOP原理分析《二》- 如何开启AOP功能
    900年历史的万安桥失火!传统古建筑又该如何保护?
    MySQL | 单行函数 |时间函数 | 系统函数
  • 原文地址:https://blog.csdn.net/weixin_40449300/article/details/138181275
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号