Проверяйте максимально допустимые количества потоков

Я запускаю сервер Ubuntu 17.10 на VDS. Я запускаю на нем 3proxy. Проблема в том, что VDS каким-то образом не позволяет запускать более 5000 потоков на процесс, как я думаю. Я так думаю, потому что процесс 3proxy никогда не превышает 5000 потоков.

EDIT: ошибка, которую я вижу в журналах:

pthread_create():_Resource_temporarily_unavailable

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

И моя проблема в том, что я не знаю, как создать такой скрипт

1
задан 15 February 2018 в 12:29

2 ответа

Не существует потоков для каждого процесса!

Но существует ограничение на общее количество процессов в системе (потоки - это в основном просто процессы с общим адресным пространством в Linux)

cat /proc/sys/kernel/threads-max

По умолчанию используется номер страниц памяти, разделенных на 4. Вы можете увеличить это:

echo 100000 > /proc/sys/kernel/threads-max

Существует также предел процессов (потоков), которые может создать один пользователь, см. ulimit для этого, но это должно unlimited на Ubuntu.

1
ответ дан 17 July 2018 в 20:47

Не существует потоков для каждого процесса!

Но существует ограничение на общее количество процессов в системе (потоки - это в основном просто процессы с общим адресным пространством в Linux)

cat /proc/sys/kernel/threads-max

По умолчанию используется номер страниц памяти, разделенных на 4. Вы можете увеличить это:

echo 100000 > /proc/sys/kernel/threads-max

Существует также предел процессов (потоков), которые может создать один пользователь, см. ulimit для этого, но это должно unlimited на Ubuntu.

1
ответ дан 23 July 2018 в 21:26
  • 1
    Я уже пробовал это, а также играл с ulimit, устанавливая большие значения. Я забыл упомянуть сообщение erro, которое я получаю: pthread_create():_Resource_temporarily_unavailable – Vladyslav Matviienko 15 February 2018 в 12:30
  • 2
    Каков результат работы cat /proc/sys/kernel/threads-max? – Robert Riedl 15 February 2018 в 12:32
  • 3
    также echo 100000 > /proc/sys/kernel/threads-max не меняет proc/sys/kernel/threads-max, если я проверю его после запуска команды, то он будет таким же, как и раньше: 63814 – Vladyslav Matviienko 15 February 2018 в 12:32
  • 4
    поэтому это не системный предел, а предел вашего программного обеспечения, 3proxy – Robert Riedl 15 February 2018 в 12:35
  • 5
    Что касается фактического предела процесса: у меня есть сценарий bash, который запускает команды 20000 sleep 20 &, а для top максимум Tasks: 10980 total, и я получаю fork: retry: Resource temporarily unavailable после достижения 10980 – Vladyslav Matviienko 15 February 2018 в 12:36

Другие вопросы по тегам:

Похожие вопросы: