Nginx報錯“Too many open files”的問題解決
1. 調(diào)整系統(tǒng)級文件描述符限制
a. 臨時生效(重啟后失效):
ulimit -n 65535 # 設(shè)置當(dāng)前會話的打開文件數(shù)限制
b. 永久生效:
編輯 /etc/security/limits.conf
,末尾添加:
* soft nofile 65535 * hard nofile 65535 nginx soft nofile 65535 # 如果Nginx以nginx用戶運(yùn)行 nginx hard nofile 65535
保存后退出,重啟系統(tǒng)或重新登錄會話生效。
2. 調(diào)整Nginx配置
編輯Nginx主配置文件(通常為/etc/nginx/nginx.conf
):
# 在全局塊添加 worker_rlimit_nofile 65535; # 設(shè)置每個worker進(jìn)程最大可打開文件數(shù) events { worker_connections 4096; # 每個worker允許的并發(fā)連接數(shù) multi_accept on; # 允許一次性接受多個連接 } http { ... }
- 關(guān)鍵公式:
worker_rlimit_nofile ≥ worker_connections × worker_processes
worker_processes
默認(rèn)為CPU核心數(shù),可通過auto
自動設(shè)置。
3. 檢查系統(tǒng)全局文件描述符上限
cat /proc/sys/fs/file-max # 查看系統(tǒng)全局限制 # 若需臨時修改: sysctl -w fs.file-max=200000 # 永久生效: echo "fs.file-max=200000" >> /etc/sysctl.conf sysctl -p
4. 檢查Nginx當(dāng)前打開文件數(shù)
# 獲取Nginx主進(jìn)程PID ps -ef | grep nginx | grep master # 查看該進(jìn)程打開的文件數(shù) lsof -p <PID> | wc -l
若接近限制,需進(jìn)一步優(yōu)化或排查泄漏。
5. 排查文件描述符泄漏
檢查后端應(yīng)用:確認(rèn)是否存在未關(guān)閉的數(shù)據(jù)庫連接、文件句柄或HTTP連接。
啟用Nginx長連接(減少頻繁開閉):
http { keepalive_timeout 60; keepalive_requests 100; }
日志分析:檢查是否有異常請求導(dǎo)致資源未釋放,如頻繁訪問50x.html
可能需優(yōu)化錯誤處理。
6. 重啟Nginx生效配置
nginx -t # 驗證配置語法 systemctl restart nginx # 根據(jù)系統(tǒng)選擇重啟命令
7. 監(jiān)控與驗證
實時監(jiān)控文件描述符:
watch -n 1 "ls /proc/$(pgrep nginx)/fd | wc -l"
日志跟蹤:觀察錯誤是否減少或消失。
補(bǔ)充說明
- 時間戳異常:日志中時間為2025年,需檢查系統(tǒng)時間或日志配置,避免誤導(dǎo)問題定位。
- 容器化環(huán)境:若Nginx運(yùn)行在容器中,需在宿主機(jī)和容器內(nèi)同時調(diào)整限制。
通過上述步驟,可有效解決因文件描述符不足導(dǎo)致的Nginx報錯問題。
到此這篇關(guān)于Nginx報錯“Too many open files”的問題解決的文章就介紹到這了,更多相關(guān)Nginx Too many open files內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx php-fpm中啟用慢日志配置(用于檢測執(zhí)行較慢的PHP腳本)
這篇文章主要介紹了nginx php-fpm中啟用慢日志配置,php-fpm慢日志slowlog設(shè)置可以讓我們很好的看見哪些php進(jìn)程速度太慢而導(dǎo)致的網(wǎng)站問題,可以讓我們方便的找到問題的所在,需要的朋友可以參考下2014-05-05nginx學(xué)習(xí)總結(jié)五(nginx反向代理)
Nginx代理與負(fù)載均衡配置與優(yōu)化技巧,方便需要的朋友2012-11-11