ulimit制限を超えました。

ulimit制限を超えました。

次のコマンドを実行します。

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各特定の制限で何が起こるのかを説明してください。

関連情報