Невозможно редактировать / proc / sys / kernel / threads-max

1852
Anarkopsykotik

В настоящее время я создаю инструмент стресс-тестирования, и поэтому мне нужно довольно большое количество потоков. Я уже прошел все настройки, чтобы поднять предел, но есть последний параметр, верхний общесистемный предел /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значения.

Я действительно понятия не имею, почему он отказывается от моих правок, и я не смог найти никого с подобной проблемой, поэтому я был бы очень признателен, если бы кто-то мог объяснить, что происходит.

0
https://stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux quadruplebucky 6 лет назад 0
Вся проблема именно в том, что простой и очевидный метод не работает ... Anarkopsykotik 6 лет назад 0
Файлы в / proc / являются виртуальными и не могут быть отредактированы. (Попробуйте `$ du / proc /`, чтобы знать, что ничего нет!) .... Параметр "kernel.threads-max = 200000" находится в другом месте ... Knud Larsen 6 лет назад 0
Они могут быть отредактированы, я сделал это для других настроек, а также изменил их на других машинах (тестовые серверы, на которых работает fedora) Anarkopsykotik 6 лет назад 0

1 ответ на вопрос

2
pim

Ответ лежит в 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, проблема выглядит как доступная оперативная память в недостаточном количестве.

Разве 0x3fffffff не больше, чем 2.000.000.000? Кроме того, даже оригинальные цифры или ниже не работали, хотя это могло быть действительно связано с ограничением на доступную оперативную память. Anarkopsykotik 6 лет назад 0
200 000 намного меньше, чем 0x3fffffff, как написано pim 6 лет назад 0
Что ж, Google врет мне или не гекса, тогда; p Но, во всяком случае, я почти уверен, что это связано с доступным оперативной памятью, так как настройка числа работает сейчас (не работала в прошлый раз, поэтому должна зависеть от фактически используемой оперативной памяти), но как только я поднимаюсь слишком высоко, оно возвращается к значению по умолчанию 96062 (которое должно быть рассчитано из моего физического барана) Anarkopsykotik 6 лет назад 0
Не проверено, но Wolfram Alpha сообщает 0x3fffffff = 1073741823, поэтому должно быть следующее: `` `echo kernel.threads-max = 1073741823 >> / etc / sysctl.conf```` `` echo 1073741823> / proc / sys / kernel / threads-max``` (http://www.wolframalpha.com/input/?i=0x3fffffff) James McGuigan 6 лет назад 0