社区版docker部署 CPU一直在50%左右持续

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】4.3.5LTS
【问题描述】使用docker部署的,空闲状态下cpu一直在50%左右,是什么原因呢?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!


2 个赞

推荐使用 obdiag 工具进行日志采集,并且将采集到的日志提供给我们以便确认问题所在。

日志采集场景: CPU高
日志采集命令: obdiag gather scene run --scene=observer.cpu_high

为了更好地帮助您分析问题,请您按照上述命令采集日志并上传给我们。此外,还需要请您提供以下信息:

  1. OceanBase 数据库的具体版本号是多少?
  2. Docker 部署时使用的资源配置(如 CPU 核心数、内存大小等)是什么?
  3. 是否有运行任何后台任务或定时任务?如果有,请描述这些任务的性质和频率。
  4. 除了 CPU 占用率较高外,是否还观察到其他异常现象(如内存占用、磁盘 I/O 等)?
  5. 是否对 OceanBase 进行了任何特定的参数调整?如果有,请列出相关参数及其值。

附上敏捷诊断工具 obdiag 使用帮助链接

2 个赞

image
这一列是CPU

1 个赞

CPU高的进程
image

1 个赞

根据您提供的信息,Docker 部署的 OceanBase 社区版在空闲状态下 CPU 占用率持续在 50% 左右。以下是可能的原因及解决方法:

可能原因分析

  1. 选举线程占用 CPU

    • 在 OceanBase 数据库中,选举线程会定期进行心跳检测和状态同步,即使在空闲状态下也会消耗一定的 CPU 资源。
    • 根据文档片段《5900.election_cpu_quota.md》,选举线程的 CPU 配额可能会导致较高的 CPU 使用率。
  2. sync_io_thread_count 参数配置

    • 根据文档片段《sync_io_thread_count → 使用说明》,sync_io_thread_count 参数会影响 IO 线程的数量。如果该参数配置不当,可能会导致过多的线程竞争 CPU 资源。
    • 当 CPU 核数小于或等于 16 时,线程数 = CPU 核数 * 6;当 CPU 核数大于 16 时,线程数 = 16 * 6 +(CPU 核数 - 16)* 2。
  3. 后台任务或定时任务

    • 如果有运行任何后台任务或定时任务,这些任务可能会占用较多的 CPU 资源。
  4. 系统监控工具的影响

    • 您提到使用了 top 命令查看 CPU 使用情况,某些系统监控工具本身可能会占用一定的 CPU 资源。

解决方法

  1. 检查选举线程的 CPU 配额

    • 登录到 OceanBase 数据库,执行以下 SQL 查询选举线程的 CPU 配额:
      SHOW PARAMETERS LIKE 'election_cpu_quota';
      
    • 如果选举线程的 CPU 配额过高,可以尝试调整该参数值。例如,将其设置为较低的值:
      ALTER SYSTEM SET election_cpu_quota=10;
      
  2. 调整 sync_io_thread_count 参数

    • 检查当前 sync_io_thread_count 参数的值:
      SHOW PARAMETERS LIKE 'sync_io_thread_count';
      
    • 根据实际的 CPU 核数调整该参数值。例如,如果 CPU 核数为 8,则可以将该参数设置为 48(8 * 6):
      ALTER SYSTEM SET sync_io_thread_count=48;
      
  3. 排查后台任务或定时任务

    • 检查是否有运行任何后台任务或定时任务,并评估其对 CPU 的影响。如果有不必要的任务,建议停止或优化这些任务。
  4. 减少系统监控工具的影响

    • 尽量减少使用 top 等系统监控工具的频率,或者考虑使用更高效的监控工具,如 htopglances

进一步诊断

如果以上方法未能解决问题,建议使用 OceanBase 的敏捷诊断工具 obdiag 收集更多诊断信息:

obdiag gather scene run --scene=observer.cpu_high

将采集到的日志提供给我们以便进一步确认问题所在。此外,还需要请您提供以下信息:

  • OceanBase 数据库的具体版本号。
  • Docker 部署时使用的资源配置(如 CPU 核心数、内存大小等)。
  • 是否有运行任何后台任务或定时任务?如果有,请描述这些任务的性质和频率。
  • 除了 CPU 占用率较高外,是否还观察到其他异常现象(如内存占用、磁盘 I/O 等)。
  • 是否对 OceanBase 进行了任何特定的参数调整?如果有,请列出相关参数及其值。

希望以上信息能够帮助您解决问题!

详情请参考:

  1. CPU 工具
  2. DBA_OB_AUX_STATISTICS
  3. ODP 性能分析
  4. 检查主机信息
  5. 集群总览
  6. sync_io_thread_count
  7. CDB_OB_AUX_STATISTICS
  8. 19900.server_cpu_quota_max.md
  9. 5900.election_cpu_quota.md

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

2 个赞

看看sync_io_thread_count参数是不是配置不对