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)

Sprawdź w dokumentacji systemu Linux, jak zwiększyć liczbę procesów.
— theglauber

2

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

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ś.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.