在Nginx優化的過程中,將 connections加大的時候Nginx發出警告
worker_connections exceed open file resource limit: 1024
此警告的問題是受限於Linux的最大文件數限制。
環境:centos6.5 64bit
ulimit -n
查看用戶打開的最大文件數:1024
此處的1024是每個進程打開的最大文件數,對於系統的最大限制:
more /proc/sys/fs/file-max
355828
file-max是整機可以打開的fd數目,對確定的進程仍然是1024個。
那么我們來修改我們的限制。
修改/etc/security/limits.conf文件,在文件中添加如下行:
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
就是限制了任意用戶的最大線程數和文件數為65535。
其中*為所有用戶的打開文件數限制,可用’*'號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;65535則指定了想要修改的新的限制值,即最大打開文件數(請注意軟限制 值要小於或等於硬限制)。修改完后保存文件。
修改/etc/pam.d/login文件,在文件中添加如下行: session required /lib/security/pam_limits.so 這是告訴Linux在用戶完成系統登錄后,應該調用pam_limits.so模塊來設置系統對該用戶可 使用的各種資源數量的最大限制(包括用戶可打開的最大文件數限制),而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設置這些限制值。修改完后保存此文件。
修改/etc/rc.local腳本,在腳本中添加如下行:
echo “65535"> /proc/sys/fs/file-max 這是讓Linux在啟動完成后強行將系統級打開文件數硬限制設置為65535。修改完后保存此文件。(了整機可以打開的fd數目,過大造成cup過高)
除了在系統中進行設定 nofile(fs.file-max) 值外,可以在 nginx.conf 中指定worker_process可以使用的nofile值,如: