Linux で開いているファイルの数の制限を増やす方法
Linux では、開いているファイルの最大量を変更できます。この数値はulimit コマンドを使用して変更できます。これにより、シェルまたはシェルによって開始されるプロセスで使用可能なリソースを制御できるようになります。
こちらもお読みください: ユーザーごとのレベルで Linux 実行プロセス制限を設定する
この短いチュートリアルでは、開いているファイルとファイルの説明の現在の制限を確認する方法を説明します。ただし、そのためには、システムへの root アクセス権が必要です。
まず、Linux システム上で開かれているファイル記述子の最大数を調べる方法を見てみましょう。
Linux のオープン ファイル制限を見つける
値は次の場所に保存されます。
cat /proc/sys/fs/file-max
818354
表示される数字は、ユーザーがログイン セッションごとに開くことができるファイルの数を示します。結果はシステムによって異なる場合があります。
たとえば、私のCentOSサーバーでは制限が818354に設定されていましたが、自宅で実行しているUbuntuサーバーではデフォルトの制限が176772 に設定します。
ハード制限とソフト制限を確認したい場合は、次のコマンドを使用できます。
Linux でのハード リミットの確認
ulimit -Hn
4096
Linux のソフト制限を確認する
ulimit -Sn
1024
さまざまなユーザーのハード値とソフト値を確認するには、「su」 を使用して、制限を確認したいユーザーにユーザーを切り替えるだけです。
例えば:
su marin
ulimit -Sn
1024
ulimit -Hn
4096
Linux でシステム全体のファイル記述子の制限を確認する方法
サーバーを実行している場合、一部のアプリケーションでは、開かれるファイル記述子に対してより高い制限が必要になる場合があります。その良い例はMySQL/MariaDB サービスやApache Web サーバーです。
Linux で開くファイルの制限を増やすには、カーネル ディレクティブ fs.file-max
を編集します。この目的のために、sysctl ユーティリティを使用できます。
Sysctl は、実行時にカーネル パラメータを構成するために使用されます。
たとえば、開いているファイルの制限を 500000 に増やすには、root として次のコマンドを使用できます。
sysctl -w fs.file-max=500000
次のコマンドを使用して、開いているファイルの現在の値を確認できます。
cat /proc/sys/fs/file-max
上記のコマンドを使用すると、行った変更は次回再起動するまで有効のままになります。これらを永続的に適用したい場合は、次のファイルを編集する必要があります。
vi /etc/sysctl.conf
次の行を追加します。
fs.file-max=500000
もちろん、必要に応じて番号を変更することもできます。変更を再度確認するには、次を使用します。
cat /proc/sys/fs/file-max
変更を有効にするには、ユーザーはログアウトして再度ログインする必要があります。制限をすぐに適用したい場合は、次のコマンドを使用できます。
sysctl -p
Linux でユーザー レベルのオープン ファイル制限を設定する
上記の例では、グローバル制限を設定する方法を示しましたが、ユーザーごとに制限を適用することもできます。そのためには、ユーザー root として次のファイルを編集する必要があります。
vi /etc/security/limits.conf
あなたが Linux 管理者である場合は、そのファイルとそのファイルに対して何ができるかをよく理解しておくことをお勧めします。さまざまなレベルでユーザー/グループを制限することにより、システム リソースの管理に関して優れた柔軟性を提供するため、そのコメントをすべてお読みください。
追加する必要がある行には、次のパラメータが必要です。
<domain> <type> <item> <value>
ユーザー marin にソフト制限とハード制限を設定する例を次に示します。
## Example hard limit for max opened files
marin hard nofile 4096
## Example soft limit for max opened files
marin soft nofile 1024
最終的な考え
この短い記事では、開かれるファイルの最大数に対するグローバルおよびユーザー レベルの制限を確認および構成する方法の基本的な例を説明しました。
ここでは表面をなぞっただけですが、/etc/sysctl.conf と /etc/security/limits.conf について詳しく調べて読むことを強くお勧めします。それらの使い方を学びましょう。彼らはいつかあなたにとって大きな助けとなるでしょう。