OB-CE-4.0.0空跑模式下,CPU消耗却长期40%以上

【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】OceanBase_CE 4.0.0.0 (r100000272022110114-6af7f9ae79cd0ecbafd4b1b88e2886ccdba0c3be) (Built Nov 1 2022 14:57:18)
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【问题现象及影响】

【附件】

刚安装完,几乎没有写入多少数据,也没进行压力测试,但几个节点CPU消耗长期40%以上:

#node1
$ ps -eo pid,pcpu,cmd | egrep -i 'ob|ocean'"
 3341 42.6 /home/admin/oceanbase/bin/observer

#node2
25612 41.9 /home/admin/oceanbase/bin/observer

#node3
 9254 40.4 /home/admin/oceanbase/bin/observer
1 个赞

啥配置的机器

1 个赞

某云主机

$ free -ht
              total        used        free      shared  buff/cache   available
Mem:            15G        619M         10G        240K        4.6G         14G
Swap:           31G         20M         31G
Total:          47G        640M         42G

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
Model name:            Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
Stepping:              5
CPU MHz:               2500.000
BogoMIPS:              5000.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
L3 cache:              36608K
NUMA node0 CPU(s):     0-3
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
1 个赞

一直无解吗?

4个核有点小

4C的跑40%应该算正常吧

同样环境,部署TiDB,CPU就没跑这么高(几乎5%以内),OB这就正常了?

我是来自内核研发的颜然。你说的问题很清楚,我们内部也知道这个问题,并且也是后面会进行优化的工作项。

对于比较新的机器(3年以内的X86 CPU),空跑状态下,observer进程会消耗一个超线程核的50%以内,如果总共有4C,机器总CPU利用率应该在12%左右。如果你的空跑利用率超过这个量,可能要看下是否配置或者环境有问题,导致系统处于非正常状态。

相比较之前的3.1版本,4.0在空跑CPU上已经做了很多优化,有数倍的优化效果,但确实还存在不少CPU消耗,这些消耗来自于数据库的后台服务。OceanBase有大量的后台线程在完成内部需要的不同工作,比如Paxos的选举线程要定期更新自己的租约。再比如即使应用没有新的写入,为了更新归档和同步位点的目的,OceanBase内部也会以固定的频率产生新的日志写到日志文件里。还有缓存后台线程会执行缓存淘汰算法查看和更新缓存中的一些信息。等等

后面规划了针对这些消耗的优化工作,但不是一个PR能解决的问题,也不是某一个研发就能搞定所有的问题,针对不同的模块需要不同的解决方案,随着OceanBase对于小规格场景的更好支持,后面的版本你一定能看到越来越好的变化。

2 个赞

感谢,这样回复清晰多了。
附件是对observer & monagent 执行perf record -g -a -p pidof xx -- sleep 30的记录,可以看下有没用。
perf.data-monagent.gz (822.8 KB)
perf.data-observer.gz (1.0 MB)

麻烦帮忙把配置文件脱敏上传一下, 硬件配置(cpu/memory/硬盘)也麻烦说明一下