nginxで開いているファイルが多すぎるため、制限を引き上げることができない


22

サーバーはUbuntu 13.04(GNU / Linux 3.9.3-x86_64-linode33 x86_64)です。

nginxはnginx / 1.2.6です。

私はこれに数時間取り組んでいるので、これが私が得ているものであり、ここに私がやったことです。

tail -f /usr/local/nginx/logs/error.log
2013/06/18 21:35:03 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:05 [crit] 3426#0: accept4() failed (24: Too many open files)

Nginx実行中:

geuis@localhost:~$ ps aux | grep nginx
root      3422  0.0  0.0  39292   380 ?        Ss   21:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    3423  3.7 18.8 238128 190848 ?       S    21:30   0:13 nginx: worker process      
nobody    3424  3.8 19.0 236972 192336 ?       S    21:30   0:13 nginx: worker process      
nobody    3426  3.6 19.0 235492 192192 ?       S    21:30   0:13 nginx: worker process      
nobody    3427  3.7 19.0 236228 192432 ?       S    21:30   0:13 nginx: worker process      
nobody    3428  0.0  0.0  39444   468 ?        S    21:30   0:00 nginx: cache manager process

/etc/security/limits.confの変更されたソフト/ハード制限(ファイルの最後からの設定)

root soft  nofile 65536
root hard  nofile 65536

www-data soft nofile 65536
www-data hard nofile 65536

nobody soft nofile 65536
nobody hard nofile 65536

最大ファイルの読み取り

cat /proc/sys/fs/file-max
500000

そして/etc/pam.d/common-sessionで:

session required pam_limits.so

これを追加し、サーバーを適切に再起動して、nginxの場合、親プロセスのPIDを取得し、次のようにソフト/ハード制限をカウントします。

cat /proc/<PID>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

親プロセスは「root」として実行され、4つのワーカーは「nobody」として実行されます。

root      2765  0.0  0.0  39292   388 ?        Ss   00:03   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    2766  3.3 17.8 235336 180564 ?       S    00:03   0:21 nginx: worker process      
nobody    2767  3.3 17.9 235432 181776 ?       S    00:03   0:21 nginx: worker process      
nobody    2769  3.4 17.9 236096 181524 ?       S    00:03   0:21 nginx: worker process      
nobody    2770  3.3 18.3 235288 185456 ?       S    00:03   0:21 nginx: worker process      
nobody    2771  0.0  0.0  39444   684 ?        S    00:03   0:00 nginx: cache manager process

方法を知っているすべてを試し、Googleから取得できました。私がすることはできません増加にnginxのためのファイルの制限を取得します。

助けて?

回答:


32

次の行をnginxに追加して、プロセスを再起動します。

worker_rlimit_nofile 30000;

これにより、ワーカーはより多くのファイルを取得できます。その後、次の方法で確認できます。

su - nobody
ulimit -Hn
ulimit -Sn

これにより、新しいハード/ソフト制限が出力されます。

参照


6
worker_rlimit_nofileuWSGI設定のみを変更し、システム制限(これは私にとってはうまくいきました)を変更しない場合、を介して確認することはできませんulimit。代わりに、を直接見てください/proc/<pid of worker>/limits
ヤンファブリー14

ユーザー(nobody / www-data)はログアウトしてから再度ログインする必要があると思います。サーバーを再起動します。私のためのulimitは、その増加を示していますが、プロセスはまだcat / proc / {pid} / limits
felix

@felix OPは既にサーバーを再起動したと述べましたが、はい、これは必要です。
ネイサンC

3

Ubuntuでは、/ etc / pam.d / suを編集して、必要な行セッションを追加またはコメント解除しますpam_limits.so

また、/ etc / security / limits.confで、スペースではなく文字の間にTABSがあることを確認してください。


1

これらのファイルを編集した後、次のコマンドを実行してください

sysctl -p

次に、nginxを再起動します


1
効果はありません。制限は同じままでした。
ジュイス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.