Linuxでオープンファイルの制限を増やす方法
Linuxでは、開いているファイルの最大数を変更できます。この数はulimitコマンドを使用して変更できます。これにより、シェルまたはそれによって開始されたプロセスで使用可能なリソースを制御する能力が与えられます。
関連情報:ユーザーごとのレベルでLinuxの実行プロセスの制限を設定する
この短いチュートリアルでは、現在のオープンファイルおよびファイル記述子の制限を確認する方法を示しますが、そのためにはシステムへのルートアクセスが必要です。
まず、Linuxシステムで開いているファイルディスクリプタの最大数をどのように確認できるか見てみましょう。
Linuxのオープンファイル制限を見つける
値は次の場所に保存されています:
# cat /proc/sys/fs/file-max
818354
表示される数値は、ユーザーが1回のログインセッションで開くことができるファイルの数を示しています。その結果は、あなたのシステムによって異なる場合があります。
例えば、私の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 ウェブサーバーがあります。
Linuxでは、カーネルディレクティブfs.file-maxを編集することで、開くファイルの制限を増やすことができます。そのためには、sysctlユーティリティを使用できます。
Sysctl は、ランタイムでカーネルパラメータを設定するために使用されます。
例えば、オープンファイルの制限を500000に増やすには、以下のコマンドをルートとして使用できます:
# 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>
ユーザーマリンのためのソフトリミットとハードリミットを設定する例は以下の通りです:
## 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 について詳細に調べて学ぶことを強くお勧めします。これらはいつかあなたに大いに役立つでしょう。