Nginx報(bào)Too Many Open Files總結(jié)
最近有臺(tái)nginx服務(wù)器(Linux環(huán)境)運(yùn)行的錯(cuò)誤日志,提示“Too many open files”,本文整理下我個(gè)人總結(jié)的解決方法:
1、檢查當(dāng)前nginx服務(wù)master 進(jìn)程 和 worker 進(jìn)程的文件句柄限制
(1)在 Nginx 運(yùn)行時(shí),檢查當(dāng)前 master 進(jìn)程的限制:
cat /proc/$(cat /var/run/nginx.pid)/limits|grep open.files Max open files 1024 4096 files
(2)檢查 worker 進(jìn)程:
ps --ppid $(cat /var/run/nginx.pid) -o %p|sed '1d'|xargs -I{} cat /proc/{}/limits|grep open.files
Max open files 1024 4096 files
Max open files 1024 4096 files
Max open files 1024 4096 files
Max open files 1024 4096 files
我們知道系統(tǒng)每打開一個(gè)文件,都會(huì)占用一個(gè)文件描述符,而系統(tǒng)打開文件描述符是有上限的。在centos下默認(rèn)值一般為1024,可以通過(guò)命令查看:
# ulimit -n 1024 # ulimit -a open files (-n) 1024
2、首先確定下系統(tǒng)內(nèi)核允許文件打開數(shù)量的上限(內(nèi)核級(jí)別的,默認(rèn)值為95086)
# sysctl -n -e fs.file-max
95086
調(diào)整方法:
# vi /etc/sysctl.conf
fs.file-max = 6815744
# sysctl -p
其他:比如限制fs.file-max最多只能使用內(nèi)存的10%
# grep -r MemTotal /proc/meminfo | awk '{printf("%d\n",$2/10)}'
有關(guān)系統(tǒng)核心配置可以查看相應(yīng)的man手冊(cè):man sysctl,man sysctl.conf。
3、修改/etc/security/limits.conf文件,設(shè)置打開的文件數(shù)量上限。(系統(tǒng)級(jí)別的)
# vi /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535
其中第一行soft表示所有用戶打開文件的數(shù)量限制為65535,如果超過(guò)這個(gè)數(shù)字則提示警告信息,但是依然可以打開文件。
第二行hard表示最大的打開文件數(shù)量不能超過(guò)65535,如果超過(guò)這個(gè)數(shù)字,則無(wú)法打開文件。
這里也可以針對(duì)具體的用戶進(jìn)行相應(yīng)的設(shè)定。例如針對(duì)nginx用戶進(jìn)行設(shè)定:
nginx soft nofile 65535 nginx hard nofile 65535
修改完這里之后,退出shell重新登錄下機(jī)器查看
# ulimit -n 65535 # ulimit -a open files (-n) 65535
注意:
1)、nofile代表文件句柄數(shù)量;soft nofile的值不能超過(guò)hard nofile的值
2)、如果修改完成,查看ulimit -n與ulimit -a顯示的結(jié)果依然是1024,排查如下:
(1)需要查看/etc/profile配置是否有設(shè)定ulimit相關(guān)配置,/etc/profile環(huán)境變量里的參數(shù)配置最優(yōu)先,會(huì)覆蓋limits.conf 里的配置
(2)在Centos7系統(tǒng)中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域縮小了。/etc/security/limits.conf的配置,只適用于通過(guò)PAM認(rèn)證登錄用戶的資源限制,它對(duì)systemd的service的資源限制不生效。因此登錄用戶的限制,通過(guò)/etc/security/limits.conf與/etc/security/limits.d下的文件設(shè)置即可。
對(duì)于systemd service的資源設(shè)置,則需修改全局配置,全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,同時(shí)也會(huì)加載兩個(gè)對(duì)應(yīng)目錄中的所有.conf文件/etc/systemd/system.conf.d/.conf和/etc/systemd/user.conf.d/.conf。system.conf是系統(tǒng)實(shí)例使用的,user.conf是用戶實(shí)例使用的。
# vi /etc/systemd/system.conf DefaultLimitNOFILE=100000 DefaultLimitNPROC=65535
(3)如果還是不生效修改配置sshd_config,編輯login、system-auth、sshd文件添加pam_limits.so
# vi /etc/ssh/sshd_config UsePAM yes # systemctl restart sshd # vi /etc/pam.d/login # vi /etc/pam.d/system-auth # vi /etc/pam.d/sshd session required pam_limits.so
3)、如果上述的方法均無(wú)法解決,可以直接將 ulimit -SHn 65536 配置到nginx啟動(dòng)腳本中(注意按第4點(diǎn)在nginx.conf配置文件中增加打開文件數(shù)量上限后操作。)
# vi /etc/init.d/nginx ulimit -SHn 65536 或是 # vi /usr/lib/systemd/system/nginx ulimit -SHn 65536 重新加載系統(tǒng)服務(wù) # systemctl daemon-reload # systemctl restart nginx
最后確認(rèn)nginx主進(jìn)程與work進(jìn)程的文件打開數(shù)
# cat /proc/$(cat /var/run/nginx.pid)/limits|grep open.files
# ps --ppid $(cat /var/run/nginx.pid) -o %p|sed '1d'|xargs -I{} cat /proc/{}/limits|grep open.files
4、修改nginx配置文件,設(shè)置打開文件數(shù)量上限。(程序級(jí)別的)
在nginx.conf配置文件中增加如下設(shè)置:
# vi nginx.conf worker_rlimit_nofile 65535;

