安装TiDB修改文件句柄数

【TiDB 使用环境】生产环境 /测试
【TiDB 版本】
【操作系统】
【部署方式】以no-sudo方式本地部署
【集群数据量】
【集群节点数】
【问题复现路径】
【遇到的问题:问题现象及影响】

按照文档修改/etc/security/limits.conf,但是需要重新登录才能生效,如何能保证立即生效?
试了直接ulimit -n 200000命令修改,然后启动集群sudo -iu tidb tiup cluster start tidb-test,
还是报错:
[FATAL] [common.rs:458] [“the maximum number of open file descriptors is too small, got 65535, expect greater or equal to 123880”] [thread_id=1]

image
这个是根据什么查出来的?明明已经配了
使用sudo -iu tidb ulimit -n查了,也已经是200000了

【资源配置】
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

你是用 tiup 安装 还是通过 tem 安装?

你可以参加这个活动,可以手把手带你安装

tiup安装,主要我们希望无人值守全自动化安装,所以要搞清楚原因,不然到时候还要手动干预。

tidb用户的文件句柄数没有修改

ulimit -n改的是当前会话,sudo -iu是开了新的会话

cat /proc/$pid/limits
可以确认当前进程文件句柄使用情况,确认是参数设置没生效还是确实用的太多了。

执行tiup命令都是通过ssh连接到各个机器的,你ssh到各个机器,然后执行下ulimit -a看下

不是,没sudo权限的话,tiup打不开对应的limits文件吧?

所以就一直查不到,以为你设置的是一个默认值。

tiup检查,是通过查看配置文件检查的?难道不是执行ulimit命令检查的吗?配置文件也不准啊,改了不见得生效

先确认65535这个报错咋出来的

要重启服务器的,你要提前把部署服务器提前设置好

试试在systemd服务配置 LimitNOFILE=200000

哪个文档说需要修改这个配置文件呢?
集群的服务都是 systemd 管理的,tiup 会管理这些服务的 service unit 文件,通过 LimitNOFILE 来配置;例如在 tidb-server 服务运行的机器上

$ sudo systemctl cat tidb-4000.service
# /etc/systemd/system/tidb-4000.service
[Unit]
Description=tidb service

[Service]
LimitNOFILE=1000000
...

可以这样看下生效的值(例如在 tidb-server 运行的机器上):

# 默认值
sudo systemctl show --property=DefaultLimitNOFILE
DefaultLimitNOFILE=524288

# tidb 服务的,看到的应该就是 systemd 里配置的
sudo systemctl show --property=LimitNOFILE tidb-4000.service
LimitNOFILE=1000000

tiup 所在的集群控制机器上,tidb 账户无法直接使用吗?为啥还 sudo 一下

sysctl -p

没生效吧

是的,一般修改系统配置是双管齐下的,修改配置文件可以确保重启后生效,执行sysctl -p确保当前会话临时生效,这样的好处就是总是生效的!

1 个赞

按之前问题描述应该是没有生效~

1 个赞