Linuxでの「オープンファイルが多すぎる」エラーの修正
すべてのLinuxシステムには、同時に開くことができるファイルの数に上限が設定されています。この上限を超えると、Too Many Open Filesエラーが発生します。これはセキュリティ機能であり、システムが圧倒されるのを防ぐためのフェイルセーフです。なぜなら、何千ものファイルを開くことは通常必要なく、プログラムが異常であるか、システムをクラッシュさせようとする悪意のあるユーザーの兆候だからです。
管理者の裁量によっては、リソースを共有する多数のユーザーを持つ堅牢なシステムなど、何千ものファイルをシステムが開くことを許可すべき状況があるかもしれません。 このチュートリアルでは、LinuxでのToo Many Open Filesエラーを修正する方法を示します。これには、ulimitコマンドを使用して制限を一時的に解除するか、/etc/security/limits.conf設定ファイルを編集して、同時に開くことができるファイル数を恒久的に増やすことが含まれます。両方の方法と必要なすべての情報について以下で説明します。
このチュートリアルでは、あなたは学びます:
- 同時に許可されるオープンファイルの数を確認する方法
ulimitコマンドでファイルの一時的な制限を設定する方法limits.confを編集してオープンファイルの永久的な制限を設定する方法
Linuxでの「オープンファイルが多すぎる」エラーの修正 - トラブルシューティング方法
ファイルが多すぎるエラーは、ユーザーまたはプロセスがシステムが現在許可している以上のファイルディスクリプタ(Linuxの用語で、ファイルや他のI/Oリソースの総称)にアクセスしようとしたときに発生します。以下の手順に従って、システムの制限を特定し、一時的な新しい制限と、許可されるオープンファイルの数に対する永続的な新しい制限を適用します。
システムの制限を超えた場合、次のようなエラーが表示されます:
bash: command: Too many open files
Linux管理者として、システムに課す制限を慎重に決定する必要があります。可能であれば、恒久的な変更を行うのではなく、一時的に制限を解除するべきです。一度に開くことのできるファイルが多すぎると、攻撃や多くのファイルを開こうとするバグのあるプログラムに対してシステムが脆弱になり、最終的にシステムリソースが圧倒されてしまいます。
まず、
ulimitコマンドを使って、システムが同時に開くことを許可されているファイルの数を確認しましょう。この情報と他の関連する制限を表示するには、-aオプションを使用するか、単に開いているファイルの数の制限を確認するために-nオプションを使用します。ulimit -a OR ulimit -n私たちの出力は、私たちのシステムが同時に1024ファイルを開くことができることを示しています。これは非常に典型的でデフォルトの設定であり、ほとんどの単一ユーザーシステムには十分です。しかし、仮想プライベートサーバーの顧客に貸し出されるような共有サーバーでは、この制限は非常に不十分です。
ユーザーが同時に開けるファイルの数(ファイルディスクリプタ)の制限を変更するには、
-nオプションの後にファイルの数を指定します。このコマンドにより、ユーザーは同時に2000ファイルを開けるようになります。ulimit -n 2000知っていましたか? ulimitコマンドで設定されたすべての制限は、現在の Bash シェルのみに適用されます。システム全体にわたって永続的な変更を加えるには、/etc/security/limits.confファイルを変更する必要があります。次に、
/etc/security/limits.confファイルでシステム全体で使用できるオープンファイルの数を永久に変更する方法を見てみましょう。ファイルを開くにはroot権限を使用します。この例ではnanoを使用しますが、お好みに応じて別のテキストエディタを使用しても構いません。sudo nano /etc/security/limits.confこのファイルの最後に、私たちはユーザーに対して全体で強制されるいくつかの厳しい制限を課します。一般的な構文は次のようになります:
[domain] [type] [item] [value][domain]はユーザー名、グループ名、またはワイルドカード(全てに適用するため)になる可能性があります。[type]は「ソフト」または「ハード」のいずれかで、適用したい制限の種類に応じます。[item]は制限したいものであり、ここではnofileでファイル記述子制限を設定します。[value]は適用したい数字(許可されるオープンファイルの数)です。この情報はすべてファイル自体に要約されていますので、忘れた場合でも安心です。
‘ソフト’リミットと‘ハード’リミットの違いに注意してください:ハードリミットはルートレベルのアクセスによってのみ引き上げることができ、プロセスはリミットを下げることができます。これは、非ルートプロセスがリミットを超えることができないため、セキュリティ上非常に重要です。ソフトリミットは、特定のプロセスによっていつでも変更可能です。
ここに例があります。ユーザー
linuxconfigに対して、オープンファイルの制限を2000に設定しましょう。このために、ファイルの最後に次の行を追加します。linuxconfig hard nofile 2000もし全体のグループ、例えば
corporateのファイル数に制限を設けたい場合は、次の構文を使用します。これにより、グループは同時に5000ファイルを開くことができます。@corporate hard nofile 5000ユーザー、グループ、またはシステム全体のすべての人に制限を設けるには、
/etc/security/limits.confファイルに記載されている制限タイプのいずれかを使用してください。ファイルの編集が完了したら、変更を保存して終了し、新しい設定を適用します。
締めくくりの考え
このチュートリアルでは、LinuxシステムでのToo Many Open Filesエラーを修正する方法を見ました。Linuxは、同時に開いているファイルの数に制限を設けています。これは、セキュリティ機能であり、バグのあるプロセスまたは危険なコマンドを実行するユーザーによってリソースが簡単に圧倒されないようにするための追加の対策でもあります。今、あなたは制限を一時的または永続的に解除する方法を知っていますので、この知識を慎重に使用してください!


