Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxで「開いているファイルが多すぎます」エラーを修正するにはどうすればよいですか?

多くの場合、「開いているファイルが多すぎます のエラーは、高負荷のLinuxサーバーで発生します。これは、プロセスが開いたファイル(ファイル記述子)が多すぎて、新しいファイルを開くことができないことを意味します。 Linuxでは、プロセスまたはユーザーごとにデフォルトで最大オープンファイル制限が設定されており、値はかなり小さくなっています。

この記事では、Linuxで開いているファイルの最大数の現在の制限を確認する方法と、ホスト全体、個々のサービス、または現在のセッションで制限を変更する方法を学習します。

Linuxでの「開いているファイルが多すぎます」エラーと開いているファイルの制限

まず、「開いているファイルが多すぎます」というエラーが表示される場所を見てみましょう。ほとんどの場合、NGINX / httpd Webサーバーまたはデータベースサーバー(MySQL / MariaDB / PostgreSQL)がインストールされているサーバーで、多数のログを読み取るときに発生します。たとえば、Nginxウェブサーバーが開いているファイルの制限を超えると、エラーが表示されます:

アップストリームへの接続中に
socket () failed (29: Too many open files) while connecting to upstream

Linuxで「開いているファイルが多すぎます」エラーを修正するにはどうすればよいですか?

このコマンドを使用すると、システムが開くことができるファイル記述子の最大数を取得できます。

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

現在のユーザーのオープンファイル制限は1024です。次のように確認できます。

# ulimit -n

Linuxで「開いているファイルが多すぎます」エラーを修正するにはどうすればよいですか?

2つの制限タイプがあります:ハード およびソフト 。ユーザーはソフト制限を変更できます(ただし、ソフト値はハード値を超えることはできません)。ハード制限値を変更できるのは、特権ユーザーまたはrootユーザーのみです。

ソフト制限を表示するには、次のコマンドを実行します:

# ulimit –nS

ハード制限値を表示するには:

# ulimit -nH

Linuxで最大オープンファイル制限を増やす方法

すべてのサービスが多数のファイルを開くことができるようにするには、LinuxOSの制限を変更できます。新しい設定を永続的にし、サーバーまたはセッションの再起動後にリセットされないようにするには、/etc/security/limits.confに変更を加える必要があります。 。次の行を追加します:

* hard nofile 97816
* soft nofile 97816

Ubuntuを使用している場合は、次の行も追加します:

session required pam_limits.so

このパラメータを使用すると、ユーザー認証後に開いているファイルの制限を設定できます。

変更を加えたら、ターミナルをリロードし、max_open_filesの値を確認します。

# ulimit -n

97816
サービスごとのオープンファイル記述子の制限の引き上げ

オペレーティングシステム全体ではなく、特定のサービスの開いているファイル記述子の制限を変更できます。例としてapacheを取り上げましょう。 systemctlを使用してサービス設定を開きます:

# systemctl edit httpd.service

必要な制限を追加します。例:

[Service]
LimitNOFILE=16000
LimitNOFILESoft=16000

Linuxで「開いているファイルが多すぎます」エラーを修正するにはどうすればよいですか?

変更を加えたら、サービス構成を更新して再起動します。

# systemctl daemon-reload
# systemctl restart httpd.service

値が変更されているかどうかを確認するには、サービスPIDを取得します。

# systemctl status httpd.service

たとえば、サービスPIDは3724です:

# cat /proc/3724/limits | grep "Max open files”

Linuxで「開いているファイルが多すぎます」エラーを修正するにはどうすればよいですか?

したがって、特定のサービスで開いているファイルの最大数の値を変更しました。

NginxとApacheの最大オープンファイル制限を設定するにはどうすればよいですか?

Webサーバーで開くファイルの数の制限を変更する場合は、サービス構成ファイルも変更する必要があります。たとえば、Nginx構成ファイル /etc/nginx/nginx.confで次のディレクティブ値を指定/変更します :

worker_rlimit_nofile 16000
負荷の高い8コアサーバーでworker_connections8192を使用してNginxを構成する場合は、8192 * 2 * 8(vCPU)= 131072を指定する必要があります。 worker_rlimit_nofile内。

次に、Nginxを再起動します。

apacheの場合、ディレクトリを作成します:

# mkdir /lib/systemd/system/httpd.service.d/

次に、limit_nofile.confファイルを作成します。

# nano /lib/systemd/system/httpd.service.d/limit_nofile.conf

Linuxで「開いているファイルが多すぎます」エラーを修正するにはどうすればよいですか?

追加する:

[Service]
LimitNOFILE=16000

httpdを再起動することを忘れないでください。

現在のセッションのオープンファイル制限を変更する

ターミナルセッションの最大オープンファイル制限を変更するには、次のコマンドを実行します。

# ulimit -n 3000

ターミナルを閉じて新しいセッションを作成すると、制限は /etc/security/limits.confで指定された元の値に戻ります。 。

システムの一般的な値を変更するには/proc / sys / fs / file-max 、/ etc / sysctl.confのfs.file-max値を変更します:

fs.file-max = 100000

そしてそれを適用します:

# sysctl -p

Linuxで「開いているファイルが多すぎます」エラーを修正するにはどうすればよいですか?

この記事では、Linuxで開いているファイル記述子の制限の値が小さすぎる場合の問題を解決する方法を学び、サーバーでこれらの制限を変更するいくつかのオプションについて説明しました。


  1. エラー1067を修正する方法:「プロセスが予期せず終了しました」

    エラー1067は、さまざまなWindowsサービスで発生する可能性があり、通常、サービスを開始するアクションを実行しようとすると、メッセージが表示されます。このエラーメッセージの最も一般的な発生は、SQLサービスとそれに類似したサービスです。 この問題を解決するために使用できる方法はかなりあり、同じ問題を経験した他のユーザーにとって成功することが証明されているいくつかの方法を選択しました。以下の方法に従って頑張ってください! 解決策1:サービスを管理する この問題は通常、さまざまな権限に関連しており、個人ユーザープロファイルにサービスコントロールへのアクセスを許可することで解決で

  2. Windows 11 で 0xc00007b エラーを修正する方法

    この記事では、Windows 11 の 0xc00007b エラーを修正するのに役立つハックをリストアップしました。 Windows OS の使用中にエラーが発生することは大したことではありません。まったく新しい Windows 11 に伴う以前のイテレーションは、バグやエラーでいっぱいであり、いつでもどちらか一方に出くわすことになります。 Windows 11 に侵入したいくつかの厄介なエラーの中で、エラー コード 0xc00007b は、アプリケーションを起動しようとしたときに発生し続ける最も一般的なエラーです。エラーはポップアップとして表示され、次のように表示されます。 [OK] を