Tair部署dataserver报错too many open files浅析及解决方案

启动Tair dataserver后,遇到'health'指令显示状态从alive变为dead,报错'failed too many open files'。原因是进程打开的文件数超过系统默认限制1024。解决方案包括:1) 修改dataserver配置文件中的ldb_max_open_file属性值;2) 使用`ulimit -n`命令设置系统允许的最大打开文件数为65535。通过测试,将`ulimit -n`值调整到1030及以上可解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:启动ds后进入tairclient用health指令查看状态,刚开始ds还是alive的
TAIR> health
              server               status
192.168.126.108:51910                alive

             migrate              ongoing
         isMigrating                false

              server                 ping
192.168.126.108:51910             0.284000

几秒后再health一下dataserver就dead了。于是关闭集群,进入/logs查看server.log发现报错如下:

可见启动ds后tair会打开形如tair_db_001022.stat的文件,编号从0到1022,每次到1022就挂了,报错就是failed too many open files. 最后是init buckets=1023
查阅相关博客得知linux系统进程打开文件数目是有限制的,通过ulimit -n查看系统默认值是1024
所以此时是因为进程同时打开的文件数已经超出了系统限制,导致dataserver挂了

解决方案:
1、在dataserver.conf中有一个叫ldb_max_open_file属性值,默认值是65535,可以修改这个值使这个值小于1024.
然而,我修改值为512,重启ds和cs后ds还是秒挂,再打开dataserver.conf确认db_max_open_file确实是设了512.可是为什么还是同样open到1022就挂了。而后往下瞄到一个属性:

原来被ldb_table cache_size覆盖了,由于刚接触tair,并不懂这个属性什么意思,有待后续学习。
最后放弃了这条路线...
2.上面说到ulimit -n 可以查看系统进程可以同时打开最大文件数,同时我们也可以通过这条指令设置最大值。
执行ulimit -n 65535后再启动ds和cs发现终于正常了。
那么ulimit -n 从1024到65535间到底哪个是阈值呢?
测试了1025、1030、2048结果显示1030及之后的都是正常的,所以1025-1030之间可能还存在一个阈值就不一一测试了。

至此,问题解决。摸着石头过河,效率真低。还需后面深入了解tair的底层实现才行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值