fork: повторити спробу: ресурс тимчасово недоступний [закрито]


80

Я спробував встановити Intel MPI Benchmark на свій комп’ютер, і з’явилася така помилка:

fork: retry: Resource temporarily unavailable

Потім я отримав цю помилку ще раз , коли я побіг lsі topкоманду.

Що спричиняє цю помилку?

Конфігурація мого комп'ютера:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)

Перевірте документацію Linux, як збільшити кількість процесів.
theglauber

2
Можливо , це допомогло б: stackoverflow.com/questions/344203 / ...
theglauber

Відповіді:


82

Це зазвичай спричиняється закінченням дескрипторів файлів.

Існує обмеження загального дескриптора файлів, що ви отримуєте від команди:

sysctl fs.file-nr

Це повертає кількість дескрипторів файлів:

<in_use> <unused_but_allocated> <maximum>

Щоб дізнатись, яке обмеження дескриптора файлу користувачів виконується командами:

sudo su - <username>
ulimit -Hn

Щоб дізнатись, скільки дескрипторів файлів використовується користувачем, запустіть команду:

sudo lsof -u <username> 2>/dev/null | wc -l

Отже, якщо у вас виникла проблема з обмеженням дескриптора системного файлу, вам потрібно буде відредагувати файл /etc/sysctl.conf та додати або змінити його, що він уже існує, рядок із fs.file-max і встановити для нього велике значення достатньо, щоб мати справу з необхідною кількістю дескрипторів файлів і перезавантажити.

fs.file-max = 204708

15
FYI, ви можете використовувати "sysctl -p", щоб застосувати поточні налаштування в /etc/sysctl.conf, зберігаючи перезавантаження.
EmmEff

2
Крім того, якщо ви лише для читання / etc, ви можете використовувати 'sysctl -w fs.file-max = 204708' під час виконання.
Ondrej Galbavý

ви також можете додати його безпосередньо до ядра без перезавантаження, але не назавжди 'echo 999999> / proc / sys / fs / file-max'
matson kepson

50

Інша можливість - занадто багато ниток. Ми щойно наткнулись на це повідомлення про помилку під час запуску тестового джгута проти програми, яка використовує пул потоків. Ми використовували

watch -n 5 -d "ps -eL <java_pid> | wc -l"

щоб спостерігати за постійним підрахунком рідних потоків Linux, що працюють у межах заданого ідентифікатора процесу Java. Після цього удару близько 1000 (для нас - YMMV), ми почали отримувати повідомлення про помилку, яке ви згадали.


2
Коли я тестував, ps -eLпрацював для показу всіх процесів і ps -L <pid>працював для показу процесів щодо <pid>. ps -eL <pid>просто показує всі процеси незалежно від <pid>.
Sanghyun Lee

1
@Willie Wheeler Що ви зробили, щоб подолати межу ниток? Я шукав і тестував численні рішення, знайдені в Інтернеті, безрезультатно протягом DAYS. Ніщо не дозволяє більше ніж 1 тис. Потоків, за винятком перезапуску systemd-logind, який триває близько години, перш ніж помилки знову почнуться!
Брендон Елліотт,

Машини мають обмежені ресурси. Якщо ви досягаєте межі, використовуйте менше потоків (наприклад, керованих пулом потоків) або більше машин.

Я перезапустив свій сервер
Rails

2
1000 ниток - це не багато
frankster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.