1. 程式人生 > >nginx:accept() failed (24: Too many open files)解決方法

nginx:accept() failed (24: Too many open files)解決方法

有一臺伺服器訪問量非常高,使用的是nginx ,錯誤日誌不停報以下錯誤:

2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
2010/05/26 08:53:49 [alert] 13576#0: accept() failed (24: Too many open files)

解決方法:

centos5.3 中 ulimit -n 為1024, 當Nginx連線數超過1024時,error.log中就出現以下錯誤:

[alert] 12766#0: accept() failed (24: Too many open files)

使用 ulimit -n 655350 可以把開啟檔案數設定足夠大, 同時修改nginx.conf , 新增 worker_rlimit_nofile 655350; (與error_log同級別)

這樣就可以解決Nginx連線過多的問題,Nginx就可以支援高併發。

另外, ulimit -n 還會影響到mysql 的併發連線數。把他提高,也就提高了mysql併發。

注意: 用ulimit -n 2048 修改只對當前的shell有效,退出後失效。

修改方法

若要令修改ulimits的數值永久生效,則必須修改配置文件,可以給ulimit修改命令放入/etc/profile裡面,這個方法實在是不方便,

還有一個方法是修改/etc/security/limits.conf

/etc/security/limits.conf 格式,檔案裡面有很詳細的註釋,比如

* soft nofile 655360

* hard nofile 655360

星號代表全域性, soft為軟體,hard為硬體,nofile為這裡指可開啟檔案數。

把以上兩行內容加到 limits.conf檔案中即可。

另外,要使 limits.conf 檔案配置生效,必須要確保 pam_limits.so 檔案被加入到啟動檔案中。檢視 /etc/pam.d/login 檔案中有:

session required /lib/security/pam_limits.so

修改完重新登入就可以見到效果,可以通過 ulimit -n 檢視。

參考:

http://gfllove.blog.163.com/blog/static/1515027200923010653628/

http://loamy.javaeye.com/blog/380150