【ユーリミット】

ulimit(リソース制限) とは?

最終更新:
💡 シェルから起動する処理の、資源上限を確認

シェルと、そこから起動するプロセスの資源上限を確認・設定する組み込みコマンド。ソフト・ハードの違い、ファイル記述子、サービスごとの設定を解説します。

📌 このページのポイント
ulimit:起動する処理の資源上限現在のシェルソフト:実際に適用する制限ハード:ソフトを変える範囲の天井ソフト上限 ≦ ハード上限ここから起動する子プロセス起動時に上限を引き継ぐ別の起動済みサービスこのシェルの変更が直接届くとは限らない
矢印は起動時の上限の継承です。値はOS・起動経路・設定によります。ソフトとハードは順番に変わる段階ではなく、対象プロセスに適用された値を確認します。
ひよこ ひよこ
ulimitは、PC全体の性能を上げる設定?
ペンギン先生 ペンギン先生
プロセスが使える資源の上限を扱うコマンドだよ。Bashならシェル自身と、そこから起動する処理に関係する。メモリを増設したり、起動済みの全サービスを変更したりするものではないんだ。
ひよこ ひよこ
まず何を確認する?
ペンギン先生 ペンギン先生
Bashならulimit -aで一覧、ulimit -Snでファイル記述子のソフト上限、ulimit -Hnでハード上限を表示できるよ。ここでは値を変更せず確認する例だよ。既定値はOSや起動方法で違うので、特定の値だと決め付けないようにね。
ひよこ ひよこ
ソフトとハードは、何が違う?
ペンギン先生 ペンギン先生
ソフトは実際に適用される上限、ハードはソフトを変更できる範囲の天井だよ。権限のないプロセスもハードを下げられるけれど、下げたハードを元へ上げるには権限が必要になる。気軽に変更しないことが大切なんだ。
ひよこ ひよこ
ファイル記述子は、保存するファイルの数?
ペンギン先生 ペンギン先生
開いたファイルだけでなく、ネットワークのソケットなどにも使うよ。Too many open filesが出たら、対象プロセスの上限と使用状況を確認する。閉じ忘れや使い方の問題もあるので、上限を上げるだけで解決するとは限らないんだ。
ひよこ ひよこ
サービスにも、同じ設定が効く?
ペンギン先生 ペンギン先生
起動経路を確認しよう。Linuxでは/proc/対象PID/limitsで、そのプロセスの上限を確認できる。ログイン時のPAM設定やsystemdのサービス設定などは別の仕組みだよ。今のシェルで変えても、すでに動いている別のサービスにはそのまま届かないんだ。
もっと詳しく知りたい人へ

ulimit -nに大きな数を付ければ、安全に増やせる?

Bashでは-Sや-Hを付けずに設定すると、ソフトとハードの両方を設定します。権限や現在のハード上限、アプリの対応、資源の使用量を確認してから設計します。数値だけを一律にコピーする方法は避けます。

limits.confに書けば、すべてのサービスに反映される?

limits.confはpam_limitsを使うログインセッションの設定です。systemdで起動するサービスにはLimitNOFILE等の設定があります。起動経路と対象を確認し、変更後は対象プロセスに実際に適用された値を確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ulimit」って出てきたら「シェルと、そこから起動する処理の資源上限を確認・設定するコマンド」と思えばだいたいOK!
📖 おまけ:英語の意味
「ulimit」 = 資源の使用上限を扱うシェルのコマンド
💬 Bashなどのシェルに組み込まれており、CPU時間やファイル記述子数などの上限を扱います。対応する項目や単位は環境で確認します。

参考資料

← 用語集にもどる