私は現在、ストレステストツールを構築しているので、かなりの数のスレッドが必要です。すでにすべての設定を行って制限を引き上げましたが、最後の設定が1つあります。それは、/proc/sys/kernel/threads-max
のシステム全体の上限であり、変更できないようです。
私は試した
sysctl -w kernel.threads-max=200000
nano
またはecho
を使用して手動で編集する
echo 200000 > /proc/sys/kernel/threads-max
/etc/sysctl.conf
を編集して実行
sysctl -f
それらをSudo
として実行すると、エラーは表示されません(新しい値も表示されます)が、もう一度確認しても値は変更されていません。 gedit
で値を編集しようとすると、
無効な引数"
私が試した値が何であれ、元の値でさえ。 pid_max
の値を変更しても問題ありませんでした。
なぜ編集を拒否するのか全くわからないし、同じような問題を抱えている人を見つけることができなかったので、誰かが何が起こっているのか説明してくれたらとてもありがたいです。
応答はman proc(5)
にあり、ここに興味深い部分があります。
/proc/sys/kernel/threads-max (since Linux 2.3.11)
This file specifies the system-wide limit on the number
of threads (tasks) that can be created on the system.
Since Linux 4.1, the value that can be written to
threads-max is bounded. The minimum value that can be
written is 20. The maximum value that can be written
is given by the constant FUTEX_TID_MASK (0x3fffffff).
If a value outside of this range is written to threads-
max, the error EINVAL occurs.
The value written is checked against the available RAM
pages. If the thread structures would occupy too much
(more than 1/8th) of the available RAM pages, threads-
max is reduced accordingly.
カーネルバージョンが4.1より大きいと仮定します。したがって、200000(試行する数)が0x3fffffff未満であるため、問題は利用可能なRAMでは不十分であるように見えます。