Linuxで開くファイルの制限数を変更する3つの方法

オペレーティングシステムは、ファイルがアクセスのために開かれるときに、ファイルハンドルと呼ばれる番号をファイルに一時的に割り当てます。 メインメモリの特別な領域はファイルハンドル用に予約されており、この領域のサイズによって、一度に開くことができるファイルの数が決まります。 Linux上のプロセスは、適切に実行することを妨げるいくつかの制約によって制限されており、各プロセスにはいくつかの制限があります。 シェルは、プログラムが同時に開くことができるファイルハンドルの数を制限します。 この記事では、Linuxでオープンファイル制限の数を変更するために使用できるさまざまな方法を紹介します。

開くファイルの数を制限する理由

オペレーティングシステムは各ファイルを管理するためにメモリを必要とするため、開くことができるファイルの数の制限に直面する可能性があります。 プログラムとしてもできます close ファイルハンドラーを使用すると、使用可能なすべてのディスクスペースがいっぱいになるまで、必要なだけのサイズのファイルを作成できます。 この場合、セキュリティの1つの側面は、制限を課すことによってリソースの枯渇を防ぐことです。

Linuxでは、次の2種類の制限があります。

  • 柔らかい 制限 プロセスによっていつでも変更できる値です。
  • 難しい 制限 ソフト制限を設定して超えられない最大値をマークします

Linuxシステムで開いているファイル記述子の最大数は次のように表示されます。

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

この値は、ユーザーがログインセッションごとに開くことができるファイルの数を示していますが、システムによって結果が異なる場合があることに注意してください。 何らかの理由で、制限セットの値を増やす必要がある場合があります。 これが、Linuxシステムが、プロセスごとおよびシステムごとのオープンファイル数の最大数を変更することによってこれらの制限を変更する可能性(増加または減少)を提供する理由です。

1)ulimitコマンド

ulimitコマンドを使用すると、シェルで開くことができるファイルの数を増やすことができます。 このコマンドは bash 組み込みコマンドなので、影響を受けるのは bash そしてそこから立ち上げられたプログラム。 ulimitの構文は次のとおりです。

ulimit [options [limit]]

オプションは、制限されるものを定義します。 あなたは以下のようにいくつかのオプションを見ることができます

  • -a (現在の設定の受け渡し):ulimitに現在の設定を報告させます。
  • -f (ファイル制限)シェルによって作成される可能性のあるファイルのサイズを制限します
  • -n 開いているファイル記述子の数を制限します。
  • -H-S (ハード制限とソフト制限)オプションは他のオプションを変更し、それぞれハード制限またはソフト制限として設定されます。 その後、ハード制限を増やすことはできませんが、ソフト制限を増やすことはできます。 どちらのオプションも指定されていない場合、ulimitは指定された機能のハード制限とソフト制限の両方を設定します。

したがって、現在の制限を確認するには、次のようにします。

$ ulimit -a | grep open
open files (-n) 1024

以下のようにハード制限を確認できます。

$ ulimit -Hn
4096

そして以下のようなソフトリミット:

$ ulimit -Sn
1024

以下のように制限を編集できます

$ ulimit -n 3000

以下で確認できます。

$ ulimit -n 
3000

ここでの問題は、ログアウトしてログインするか、コンピューターを再起動すると、値がリセットされることです。 これらの制限をより永続的にするには、ユーザーの構成ファイルの1つを編集する必要があることに注意してください(.bashrc また .profile)またはシステム全体の構成ファイル(/etc/bashrc また /etc/profile)以下のように、ファイルの最後にulimitコマンドラインを追加します

# vim .bash_profile
ulimit -n 3000

これで、再起動しても、ユーザーが設定した制限は永続的になります。 ハード制限のみを増やすことを選択できます(-Hn)またはソフトリミット(-Sn)ただし、ソフト制限はどのユーザーでも設定できますが、ハード制限は一度設定するとrootによってのみ変更可能であることに注意してください。

2)プラガブル認証モジュール(PAM)モジュール

このような制限を課すには、Pluggable Authentication Modules(PAM)モジュールを使用するのが最適です。 pam_limits。 ほとんどの主要なLinuxディストリビューションは、このモジュールを標準のPAM構成の一部として使用しているため、一部のLinuxシステムにはすでに存在していますが、編集して構成する必要があります。 /etc/security/limits.conf ファイル。 このファイルには、次の4つの重要なフィールドが含まれています。

  • ドメイン: 制限が適用されるエンティティについて説明します。 これは、ユーザー名、グループ名(@groupnameの形式)、または全員に一致するアスタリスク(*)ワイルドカードにすることができます。 ただし、ワイルドカードはrootユーザーには適用されないことに注意してください。
  • タイプ: これ フィールドは、制限をハードまたはソフトとして指定します。 ハード制限はシステム管理者によって課され、どのような状況でも超えることはできませんが、ユーザーは一時的にソフト制限を超える可能性があります。 ダッシュ(-)を使用して、制限がハードとソフトの両方であることを示すこともできます。 ソフト制限はハード制限の値まで増加する可能性があることに注意してください
  • アイテム: 制限されているアイテムのタイプを指定します。 これは、nofile(開いているデータファイルの数)、fsize(ユーザーが作成したファイルのサイズ)、core(コアファイルのサイズ)などです。
  • 価値: 制限に適用される値を指定します

あなたはのために見ることができます example このファイルの内容は次のとおりです。

# tail -f -n 12 /etc/security/limits.conf 
#<domain>       <type>   <item>         <value>       
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

# End of file

すべてのユーザーの開いているファイルの最大数を編集するには、次のように追加できます。 example、ファイルの最後に以下の行を追加します。

# vim /etc/security/limits.conf
*       hard    nofile  20000
*       soft    nofile  15000

この後、ファイルを編集する必要があります /etc/pam.d/login

# vim /etc/pam.d/login
session required pam_limits.so

次に、ファイルを保存します。 結果は以下のように確認できます。

$ ulimit -Hn
20000

3)システム全体の制限

Linuxシステムでは file-max これは最大ファイル記述子(FD)であり、ulimitとfile-maxのデフォルト設定は、複数のユーザーがシステムを共有することを前提としています。 これが、これらの設定が各ユーザーが使用するリソースの数を制限する理由です。 Linuxで開くファイルの制限を増やすには、 /etc/sysctl.conf またはディレクティブを編集する fs.file-max

コマンドを使用して、開いているファイルの現在の値を確認できます

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

また、デフォルト値は次のように編集できます。

# sysctl -w fs.file-max=250000
fs.file-max = 250000

結果は以下のように確認できます

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

sysctlコマンドを使用すると、変更は次の再起動まで適用されます。 構成を永続化するために、直接編集することができます /etc/sysctl.conf 以下のファイル:

# vim /etc/sysctl.conf
fs.file-max=250000

あなたがの内容をリストする場合 /proc/sys/fs/file-max 、変更が直接有効になっていないことがわかります。 次に、以下のように、sysctlコマンドの-pオプションを使用して変更を直接適用する必要があります。

# sysctl -p
fs.file-max = 250000

現在、構成は永続的です