切記更改完成後要重啓服務才能生效。linux
最近用戶使用量不斷擴大,忽然手機app提示網絡錯誤,通過排查發現是MongoDB數據掛了,先啓動服務,而後查看日誌
發現了vim
2019-05-06T09:51:36.626+0800 I NETWORK [initandlisten] Listener: accept() returns -1 errno:24 Too many open files 2019-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 filesbash
而後發現設置的默認打開文件數是1024服務器
[bjjh@database]$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 31213 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited
open files (-n) 1024網絡
pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 4096 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
如今就設置成65535session
1)修改當前交互終端的limit值
查詢當前終端的文件句柄數: ulimit -n 回車,通常的系統默認的1024.
修改文件句柄數爲65535,ulimit -n 65535.此時系統的文件句柄數爲65535. app
2)將ulimit 值添加到/etc/profile文件中(適用於有root權限登陸的系統)
爲了每次系統從新啓動時,均可以獲取更大的ulimit值,將ulimit 加入到/etc/profile 文件底部。
echo ulimit -n 65535 >>/etc/profile
source /etc/profile #加載修改後的profile
ulimit -n #顯示65535,修改完畢!ssh
因爲ulimit -n的腳本命令加載在第二部分,用戶登陸時因爲權限緣由在第二步還不能完成ulimit的修改,因此ulimit的值仍是系統默認的1024。 ide
解決辦法:
修改linux的軟硬件限制文件/etc/security/limits.conf. ui
在文件尾部添加以下代碼:
* soft nofile 10240
* hard nofile 10240
# vim /etc/pam.d/sshd [Add the line] session required /lib/security/pam_limits.so # service sshd restart 5)若是仍然不行,那麼須要修改以下文件: # vim /etc/ssh/sshd_config [May need to modify or add the line] UsePrivilegeSeparation no
設置完成後登錄root用戶執行
ulimit -n檢查
在登錄普通用戶進行檢查
若是查看更改是否生效
[root@Oracle11G bjjh]# ps -ef|grep mongo
root 1752 1 0 May05 ? 00:16:40 mongod -f /etc/mongod.conf
root 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 mongo
root 1752 1 0 May05 ? 00:16:40 mongod -f /etc/mongod.conf
root 12887 11251 0 15:28 pts/1 00:00:00 grep mongo
[root@Oracle11G bjjh]# cd /proc/1752/fd
[root@Oracle11G fd]# ls |wc -l
102查看打開文件數