web-dev-qa-db-ja.com

/ proc / sys / kernel / threads-maxを編集できません

私は現在、ストレステストツールを構築しているので、かなりの数のスレッドが必要です。すでにすべての設定を行って制限を引き上げましたが、最後の設定が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の値を変更しても問題ありませんでした。

なぜ編集を拒否するのか全くわからないし、同じような問題を抱えている人を見つけることができなかったので、誰かが何が起こっているのか説明してくれたらとてもありがたいです。

2
Anarkopsykotik

応答は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では不十分であるように見えます。

4
pim