本文共 3362 字,大约阅读时间需要 11 分钟。
切记更改完成后要重启服务才能生效。
最近用户使用量不断扩大,突然手机app提示网络错误,经过排查发现是MongoDB数据挂了,先启动服务,然后查看日志
发现了2019-05-06T09:51:36.626+0800 I NETWORK [initandlisten] Listener: accept() returns -1 errno:24 Too many open files2019-05-06T09:51:36.626+0800 E NETWORK [initandlisten] Out of file descriptors. Waiting one second before trying to accept more connections.2019-05-06T09:51:36.638+0800 F - [conn3177] Got signal: 6 (Aborted).
具体错误应该是 Too many open files
然后发现设置的默认打开文件数是1024
[bjjh@database]$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 31213max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 4096virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
现在就设置成65535
1)修改当前交互终端的limit值
查询当前终端的文件句柄数: ulimit -n 回车,一般的系统默认的1024. 修改文件句柄数为65535,ulimit -n 65535.此时系统的文件句柄数为65535.2)将ulimit 值添加到/etc/profile文件中(适用于有root权限登录的系统)
为了每次系统重新启动时,都可以获取更大的ulimit值,将ulimit 加入到/etc/profile 文件底部。 echo ulimit -n 65535 >>/etc/profile source /etc/profile #加载修改后的profile ulimit -n #显示65535,修改完毕!由于ulimit -n的脚本命令加载在第二部分,用户登录时由于权限原因在第二步还不能完成ulimit的修改,所以ulimit的值还是系统默认的1024。
解决办法:
修改linux的软硬件限制文件/etc/security/limits.conf.在文件尾部添加如下代码:
* soft nofile 10240* hard nofile 10240# vim /etc/pam.d/sshd[Add the line]session required /lib/security/pam_limits.so# service sshd restart5)如果仍然不行,那么需要修改如下文件:# vim /etc/ssh/sshd_config[May need to modify or add the line]UsePrivilegeSeparation no
设置完成后登陆root用户执行
ulimit -n检查在登陆普通用户进行检查如果查看更改是否生效[root@Oracle11G bjjh]# ps -ef|grep mongoroot 1752 1 0 May05 ? 00:16:40 mongod -f /etc/mongod.confroot 12887 11251 0 15:28 pts/1 00:00:00 grep mongo[root@Oracle11G bjjh]# cat /proc/1752/limits
Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 10485760 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 61865 61865 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 61865 61865 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us查看这个值是否更改成你设置的值,如果没有的话可以重启服务。
如何查看现在打开的文件数
[root@Oracle11G bjjh]# ps -ef|grep mongoroot 1752 1 0 May05 ? 00:16:40 mongod -f /etc/mongod.confroot 12887 11251 0 15:28 pts/1 00:00:00 grep mongo[root@Oracle11G bjjh]# cd /proc/1752/fd
[root@Oracle11G fd]# ls |wc -l102查看打开文件数转载于:https://blog.51cto.com/lsy666/2390455