該參數(shù)表示每個(gè)工作進(jìn)程可以打開的文件數(shù)量。作用域和worker_processes一樣。
修改了nginx文件,需要reload一下。
到此這篇關(guān)于Nginx報(bào)Too Many Open Files總結(jié)的文章就介紹到這了,更多相關(guān)Nginx報(bào)Too Many Open Files內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx中一個(gè)請(qǐng)求的count計(jì)數(shù)跟蹤淺析
這篇文章主要給大家介紹了關(guān)于nginx中一個(gè)請(qǐng)求的count計(jì)數(shù)跟蹤的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
windows下nginx的安裝使用及解決80端口被占用nginx不能啟動(dòng)的問題
這篇文章主要給大家介紹了關(guān)于windows下nginx的安裝使用,以及如何解決80端口被占用導(dǎo)致nginx不能啟動(dòng)的問題,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04
配置Nginx實(shí)現(xiàn)簡(jiǎn)單防御cc攻擊
本文主要介紹lua+Nginx下如何快速有效得防御CC攻擊。至于如何安裝Nginx就不詳細(xì)介紹了,閑話少說(shuō),大家請(qǐng)看示例2018-02-02
Nginx設(shè)置wordpress偽靜態(tài)的方法示例
偽靜態(tài)是相對(duì)真實(shí)靜態(tài)來(lái)講的,通常我們?yōu)榱嗽鰪?qiáng)搜索引擎的友好面,這篇文章主要介紹了Nginx設(shè)置wordpress偽靜態(tài)的方法示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-09-09
nginx 代理域名到另外一個(gè)域名的實(shí)現(xiàn)方法
本文主要介紹了nginx 代理域名到另外一個(gè)域名的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Nginx反向代理重寫URL的實(shí)現(xiàn)方案
nginx服務(wù)器代理前端項(xiàng)目,并且反代后端服務(wù)器,開發(fā)時(shí)使用沒有什么問題,部署后存在同樣請(qǐng)求根地址的情況,但是去調(diào)用后端接口就會(huì)出現(xiàn)報(bào)錯(cuò),最后通過(guò)重寫url解決問題,所以本文給大家介紹了Nginx反向代理重寫URL的實(shí)現(xiàn)方案,需要的朋友可以參考下2025-04-04

