tidb oom 疑问

请选择具体子版块发表问答帖子,多谢。
个人理解:当tidb server 需要的内存大于服务器可用的内存时,tidb server会因为内存溢出(OOM)重启。

最近遇到的问题:两个tidb server(都是单台机器部署)发生oom重启,当时监控显示机器可用内存还有10G+。有点不太理解,请多指教。

tidb server oom重启时,占用内存情况:

此时机器可用内存情况:

OOM日志:
[root@al-142-tidb01 ~]# dmesg -T | grep tidb-server
[Fri Nov 20 16:06:46 2020] [ 1074] 1000 1074 8327757 7936709 15606 34 0 0 tidb-server
[Fri Nov 20 16:06:46 2020] Out of memory: Kill process 1074 (tidb-server) score 965 or sacrifice child
[Fri Nov 20 16:06:46 2020] Killed process 1074 (tidb-server) total-vm:33311028kB, anon-rss:31747080kB, file-rss:0kB
[Fri Nov 20 16:06:47 2020] Out of memory: Kill process 1525 (tidb-server) score 965 or sacrifice child

1 个赞

从系统日志可以看出:
我们可以看到,这个tidb-server进程所占用的虚拟内存总量(total-vm)是33311028kB,即大约31.75GB。这里的anon-rss值(31747080kB)表示的是该进程拥有的不包含tmpfs(临时文件系统)文件的物理页框大小,也就是该进程真实占用的RAM大小,大约30GB。file-rss:0kB表示的是占用文件页框的大小,这里是0kB。

所以,从这个日志中,我们可以大致推断出,该tidb-server进程在被杀掉时,大约占用了31.75GB的虚拟内存和30GB的物理内存。
可以结合当前的总物理内存,当时正在执行的SQL,做一个测试

可以配置参数quato进行保护一下,防止进一步影响整个server的process

取决于你的参数设置。