0
0
0
0
博客/.../

记录一次numa绑核的吐血经历

 du拉松  发表于  2025-12-31

一、背景

本次部署tidb集群使用了3个物理机和一个虚拟机进行部署。

物理机配置为96核,128GB内存,96核分4个numa节点,所以在每个物理机上部署1个tidb、1个pd和1个tikv分别绑定1个numa节点。

虚拟机作为数据库的代理服务器部署tiproxy。

tidb的版本为v8.5.3.

部署时指定的tikv.storage.block-cache.capacity为30GB

部署完成后,一小部分业务测试使用,业务并发也不大,导入数据大概6,70GB。使用过程都是正常的,业务也没有反馈失败的问题。但是查看监控,看到很多tikv的重启现象。接下来就是漫长的排查过程。

二、排查过程

  1. 首先查看监控看到3个节点最近时间都是轮番重启,内存达到30GB多一点就会重启。

0

  1. 查看操作系统的日志显示被系统oom-kill了:

0

  1. 但是为什么被系统oom-kill了呢,查看物理机的内存占比也很低呢。看看操作系统的numa绑定策略为default,这个是可以跨numa来调用内存的呢。

0

  1. 那是什么原因呢,查看tikv的日志,看到很多这种日志,这个不是rockdb向titan引擎同步数据么,一直这种日志:

0

  1. 有看了下数据库的配置,看到是开启了titan,并且设置的rocksdb.defaultcf.titan.min-blob-size为2KB,这个关了试试。

最后参考官网的关闭titan关闭该配置,地址:https://docs.pingcap.com/zh/tidb/stable/titan-configuration/#%E5%85%B3%E9%97%AD-titan

但是过了2个多小时,某个tikv又oom了。

6. 查看tikv的日志,没啥问题,监控中的除了内存在不断上涨也没看到什么问题。最后还是锁定到系统的操作日志中。

2月 30 14:28:09 localhost.localdomain kernel: impwkr-v0 invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
12月 30 14:28:09 localhost.localdomain kernel: CPU: 70 PID: 70511 Comm: impwkr-v0 Kdump: loaded Not tainted 4.19.90-2305.1.0.0199.81.uel20.aarch64 #1
12月 30 14:28:09 localhost.localdomain kernel: Hardware name: Inspur CS5280K2/BC82AMDYB, BIOS 7.38 01/04/2025
12月 30 14:28:09 localhost.localdomain kernel: Call trace:
12月 30 14:28:09 localhost.localdomain kernel:  dump_backtrace+0x0/0x1e0
12月 30 14:28:09 localhost.localdomain kernel:  show_stack+0x24/0x30
12月 30 14:28:09 localhost.localdomain kernel:  dump_stack+0xb4/0xf0
12月 30 14:28:09 localhost.localdomain kernel:  dump_header+0x48/0x1e4
12月 30 14:28:09 localhost.localdomain kernel:  oom_kill_process+0x348/0x390
12月 30 14:28:09 localhost.localdomain kernel:  out_of_memory+0x134/0x5a0
12月 30 14:28:09 localhost.localdomain kernel:  __alloc_pages_nodemask+0xdf0/0xe90
12月 30 14:28:09 localhost.localdomain kernel:  alloc_pages_vma+0x90/0x230
12月 30 14:28:09 localhost.localdomain kernel:  do_anonymous_page+0x1d4/0x6c0
12月 30 14:28:09 localhost.localdomain kernel:  __handle_mm_fault+0x468/0x4e0
12月 30 14:28:09 localhost.localdomain kernel:  handle_mm_fault+0xd8/0x1a0
12月 30 14:28:09 localhost.localdomain kernel:  do_page_fault+0x228/0x510
12月 30 14:28:09 localhost.localdomain kernel:  do_translation_fault+0xa8/0xbc
12月 30 14:28:09 localhost.localdomain kernel:  do_mem_abort+0x6c/0x120
12月 30 14:28:09 localhost.localdomain kernel:  el0_da+0x24/0x28
12月 30 14:28:09 localhost.localdomain kernel: Mem-Info:
12月 30 14:28:09 localhost.localdomain kernel: active_anon:572400 inactive_anon:1105 isolated_anon:0
                                                 active_file:14981 inactive_file:133783 isolated_file:0
                                                 unevictable:25 dirty:0 writeback:0 unstable:0
                                                 slab_reclaimable:4695 slab_unreclaimable:17158
                                                 mapped:11723 shmem:1248 pagetables:292 bounce:0
                                                 free:1282189 free_pcp:0 free_cma:0
