BR备份失败 failed to create new OS thread (have 50 already; errno=11)

【 TiDB 使用环境】
生产环境
【 TiDB 版本】
v4.0.8
【遇到的问题:问题现象及影响】
使用v4.0.9版本的BR指令在PD Leader节点备份集群时遇到如下报错:

runtime: failed to create new OS thread (have 50 already; errno=11)
runtime: may need to increase max user processes (ulimit -u)
fatal error: newosproc
其后的一堆stack trace就不贴了...

备份命令:

/home/tidb/br backup full --pd "${pd-leader}:2379" --storage "local:///br_backup/${cluster_name}/full/2023-04-23T17:57:14Z08:00" --ratelimit 120 --log-file /br_backup/${cluster_name}/full/log/2023-04-23T17:57:14Z08:00.log

报错显示errno=11的资源不足错误,我看了我的ulimit -u为4096,tidb用户下的进程数很少,主要是3个tikv-server,1个pd-server,1个tidb-server在跑。
但是修改ulimit -u为65536后确实可以备份了。
问题是我不可能有这么多的user processes,怎么会触发ulimit -u呢?goroutine也算不到user process中呀。

:thinking:是不是提问过这个问题了?

:disguised_face:
不好意思,看起来是重复了。
我都忘光啦应该是上次糊里糊涂改改就处理了印象不深。
问题还是一样的,报错显示的已创建数并不多,改了ulimit -u居然能处置掉。
查了一些资料,Go程序启动创建多个OS threads,这些都算在ulimit -u中(man setrlimit的RLIMIT_NPROC部分解释说:The maximum number of processes (or, more precisely on Linux, threads) that can be created for the real user ID of the calling process. Upon encountering this limit, fork(2) fails with the error EAGAIN.), EAGAIN就是errno=11。
所以放大ulimit -u是有效的,设置GOMAXPROCS可能也有效但可能影响所有go程序范围较大,还没测试。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。