我有一个MongoDB服务器,用于打开连接的文件描述符。 我更改了/etc/security/limits.conf中的设置,以便每个用户获得65000个打开文件的软硬限制,并将会话需要pam_limits.so添加到/etc/pam.d/su,common-session,common -session-noninteractive,sshd。 服务器在更改后重新启动。
之后,ulimit -a产生具有65000个最大文件描述符的期望结果。 奇怪的是,虽然每个开始为任何特定用户的进程使用新的文件描述符最大值65000,但任何启动的MongoDB进程(不pipe用户)仍然只能获得最大1024个文件描述符。 我什至尝试打开一个文本文件作为mongodb用户,并使用65000的限制。
系统:
我正在使用一个暴发户脚本启动MongoDB实例,这是在这里:
pre-start script PORT=27027 mkdir -p /var/lib/mongodb${PORT} mkdir -p /var/log/mongodb limit nofile 65000 65000 limit nproc 65000 65000 end script start on runlevel [2345] stop on runlevel [06] script PORT=27027 ENABLE_MONGODB="yes" if [ -e /var/lib/mongodb${PORT}/mongod.lock ]; then rm /var/lib/mongodb${PORT}/mongod.lock; fi if [ ! -d /var/lib/mongodb${PORT} ]; then mkdir -p /var/lib/mongodb${PORT}; fi chown -R mongodb:mongodb /var/lib/mongodb${PORT} if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb \ --pidfile /var/lib/mongodb${PORT}/${PORT}.pid \ --exec /usr/bin/mongod -- \ --port ${PORT} \ --dbpath /var/lib/mongodb${PORT} \ --logpath /var/log/mongodb/mongodb${PORT}.log \ --logappend \ --maxConns = 50000 \ --replSet oascluster \ --oplogSize 200 \ --rest fi end script respawn respawn limit 20 30
我错过了一个设置的地方?
所以看起来MongoDB 1.6.5不能与限制nofile行一起工作。 您需要在脚本关键字后面放置ulimit -n X(其中X是您需要的文件描述符)。
脚本
ulimit -n 60000
PORT = 27027
...
我想使用预启动块的方法是为了更高版本的MongoDB。
另外需要注意的是,MongoDB有2万个连接的硬性限制,所以如果你设置的文件描述符高于这个值就没有关系。
另外一件事情是:启动和停止使用暴发户脚本是不一样的REstarting。 启动和停止在限制nofile命令上抛出错误,而重新启动则没有。