Linuxでオープンファイル数の上限を増やす方法

Linuxでは、オープンファイル数の上限を変更することができます。 この数は、ulimitコマンドを使用して変更することができます。 これは、シェルまたはそれによって起動されるプロセスで利用可能なリソースを制御する能力を付与します。

Read Also: Linux の実行プロセスの制限をユーザーごとに設定する

この短いチュートリアルでは、開いているファイルおよびファイルの記述の現在の制限を確認する方法を紹介しますが、これを行うには、システムの root アクセスが必要です。

最初に、Linux システムで開いているファイル記述子の最大数を調べる方法を見てみましょう。

Find Linux Open File Limit

値は、

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

表示される数字は、ユーザーがログイン セッションごとに開くことができるファイル数を示しています。

たとえば、私の CentOS サーバーでは、制限は 818354 に設定され、私が自宅で実行している Ubuntu サーバーでは、デフォルトの制限は 176772 に設定されています。

Hard Limit と Soft Limit を確認したい場合は、以下のコマンドを使用します:

Check Hard Limit in Linux

# ulimit -Hn4096

Check Soft Limits in Linux

# ulimit -Sn1024

異なるユーザーの Hard と Soft 値を確認するには、確認したいユーザーに su で切り替えれば良いのです。

例:

# su marin$ ulimit -Sn1024
$ ulimit -Hn4096

How to Check System wide File Descriptors Limits in Linux

サーバーを実行している場合、アプリケーションによっては、開いたファイル記述子に対してより高い制限が必要になることがあります。

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

Set User Level Open File limits in Linux

上記の例では、グローバルな制限を設定する方法を示しましたが、ユーザーごとに制限を適用したい場合もあります。 そのためには、ユーザー root として、次のファイルを編集する必要があります:

# vi /etc/security/limits.conf

Linux 管理者であれば、このファイルとその内容に関して熟知していることをお勧めします。 異なるレベルでユーザー/グループを制限することにより、システムリソースの管理に関して大きな柔軟性を提供するので、その中のすべてのコメントを読んでください。

追加すべき行は次のパラメーターを取ります:

<domain> <type> <item> <value>

以下は、ユーザー marin に対してソフトおよびハード制限を設定する例です:

## Example hard limit for max opened filesmarin hard nofile 4096## Example soft limit for max opened filesmarin soft nofile 1024

Final thoughts

この短い記事では、開いたファイルの最大数に対するグローバルおよびユーザー レベルの制限を確認および設定する方法の基本例を示しました。

今回は表面をさらったに過ぎませんが、/etc/sysctl.conf および /etc/security/limits.conf についてより詳しく見て、読んで、その使用方法を学ぶことを強くお勧めします。 これらは、いつかあなたにとって大きな助けとなることでしょう。

コメントを残す

メールアドレスが公開されることはありません。