pthread_create ENOMEM вокруг 32000 потоков - PullRequest
1 голос
/ 06 августа 2010

Запущенный процесс зависает около 32 000 (± 5%)

~ # cat / proc / sys / kernel / threads-max 127862

~ # ulimit -s размер стека (kbytes, -s) 2048

доступной свободной памяти: 3,5 Go

Далее, когда я пытаюсь выполнить базовую команду, пока процесс застрял как top, я получаю сообщение bash: canвилка, не хватает памяти.Даже если до сих пор осталось 3,5 Go свободной памяти.

Что может ограничить создание потока 32 000?

1 Ответ

3 голосов
/ 06 августа 2010

Потоки идентифицируются с помощью идентификаторов потоков (TID), которые в Linux являются просто PID, и ...

~% sysctl kernel.pid_max
kernel.pid_max = 32768

PID в Linux являются 16-разрядными, и 32768 уже является максимально допустимым значением.С таким количеством потоков вы только что полностью заполнили таблицу процессов операционной системы.Я не думаю, что вы сможете создать больше потоков, чем это.

В любом случае, что-то не так действительно в вашем дизайне, если вам нужно столько потоков.На самом деле нет оправдания тому, что их так много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...