デーモン nginx 基本プロセスに対して「最大オープンファイル数」の ulimit を設定します。

デーモン nginx 基本プロセスに対して「最大オープンファイル数」の ulimit を設定します。

nginxDebian(8.3)で-daemonを実行しています。 nginxプロセスは、ログファイルに書き込もうとするときにリソースの制限に直面しますtoo many open files

デフォルトnginxプロセスはrootとして実行され、4つのワーカープロセスはwww-dataユーザー権限で実行されます。

nginx-masterとワーカーごとのプロセス制限構成を確認したときに奇妙なことが見つかりました。

cat /proc/{nginx-master-process-id}/limits
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 4096                 files

cat /proc/{nginx-any-worker-process-id}/limits
Max open files            30000                30000                files

各nginxワーカーは30,000個のファイルを開くことができます。

ただし、nginxのデフォルトプロセスでは1024個のファイルのみを開くことができますが、ハード制限はそれぞれ4096個のファイルです。

rootユーザーのulimit設定を確認したところ、そのような制限が定義されていないことがわかりました!この1024/4096設定はどこから来るのですか?

ルートulimit設定

# logged in as root
ulimit -H
unlimited

また、デーモン構成を確認しました。

/lib/systemd/system/nginx.service

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --signal QUIT --retry QUIT/5 --pidfile /run/nginx.pid
# Give Passenger a chance to clean up before being killed by systemd.
ExecStop=/bin/sleep 1
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

ここでも、ulimit設定は表示されません。

-masterプロセスの1024/4096ファイルなし制限を修正するにはどこで確認できますかnginx

ベストアンサー1

そうだ質問言い換えれば、私はsystemdサービスが/etc/security/limits.conf

LimitNOFILEsystemdを介して設定されたデーモンは、実際にはLimit.confの設定を意図的に無視し、サービス設定ファイルで設定を要求することがわかりました。

私のシステムデバイスファイルを更新すると問題が解決しました。

/lib/systemd/system/nginx.service

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --signal QUIT --retry QUIT/5 --pidfile /run/nginx.pid
# Give Passenger a chance to clean up before being killed by systemd.
ExecStop=/bin/sleep 1
TimeoutStopSec=5
KillMode=mixed
LimitNOFILE=30000 # <= This line was added

[Install]
WantedBy=multi-user.target

この問題へのいくつかのリンクとリソースは次のとおりです。

この方向を教えてくれた@ijaz-khanに感謝します。

おすすめ記事