ドメイン数が 256 を超えると、Nginx が "Too many open files" エラーで失敗します

Created:

2016-11-16 13:07:45 UTC

Modified:

2017-08-17 15:19:39 UTC

6

Was this article helpful?


Have more questions?

リクエストを送信

ドメイン数が 256 を超えると、Nginx が "Too many open files" エラーで失敗します

Applicable to:

  • Plesk 12.5 for Linux
  • Plesk 12.0 for Linux
  • Plesk 11.0 for Linux
  • Plesk 11.5 for Linux
  • Plesk 10.3 for Linux/Unix

症状

Nginx サポートが有効化されており、多数(256 超)のドメインがある場合、Nginx は次のエラーで失敗します。

2012-11-08T20:13:34+07:00 ERR (3): Apache config (13523804010.47553900) generation failed: nginx: [emerg] open() "/var/www/vhosts/test255.tld/statistics/logs/proxy_access_ssl_log" failed (24: Too many open files) nginx: configuration file /etc/nginx/nginx.conf test failed

原因

Nginx 仮想ホストは、物理ホスティングの各仮想ホストに対してログファイルを 4 つ開きます。

  1. proxy_access_log
  2. proxy_access_ssl_log
  3. webmail_access_log
  4. webmail_access_ssl_log

この結果、Nginx サーバによって、開いて入るファイルの最大数を超過してしまうことになります。

解決策

  1. Nginx 構成に、必要な ULIMIT 値を設定します。

    Debian/Ubuntu:

    # echo 'NGINX_ULIMIT="-n 4096"' >> /etc/default/nginx

    RHEL/CentOS/openSUSE:

    # echo 'NGINX_ULIMIT="-n 4096"' >> /etc/sysconfig/nginx
  2. Nginx 構成で、ワーカープロセスで許可されるオープンファイル数の上限が増加するように 'worker_rlimit_nofile' の値を設定します。

    # grep 16384 /etc/nginx/nginx.conf 
            worker_rlimit_nofile 16384;

    注記: CentOS 7、RHEL 7、Debian 7 など、SysV および LSB ではなく ' systemd ' を使用する OS の場合

    Systemd の LimitNOFILE を ' [Service] ' セクションで増加する必要があります。これには、 /usr/lib/systemd/system/nginx.service という名前のファイルを変更します。

    [Service] LimitNOFILE=4096

    ユニットの構成に 何らかの 変更を加えた場合、 systemd デーモンをリロードする必要があります。

    # systemctl --system daemon-reload
  3. Nginx サービスを再起動します。

    # service nginx restart
  4. ウェブサーバの構成を再生成します。

    # /usr/local/psa/admin/sbin/httpdmng --reconfigure-all

この後の手順は、Parallels Plesk 11.0.9 のみで必要になります。

  1. Nginx 構成に、必要な ULIMIT 値を設定します。

    Debian/Ubuntu:

    # echo 'ULIMIT="-n 4096"' >> /etc/default/nginx

    RHEL/CentOS/openSUSE:

    # echo 'ULIMIT="-n 4096"' >> /etc/sysconfig/nginx
  2. Nginx 構成で 'worker_rlimit_nofile' の値を設定し、ワーカープロセスで許可されるオープンファイル数の上限を増やします。

    # grep 16384 /etc/nginx/nginx.conf 
            worker_rlimit_nofile 16384;
  3. 以下のコマンドを実行して、必要なパッチをダウンロードして適用します。最初のコマンドによって、パッチを適用しているオリジナルファイルのバックアップが作成され、/root ディレクトリに保存されます。

    # cp /etc/init.d/nginx /root/nginx.backup

    Debian/Ubuntu:

    # wget http://kb.sp.parallels.com/Attachments/22839/Attachments/nginx.debian-ubuntu.patch # patch /etc/init.d/nginx nginx.debian-ubuntu.patch

    RHEL/CentOS:

    # wget http://kb.sp.parallels.com/Attachments/22839/Attachments/nginx.redhat-centos.patch # patch /etc/init.d/nginx nginx.redhat-centos.patch

    openSUSE:

    # wget http://kb.sp.parallels.com/Attachments/22839/Attachments/nginx.suse.patch # patch /etc/init.d/nginx nginx.suse.patch
  4. root および psaadm ユーザに対し、オープンファイルディスクリプタの上限を変更します。

    # egrep "root|psaadm" /etc/security/limits.conf
    root hard nofile 4096
    root soft nofile 4096
    psaadm hard nofile 4096
    psaadm soft nofile 4096

注意:変更を適用するためには、ターミナルに再度ログインする必要があります。

  1. ulimit -n 32768 」という行を /usr/local/psa/admin/sbin/nginx-config スクリプトの先頭に追加します。

    #!/usr/bin/env bash ulimit -n 32768
  2. sw-cp-server サービスと Nginx サービスを再起動します。

    # /etc/init.d/sw-cp-server restart # /etc/init.d/nginx restart
  3. ウェブサーバの構成を再生成します。

    # /usr/local/psa/admin/sbin/httpdmng --reconfigure-all

これらの設定は、マイクロアップデートのインストール中に上書きされません。

他にご質問がございましたら、リクエストを送信してください
ログインしてコメントを残してください。