只要注册ofo就送你10块钱,还等什么,快来注册吧
在nodejs启动时一次性开了200个Mongodb连接,目的是为了高并发时减少数据库连接耗时。如果做cluster开10个实例就有2000个连接了,这样就有些节点连接不到数据库的情况。
原因是Mongodb默认最大连接数只有819个,于是通过在启动里面加参数--maxConns=3000
来提高最大连接数。然后重启服务,但悲剧的是通过db.serverStatus().connections;
查看到最大连接数还是819
。原因是linux系统的限制,Linux系统默认一个进程最大文件打开数目为1024。需要在Mongodb开启前修改这个限制。在运行数据前运行ulimit -n
命令 。如果已经加入开机脚本,就要在脚本中启动前增加这行了。比如:
ulimit -n 20000
/usr/mongodb/bin/mongod --dbpath=/usr/mongodb/data/ --logpath=/usr/mongodb/log/mongodb.log --maxConns=3000 --fork
再查看就可以看到最大连接数增加了。
重启机器后仍有问题
解决问题:Invariant failure: ret resulted in status UnknownError 24: Too many open files at src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp 73
按照官方的建议https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings, 由于centos 6的最大进程连接数为1024,我们就增加一个限制设定的配置
Red Hat Enterprise Linux and CentOS 6 place a max process limitation of 1024 which overridesulimit settings. Create a file named /etc/security/limits.d/99-mongodb-nproc.conf with new soft nproc and hard nproc values to increase the process limit. See /etc/security/limits.d/90-nproc.conf file as an example.
按照官方推荐的设置
由于服务器只有openfiles不匹配且比推荐的小,另外process/threads比较大, 所以其中99-mongodb-nproc.conf的内容如下:
设计后重启机器,可用ulimit -a
看到值已经更改,问题解决。
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最快的浏览器
中国人都在使用的地球上最厉害的安全软件
中国人都在使用的地球上最好的看图王
中国人都在使用的地球上最快速的视频软件
中国人都在使用的地球上最全的视频软件
中国人都在使用的地球上最好最全的压缩软件
中国人都在使用的地球上最好的音乐播放器
中国人都在使用的地球上最安全的杀毒软件
中国人都在使用的地球上最全的影视大全