はじめに
この実験では、Linux で ulimit 設定が正しく適用されているかどうかを検証する方法を学びます。ulimit -a を使用して現在のシェルの制限を表示することから始めて、リソース制限を確認するさまざまな方法を探索します。
その後、システム全体の設定ファイル /etc/security/limits.conf を調べて、ユーザーやグループに対する制限の設定方法を理解します。最後に、実行中のプロセスの /proc エントリを調べることで、そのプロセスに適用されている実際の制限を検証する方法を学びます。この実践的なアプローチにより、Linux 環境におけるリソース制限の機能と関連する問題のトラブルシューティング方法を包括的に理解することができます。
ulimit -a で制限を表示する
このステップでは、ulimit コマンドを使用して Linux のリソース制限について学びます。リソース制限は、プロセスが使用できるシステムリソースの最大量を制御します。これはシステムの安定性を保ち、単一のプロセスが利用可能なすべてのリソースを消費するのを防ぐために重要です。
ulimit コマンドを使用すると、現在のシェルセッションとそこから起動されるすべてのプロセスに対するこれらの制限を表示および設定できます。
現在のすべてのリソース制限を表示するには、ターミナルを開き、次のコマンドを入力します。
ulimit -a
Enter キーを押します。
次のような出力が表示されます。
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) <placeholder>
max locked memory (kbytes, -l) <placeholder>
max memory size (kbytes, -m) unlimited
open files (-n) <placeholder>
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) <placeholder>
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) <placeholder>
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
この出力には、さまざまなリソース制限が表示されます。たとえば、最大オープンファイル数 (-n)、最大ユーザープロセス数 (-u)、最大スタックサイズ (-s) などです。unlimited という値は、そのリソースに対して制限が設定されていないことを意味します。
これらの制限を理解することは、パフォーマンスの問題や予期しないプログラムの動作を診断するために重要です。たとえば、プログラムが十分な数のファイルを開けないために失敗する場合、ulimit -a で open files 制限を確認するのが最初の良いステップとなります。
オプションを指定することで、個々の制限を表示することもできます。たとえば、オープンファイル数の制限を表示するには、次のコマンドを実行します。
ulimit -n
これにより、現在のオープンファイル制限を表す単一の数値が出力されます。
ターミナルで ulimit -a コマンドを試してみましょう。表示されるさまざまな種類の制限に慣れてください。
続ける をクリックして次のステップに進みます。
cat /etc/security/limits.conf で制限設定を確認する
前のステップでは、ulimit -a を使用してシェルセッションの現在のリソース制限を確認しました。これらの制限は、多くの場合、/etc/security/limits.conf というファイルでシステム全体に設定されています。
このファイルは、Pluggable Authentication Modules (PAM) フレームワークの一部であり、管理者がログイン時にユーザーやグループに対するリソース制限を設定できるようにします。
cat コマンドを使用してこの設定ファイルの内容を表示してみましょう。cat はファイルの内容を表示するためのシンプルなコマンドです。
ターミナルを開き、次のコマンドを入力します。
cat /etc/security/limits.conf
Enter キーを押します。
limits.conf ファイルの内容が表示されます。出力は次のようになります(コメントや具体的なエントリは異なる場合があります)。
## /etc/security/limits.conf
#
#This file sets the limits for the resources available to the login session of
#users and groups. It is used together with the pam_limits module.
#
## (it is recommended to use #include files from /etc/security/limits.d/)
#
#* soft core 0
#root hard core unlimited
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc unlimited
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
このファイルは、次のようなシンプルな形式を使用しています。
<domain> <type> <item> <value>
<domain>: 制限が適用されるユーザーまたはグループを指定します。ユーザー名、グループ名(@で始まる)、またはすべてのユーザーを表す*を指定できます。<type>:softまたはhardを指定できます。soft制限は、ユーザーが(hard制限まで)増やすことができる現在の制限です。hard制限は、ルートユーザー以外が超えることができない最大制限です。
<item>: 制限対象のリソース項目(例:プロセス数の場合はnproc、オープンファイル数の場合はnofile)。<value>: 制限値。
# で始まる行はコメントで、無視されます。
## (it is recommended to use #include files from /etc/security/limits.d/) という行に注意してください。これは、システム固有またはアプリケーション固有の制限は、多くの場合、/etc/security/limits.d/ ディレクトリ内の個別のファイルに配置されることを示しています。これにより、メインの limits.conf ファイルをきれいに整理することができます。
この実験ではこのファイルを変更しませんが、その構造と目的を理解することはシステム管理にとって重要です。ulimit -a で確認した制限は、多くの場合、このファイルと limits.d 内のファイルの設定に基づいています。
続ける をクリックして次のステップに進みます。
cat /proc/self/limits でプロセス制限を確認する
前のステップでは、現在のセッション制限を表示するための ulimit と、システム全体の設定を行う /etc/security/limits.conf について学びました。次に、実行中のプロセスが自身の制限をどのように報告するかを見てみましょう。
Linux では、実行中のプロセスやシステムカーネルに関する情報を含む /proc という仮想ファイルシステムが提供されています。各実行中のプロセスには、そのプロセス ID (PID) を名前とする /proc 配下のディレクトリがあります。
特殊なディレクトリ /proc/self は、それにアクセスするプロセスの /proc ディレクトリを指すシンボリックリンクです。したがって、ターミナルで /proc/self にアクセスすると、現在のシェルプロセスの情報を見ることになります。
/proc/self ディレクトリ内には、特定のプロセスのリソース制限を含む limits というファイルがあります。
cat を使用して現在のシェルプロセスの制限を表示してみましょう。
cat /proc/self/limits
Enter キーを押します。
次のような出力が表示されます。
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes unlimited unlimited processes
Max open files 1048576 1048576 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals <placeholder> <placeholder> signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
この出力には、ulimit -a で見たのと同様に、各リソースの Soft Limit と Hard Limit が表示されています。ここに表示される値は、cat コマンドを実行したプロセス(シェル)に適用される実際の制限を反映しています。
cat /proc/self/limits の出力と、最初のステップでの ulimit -a の出力を比較してみてください。ulimit -a は現在のシェルプロセスの制限を報告するため、値が一致するはずです。
/proc ファイルシステムは、Linux システムとそのプロセスの状態を調査するための強力なツールです。各プロセスのディレクトリ内の limits ファイルは、特定のプロセスに適用されているリソース制限を直接確認する方法を提供します。
これで、Linux のリソース制限とやり取りする 3 つの異なる方法を学びました。ulimit -a で現在のセッション制限を表示する方法、/etc/security/limits.conf でシステム全体の設定を調べる方法、および /proc/<PID>/limits(または /proc/self/limits)を介して特定のプロセスの制限を確認する方法です。
続ける をクリックしてこの実験を完了します。
まとめ
この実験では、Linux で ulimit 設定が適用されているかどうかを確認する方法を学びました。まず、ulimit -a コマンドを使用してシェルセッションの現在のリソース制限を表示し、オープンファイル数、ユーザープロセス数、スタックサイズなどのさまざまな制限を理解しました。このコマンドは、現在のシェルから起動されたプロセスが継承する制限の概要をすぐに確認できます。
次に、cat を使用してシステム全体の設定ファイル /etc/security/limits.conf を調べました。このファイルは、ユーザーやグループに対するデフォルトのリソース制限を定義しており、ログイン時に適用されます。最後に、/proc/self/limits を調べることで、実行中のプロセスの実際のリソース制限を確認しました。このファイルには、現在のプロセスに適用される有効な制限が表示され、特定のプロセスインスタンスに適用される制限を確認する方法を示しています。



