NGINX がクラッシュし続けます。開いているファイルが多すぎることが原因のようです。

NGINX がクラッシュし続けます。開いているファイルが多すぎることが原因のようです。

タイトルにもあるように、原因は不明ですが、Nginx サーバーが頻繁にクラッシュしているようです。

エラー ログから、問題の原因となる可能性のあるヒントがいくつか見つかりました。

オープンファイルの制限を増やそうとしましたが、ある程度の効果はありましたが、大きな効果はありませんでした。

2015/09/29 17:18:01 [crit] 20560#0: accept4() failed (24: Too many open files)
2015/09/29 17:18:01 [crit] 20560#0: accept4() failed (24: Too many open files)

制限を増やそうとしましたが、エラーログにもこれが表示されます

2015/09/29 17:18:02 [alert] 20632#0: setrlimit(RLIMIT_NOFILE, 300000000) failed (1: Operation not permitted)
2015/09/29 17:18:02 [alert] 20633#0: setrlimit(RLIMIT_NOFILE, 300000000) failed (1: Operation not permitted)
2015/09/29 17:18:02 [alert] 20560#0: recvmsg() truncated data

ファイル制限を増やす許可を与えるにはどうすればよいですか?

また、これがサーバーがクラッシュする原因なのでしょうか?

ありがとう!

さらにデータを確認したところ、ファイルを編集しましたが、何らかの理由でハード制限を確認すると 4096 と表示されます。

root@nalsec:~# sysctl -p
net.ipv4.ip_forward = 1
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.eth0.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.eth0.accept_ra = 0
fs.file-max = 2500000000000000000
root@nalsec:~# ulimit -Hn
4096

これは私のfs.file-maxとは対照的です

これを試してみたところ、権限がないと言われました(私はルートです)

root@nalsec:~# ulimit -Hn 1000000000
-bash: ulimit: open files: cannot modify limit: Operation not permitted

このファイルをすでに編集しましたが、効果はありませんでした。nano /etc/security/limits.conf

#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# End of file
nginx       soft    nofile  10240000000000000000000
nginx       hard    nofile  10240000000000000000000
*         hard    nofile      10240000000000000000000000
*         soft    nofile      10240000000000000000000000
root      hard    nofile      10240000000000000000000000
root      soft    nofile      10240000000000000000000000
www-data soft nofile 1024000000000000000
www-data hard nofile 1024000000000000000

答え1

fs.file-maxシステム全体の制限です合計システム上で開くことができるファイル記述子の数。プロセスごとの制限には影響しません。

個々のプロセスのファイル記述子の制限を増やすには、次のようにするのが最も簡単ですlimits.conf

# cat /etc/security/limits.d/nofile.conf
* soft nofile 10000
* hard nofile 1000000

setrlimitこれにより、すべてのプロセスにデフォルトで 10,000 個のファイル記述子が割り当てられ、必要に応じて1,000,000 個へのアップグレードをリクエストできるようになります ( 経由)。

関連情報