CentOS Nginx (Too many open files in system) 系統限制檔案開啟數量

2015-06-26 CentOS, Nginx

最近在 Nginx Error Log 看到一則錯誤 “Too many open files in system”,造成網站頁面無法載入

 

2015/06/26 01:00:23 [error] 11064#0: *384012 FastCGI sent in stderr: "PHP message: PHP Warning:  require_once(/usr/share/nginx/html/session.php): failed to open stream: Too many open files in system in /usr/share/nginx/html/user.php on line 25

 

解決方式

在 Linux 中 ulimit 就像是系統的 Qos,可以用來限制系統的各項資源如 CPU、file size、processes、mem …等,在預設就有一項是比較保守的限制,在大量存取的系統會需要調整就是 open files

 

 

預設 Linux 最高可打開的檔案數量為 1024 個,必須調整 limit.conf

 

Step.1 查看目前系統 ulimit 限制

$ 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) 23078
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) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 23078
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

這邊很貼心的幫你加上參數說明,如果你要看 open files 就 -n、pipe size 就 -p 以此類推

 

 

Step.2 修改 limit.conf 設定

$ vim /etc/secuity/limit.conf

* soft nofile 655360
* hard nofile 655360
  • soft 是設定 “軟體” 資源限制
  • hard 是設定 “硬體” 資源限制

 

Step.3 設定生效

設定完之後可以登出後在登入就生效,reboot 測試也可以

如果想要立即生效也可以下命令直接修改當前限制

$ ulimit -Hn 655360
$ ulimit -Sn 655360

 

 

 

 

如果調高了還是不夠,那就必須從問題源去查起,用 lsof  就可以查看目前檔案開啟的數量,找到根源

$ lsof | wc -l
4000

 

 

 

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