Amazon Linux で ulimit 値を設定して、システムリソースのクォータを増やしたいです。
解決策
注: インスタンスとデータのバックアップを維持するのがベストプラクティスです。トラブルシューティングを行う前に、Amazon Elastic Block Store (EBS) を基盤とする Amazon マシンイメージ (AMI) を作成するか、Amazon EBS ボリュームのスナップショットを作成します。
ulimit 値を設定するには、ulimit コマンドを実行するか、システム設定ファイルを変更します。個々のユーザーのシステムリソースクォータを管理するには、ulimit コマンドを実行します。
ulimit コマンドは、以下のシステムクォータを制御します。
- nofile: 開いているファイル記述子の最大数
- nproc: 最大プロセス数
- stack: スタックサイズ
- core: コアファイルのサイズ
- memlock: ロックインされたメモリアドレス空間の最大値
システムクォータには、ハードクォータとソフトクォータの 2 種類があります。ソフトクォータは、システムにより適用される現在のクォータです。ソフトクォータを使用すると、ハードクォータに達するまでクォータを増減できます。ハードクォータは、ソフトクォータで増やすことができる最大値です。ルートユーザーのみがハードクォータを増やすことができます。
新しい ulimit 値を設定する前に、次のコマンドを実行してセッションのリソースクォータを確認してください。
ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30446
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
注: ハードクォータを調べる場合は、ulimit コマンドの -a を -Ha に置き換えます。
一時的な上限値を設定する
現在のシェルセッションに一時的な ulimit 値を設定するには、ulimit コマンドを実行します。-S オプションを使用してソフトクォータを設定し、-H オプションを使用してハードクォータを設定します。たとえば、開いているファイルの最大数を 10000 に変更するには、次のコマンドを実行します。
ulimit -Sn 10000
ulimit -Hn 10000
注: 10000 は、開いているファイルの最大数の目標値に置き換えます。
ルートユーザーの場合は、次のコマンドを実行すると、ulimit nproc 値を一時的に unlimited に設定できます。
ulimit -u unlimited
永続的な上限値を設定する
いずれの再起動でも永続的となる ulimit 値を設定するには、/etc/security/limits.conf ファイルを変更します。
limits.conf のバックアップファイルを、/etc/security/ フォルダ内に limits.conf.bk というファイル名で作成しておくのがベストプラクティスです。バックアップを作成するには、次のコマンドを実行します。
cp /etc/security/limits.conf /etc/security/limits.conf.bk
このファイルをテキストエディタで開き、/etc/security/limits.conf ファイルに次の行を追加します。
username soft nofile 65536
username hard nofile 65536
username soft nproc 4096
username hard nproc 8192
注: username は実際のユーザー名、65536 は開いているファイル最大数の目標値、4096 および 8192 はユーザープロセスの最大数に置き換えます。
これらの数値をすべてのユーザーに適用するには、* を使用します。
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 8192
変更を適用するには、ログアウトしてから再度ログインします。
ユーザーに対する nproc オープンファイルクォータを確認するには、次のコマンドを実行します。
無制限:
ulimit -u
ソフトクォータ:
ulimit -Sn
ハードクォータ:
ulimit -Hn
永続的な更新として、nproc クォータを unlimited に設定するには、次の設定で /etc/security/limits.conf を更新します。
username soft nproc unlimited
username hard nproc unlimited
注: username は、実際のユーザー名に置き換えます。
ulimit 値のベストプラクティス
ulimit 値を設定する際に、次のベストプラクティスを参照してください。
- アプリケーションとプロセスの特定の要件に合わせて ulimit 値を設定します。
- システムのリソース使用量を監視し、必要に応じて ulimit 値を調整します。
- 新しい ulimit 値を使用してアプリケーションとプロセスをテストし、正しく機能することを確認します。
- システム全体のクォータを設定するか、特定のユーザクォータを設定するかを確認してから、設定を調整します。
重要: 極端に高い値を設定したり、値を unlimited に設定したりすると、セキュリティと安定性の問題が発生する可能性があります。
関連情報
ulimit 値の設定方法 (Red Hat Enterprise Linux (RHEL) のウェブサイト)