12月 30 14:28:09 localhost.localdomain kernel: Node 2 active_anon:32314240kB inactive_anon:26112kB active_file:576kB inactive_file:704kB unevictable:448kB isolated(anon):0kB isolated(file):0kB m>
12月 30 14:28:09 localhost.localdomain kernel: Node 2 Normal free:28352kB min:28480kB low:61952kB high:95424kB active_anon:32314624kB inactive_anon:26112kB active_file:576kB inactive_file:0kB un>
12月 30 14:28:09 localhost.localdomain kernel: lowmem_reserve[]: 0 0 0
12月 30 14:28:09 localhost.localdomain kernel: Node 2 Normal: 269*64kB (UM) 59*128kB (U) 5*256kB (UM) 0*512kB 1*1024kB (U) 1*2048kB (U) 0*4096kB 0*8192kB 0*16384kB 0*32768kB 0*65536kB 0*131072kB>
12月 30 14:28:09 localhost.localdomain kernel: Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
12月 30 14:28:09 localhost.localdomain kernel: Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=524288kB
12月 30 14:28:09 localhost.localdomain kernel: Node 1 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
12月 30 14:28:09 localhost.localdomain kernel: Node 1 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=524288kB
12月 30 14:28:09 localhost.localdomain kernel: Node 2 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
12月 30 14:28:09 localhost.localdomain kernel: Node 2 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=524288kB
12月 30 14:28:09 localhost.localdomain kernel: Node 3 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
12月 30 14:28:09 localhost.localdomain kernel: Node 3 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=524288kB
12月 30 14:28:09 localhost.localdomain kernel: 150048 total pagecache pages
12月 30 14:28:09 localhost.localdomain kernel: 0 pages in swap cache
12月 30 14:28:09 localhost.localdomain kernel: Swap cache stats: add 0, delete 0, find 0/0
12月 30 14:28:09 localhost.localdomain kernel: Free swap  = 0kB
12月 30 14:28:09 localhost.localdomain kernel: Total swap = 0kB
12月 30 14:28:09 localhost.localdomain kernel: 2093968 pages RAM
12月 30 14:28:09 localhost.localdomain kernel: 0 pages HighMem/MovableOnly
12月 30 14:28:09 localhost.localdomain kernel: 25551 pages reserved
12月 30 14:28:09 localhost.localdomain kernel: 0 pages cma reserved
12月 30 14:28:09 localhost.localdomain kernel: 0 pages hwpoisoned
12月 30 14:28:09 localhost.localdomain kernel: Tasks state (memory values in pages):
12月 30 14:28:09 localhost.localdomain kernel: [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
12月 30 14:28:09 localhost.localdomain kernel: [   1522]     0  1522      922      652   393216        0          -250 systemd-journal
12月 30 14:28:09 localhost.localdomain kernel: [   1545]     0  1545      771      231   327680        0         -1000 systemd-udevd
12月 30 14:28:09 localhost.localdomain kernel: [   2052]    81  2052      156      114   327680        0          -900 dbus-daemon
12月 30 14:28:09 localhost.localdomain kernel: [   2056]     2  2056     1694      173   393216        0             0 rngd
12月 30 14:28:09 localhost.localdomain kernel: [   2058]     0  2058     4377      331   393216        0             0 sssd
12月 30 14:28:09 localhost.localdomain kernel: [   2059]     0  2059      149       99   327680        0             0 uharden_dbus_da
12月 30 14:28:09 localhost.localdomain kernel: [   2061]     0  2061     1282       82   393216        0          -500 irqbalance
12月 30 14:28:09 localhost.localdomain kernel: [   2068]   171  2068     7393      317   458752        0             0 pulseaudio
12月 30 14:28:09 localhost.localdomain kernel: [   2080]     0  2080     4396      354   458752        0             0 sssd_be
12月 30 14:28:09 localhost.localdomain kernel: [   2093]     0  2093     4580      714   458752        0             0 sssd_nss
12月 30 14:28:09 localhost.localdomain kernel: [   2094]     0  2094     4065      303   393216        0             0 sssd_pam
12月 30 14:28:09 localhost.localdomain kernel: [   2112]     0  2112      484      194   393216        0             0 systemd-logind
12月 30 14:28:09 localhost.localdomain kernel: [   2116]     0  2116     7556      472   327680        0             0 NetworkManager
12月 30 14:28:09 localhost.localdomain kernel: [   2135]     0  2135      397      169   393216        0         -1000 sshd
12月 30 14:28:09 localhost.localdomain kernel: [   2138]     0  2138    21331     1143   524288        0             0 tuned
12月 30 14:28:09 localhost.localdomain kernel: [   2146]     0  2146     3507       80   458752        0             0 crond
12月 30 14:28:09 localhost.localdomain kernel: [   2181]     0  2181      488      189   393216        0             0 login
12月 30 14:28:09 localhost.localdomain kernel: [   2135]     0  2135      397      169   393216        0         -1000 sshd
12月 30 14:28:09 localhost.localdomain kernel: [   2138]     0  2138    21331     1143   524288        0             0 tuned
12月 30 14:28:09 localhost.localdomain kernel: [   2146]     0  2146     3507       80   458752        0             0 crond
12月 30 14:28:09 localhost.localdomain kernel: [   2181]     0  2181      488      189   393216        0             0 login
12月 30 14:28:09 localhost.localdomain kernel: [   2182]     0  2182     3425       40   393216        0             0 agetty
12月 30 14:28:09 localhost.localdomain kernel: [   2263]   996  2263    46861      391   917504        0             0 polkitd
12月 30 14:28:09 localhost.localdomain kernel: [   2438]     0  2438    10519      920   458752        0             0 uos-license-age
12月 30 14:28:09 localhost.localdomain kernel: [   2439]     0  2439     2963      354   458752        0             0 rsyslogd
12月 30 14:28:09 localhost.localdomain kernel: [   2533]     0  2533     6470      395   458752        0             0 udisksd
12月 30 14:28:09 localhost.localdomain kernel: [   2973]     0  2973      382      220   393216        0             0 systemd
12月 30 14:28:09 localhost.localdomain kernel: [   2975]     0  2975      658      172   393216        0             0 (sd-pam)
12月 30 14:28:09 localhost.localdomain kernel: [   2982]     0  2982     3492       83   393216        0             0 bash
12月 30 14:28:09 localhost.localdomain kernel: [   3165]     0  3165     3424       85   327680        0             0 ping
12月 30 14:28:09 localhost.localdomain kernel: [   9341]     0  9341      144       65   327680        0          -900 uos-permissionm
12月 30 14:28:09 localhost.localdomain kernel: [   9772]     0  9772       98       46   393216        0             0 rdma-ndd
12月 30 14:28:09 localhost.localdomain kernel: [  55698]   994 55698      205       55   393216        0             0 chronyd
12月 30 14:28:09 localhost.localdomain kernel: [  69915]  1000 69915   837876   507211  6488064        0             0 tikv-server
12月 30 14:28:09 localhost.localdomain kernel: [  71102]  1000 71102    11356      415   458752        0             0 node_exporter
12月 30 14:28:09 localhost.localdomain kernel: [  71104]  1000 71104     3352       14   393216        0             0 run_node_export
12月 30 14:28:09 localhost.localdomain kernel: [  71105]  1000 71105     3330       15   393216        0             0 tee
12月 30 14:28:09 localhost.localdomain kernel: [  71268]  1000 71268    11485      172   458752        0             0 blackbox_export
12月 30 14:28:09 localhost.localdomain kernel: [  71269]  1000 71269     3352       14   327680        0             0 run_blackbox_ex
12月 30 14:28:09 localhost.localdomain kernel: [  71270]  1000 71270     3330       15   393216        0             0 tee
12月 30 14:28:09 localhost.localdomain kernel: oom-kill:constraint=CONSTRAINT_MEMORY_POLICY,nodemask=2,cpuset=/,mems_allowed=0-3,global_oom,task_memcg=/system.slice/tikv-20160.service,task=tikv->
12月 30 14:28:09 localhost.localdomain kernel: Out of memory: Kill process 69915 (tikv-server) score 967 or sacrifice child
12月 30 14:28:09 localhost.localdomain kernel: Killed process 69915 (tikv-server) total-vm:53624064kB, anon-rss:32061888kB, file-rss:399616kB, shmem-rss:0kB
12月 30 14:28:09 localhost.localdomain kernel: oom_reaper: reaped process 69915 (tikv-server), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
12月 30 14:28:09 localhost.localdomain systemd[1]: tikv-20160.service: Main process exited, code=killed, status=9/KILL
-- Subject: Unit process exited
  1. 日志中看到oom-kill:constraint=CONSTRAINT_MEMORY_POLICY,nodemask=2,cpuset=/,mems_allowed=0-3,这种字眼,去gpt搜索了一下反馈如下,这说明绑核限制了内存的跨numa访问。

0

  1. 为什么操作系统中的策略是default,而这里就绑定了呢,最后定位到tikv的自启脚本(一般是部署路径的/scripts/run_tikv.sh)发现如下配置,这说明强制绑定cpu和内存了,真相大白。

0

三、解决方式

根据发现的问题,就是numa绑核造成的内存不足,那么这里就好处理。

  1. 修改配置,修改tikv绑定和核数,我这里临时绑定了2个核心。这样就可以使用64GB内存。
  2. 调整tikv的参数,比如调小tikv.storage.block-cache.capacity更小。

四、总结

在tidb的使用过程中,真的是有很多小细节没有注意到造成严重的问题,吃一堑长一智,这次血的教训记录下来和大家共享,希望对大家有所帮助。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论