次のコマンドを実行します。
ulimit -a
それが提供する出力は次のとおりです。
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14881
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14881
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
問題はこの制限に達するとどうなりますか?制限に達し、今、いくつかの措置を講じる必要があることをどのように知ることができますか?
たとえば、max-user-processes が 819200 に達すると、新しいプロセスが起動しないという意味ですか?それとも、システムはほとんどのアイドルプロセスを正常に終了し、いくつかのスペースを解放しますか?それとも別のものかもしれませんか?
記載されている数字/制限によってシステムパフォーマンスにオーバーヘッドが追加されますか?
答え1
アプリケーションに代わってリソースを割り当てると、アプリケーションのリソース制限を超えるとリソース割り当てが失敗します。 「最大ユーザープロセス」値がNで、特定のユーザーに対してN個のプロセスが実行されている場合、fork()
システムコール(または関連)への呼び出しは失敗します。 「オープンファイル」の値がMで、M個のオープンファイルがある場合open()
(または関連)、システムコールへの呼び出しは失敗します。
これらの値は、システムが常にこれらの値を監視するため、システムパフォーマンスにオーバーヘッドを追加しません。
答え2
含む出力データは実際にはリソース制限ではありません。シェルがチートを書き、このリストに関係のない他の項目をたくさん追加するためです。
実際のリソース制限を知りたい場合は、チートにならないシェルを使用するか、ファイルを確認してください
/usr/include/sys/resource.h
RLIMIT_*
そのファイルでエントリを見つけます。
今、ソフト限界に達するとどうなりますか?
無視できる信号をプロセスに送信します。信号は次のとおりです。
SIGXCPU SIGXFSZ
ハード限界に達すると、プロセスは終了します。
これはすべての制限に適用されるわけではありません。確認するhttp://schillix.sourceforge.net/man/man2/getrlimit.2.html各特定の制限で何が起こるのかを説明してください。