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

问题:启动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发现报错如下:
Tair部署dataserver报错too many open files浅析及解决方案_第1张图片
可见启动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的底层实现才行。


你可能感兴趣的:(Linux,学习笔记,Tair,分布式)