解决SSDB在CentOS 7.2中打开文件数Max open files的问题(可能导致Too many open files)

可能SSDB的重点在PHP/CPP/Java/Go,python的库不是很好用。

原生的库不支持python 3,第三方库又很久没有更新过,很多功能不支持,最终选择使用自己patch了一下的ssdb.py

ssdb的社区不太活跃,Server端和文档也有一些待提升的地方,特别是打开文件数,比较扑朔迷离,解决了问题也不知道怎么Pull Request到官方。

官方文档摘抄:

『禁止使用 CentOS 7』,『你无法搞定 CentOS 7』

实际使用中发现,可能是作者被相关问题问的太多,有些反应过度。

老蔡料想,同类数据库大概率也会遇到类似问题,结果果然发现,在riak的文档中就有CentOS 7如何调整软硬连接数的说明:

第一步,修改系统打开文件限制

# 修改/etc/security/limits.conf
# 加入
* soft nofile 1020000
* hard nofile 1020000

将*替换成运行ssdb的用户名更佳。

系统全局文件大小也有相应办法调整

# 修改/etc/sysctl.conf
# 加入
fs.file-max = 1020000

第二步,增加进程打开文件限制

调整硬限制后,如果Max open files还是没有增加,可以通过在启动脚本中加入一行ulimit -n 1020000来实现。

修改配置后,记得重启进程,如果还是不行就重启一下系统。

然而怎么证明已经将进程的文件打开限制调整到了1020000呢,命令如下:

grep 'open files' /proc/$(cat /var/run/ssdb.pid)/limits
Max open files 1020000 1020000 files

第三步,配置leveldb模块的max_open_files【可忽略】

作者说,该参数几乎不可能导致问题,所以第三步一般来说可以忽略,但是既然官方文档并没有相关描述,就在此写一下。
它是限制leveldb模块的打开文件数的。

SSDB的leveldb的max_open_files

我们检测一下ssdb的日志

grep max_open_files /var/log/ssdb/log.txt
2016-07-10 04:11:46.731 [INFO ] ssdb-server.cpp(57): max_open_files : 500

发现日志中的最大文件打开数max_open_files还是500,离我们预期的还远

瞬间凌乱了有木有?

好吧,老蔡没办法,只有读一下源码,发现是可配置的,在配置文件中,相应位置配置如下

leveldb:
max_open_files: 1020000

再次重启进程,有没有发现整个世界都变美好了?