fork: retry: Zasób chwilowo niedostępny [zamknięty]

80

Próbowałem zainstalować test Intel MPI Benchmark na moim komputerze i otrzymałem ten błąd:

fork: retry: Resource temporarily unavailable

Następnie ponownie otrzymałem ten błąd, gdy uruchomiłem lsi wydałem toppolecenie.

Co powoduje ten błąd?

Konfiguracja mojej maszyny:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)
user1260391
źródło
Sprawdź w dokumentacji systemu Linux, jak zwiększyć liczbę procesów.
theglauber
2
Być może to by pomogło: stackoverflow.com/questions/344203/ ...
theglauber

Odpowiedzi:

82

Jest to zwykle spowodowane brakiem deskryptorów plików.

Istnieje całkowity limit deskryptorów plików w systemie, co otrzymujesz z polecenia:

sysctl fs.file-nr

Zwraca liczbę deskryptorów plików:

<in_use> <unused_but_allocated> <maximum>

Aby dowiedzieć się, jaki jest limit deskryptorów plików użytkowników, uruchom polecenia:

sudo su - <username>
ulimit -Hn

Aby dowiedzieć się, ile deskryptorów plików jest używanych przez użytkownika, uruchom polecenie:

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

Więc teraz, jeśli masz problem z limitem deskryptora plików systemowych, będziesz musiał edytować swój plik /etc/sysctl.conf i dodać lub zmodyfikować go już istnieje, wiersz z fs.file-max i ustawić go na wartość large wystarczy, aby poradzić sobie z liczbą potrzebnych deskryptorów plików i zrestartować komputer.

fs.file-max = 204708
Satish
źródło
15
FYI, możesz użyć "sysctl -p", aby zastosować bieżące ustawienia w /etc/sysctl.conf, zapisując restart.
EmmEff
2
Ponadto, jeśli masz tylko do odczytu / etc, możesz użyć 'sysctl -w fs.file-max = 204708' w czasie wykonywania.
Ondrej Galbavý
możesz również dodać go bezpośrednio do jądra bez ponownego uruchamiania, ale nie na stałe 'echo 999999> / proc / sys / fs / file-max'
matson kepson
50

Inną możliwością jest zbyt wiele wątków. Właśnie napotkaliśmy ten komunikat o błędzie podczas uruchamiania wiązki przewodów testowych dla aplikacji korzystającej z puli wątków. Użyliśmy

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

aby obserwować bieżącą liczbę natywnych wątków Linuksa działających w ramach danego identyfikatora procesu Java. Po tym osiągnięciu około 1000 (dla nas - YMMV) zaczęliśmy otrzymywać komunikat o błędzie, o którym wspomniałeś.

roottraveller
źródło
2
Kiedy testowałem, ps -eLpracowałem nad pokazaniem wszystkich procesów i ps -L <pid>pracowałem nad pokazaniem procesów dotyczących <pid>. ps -eL <pid>po prostu pokazuje wszystkie procesy niezależnie od pliku <pid>.
Sanghyun Lee
1
@Willie Wheeler Co zrobiłeś, aby pokonać limit wątków? Od DNI wyszukuję i testuję wiele rozwiązań znalezionych w Internecie, bezskutecznie. Nic nie pozwoli na więcej niż 1k wątków, z wyjątkiem ponownego uruchomienia systemd-logind, które trwa około godziny, zanim błędy zaczną się ponownie!
Brandon Elliott
Maszyny mają ograniczone zasoby. Jeśli osiągasz limit, użyj mniejszej liczby wątków (np. Kontrolowanych przez pulę wątków) lub więcej maszyn.
Zrestartowałem mój serwer rails
thedanotto
2
1000 wątków to jednak niewiele
frankster