Linux で ulimit 設定が適用されているかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux で ulimit 設定が正しく適用されているかどうかを検証する方法を学びます。ulimit -a を使用して現在のシェルの制限を表示することから始めて、リソース制限を確認するさまざまな方法を探索します。

その後、システム全体の設定ファイル /etc/security/limits.conf を調べて、ユーザーやグループに対する制限の設定方法を理解します。最後に、実行中のプロセスの /proc エントリを調べることで、そのプロセスに適用されている実際の制限を検証する方法を学びます。この実践的なアプローチにより、Linux 環境におけるリソース制限の機能と関連する問題のトラブルシューティング方法を包括的に理解することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/help("Command Assistance") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558811{{"Linux で ulimit 設定が適用されているかどうかを確認する方法"}} linux/help -.-> lab-558811{{"Linux で ulimit 設定が適用されているかどうかを確認する方法"}} linux/cat -.-> lab-558811{{"Linux で ulimit 設定が適用されているかどうかを確認する方法"}} linux/env -.-> lab-558811{{"Linux で ulimit 設定が適用されているかどうかを確認する方法"}} end

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 -aopen 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 LimitHard 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 を調べることで、実行中のプロセスの実際のリソース制限を確認しました。このファイルには、現在のプロセスに適用される有効な制限が表示され、特定のプロセスインスタンスに適用される制限を確認する方法を示しています。