Jak ustawić limit liczby plików, które Linux może otworzyć?

11

Planuję uruchomić aplikację Java za pomocą nohup ... &. Limit musi dotyczyć takich poleceń.

Ricardo Altamirano
źródło
Ale to spowodowało błąd w moim programie Java

Odpowiedzi:

7

Większość systemów używa PAM i ma pam_limitsustawione limity modułów na podstawie /etc/security/limits.conf. Limit otwieranych plików na użytkownika nazywa się nofile. Możesz ustawić go dla każdego użytkownika lub dla konkretnego użytkownika lub grupy i możesz ustawić limit, który użytkownik może zastąpić (miękki limit) i inny, który tylko root może zastąpić (twardy limit). Dokumentacji oraz limits.confstrona podręcznika mają szczegóły. Na przykład, aby podnieść limit do 50000 dla wszystkich, wstaw tę linię /etc/limits.conf(ustawienie zacznie obowiązywać po zalogowaniu):

* - nofile 50000
Gilles „SO- przestań być zły”
źródło
w ramach limits.confdo * hard nofile 50000i / lub * soft nofile 50000. Nie znam technicznej różnicy między twardym a miękkim i zawsze robiłem oba.
Ron
w SLES 11.4, używając na przykład tcsh, można zrobić, limit descriptors 50000aby zmienić wartość w danym oknie / sesji terminala.
Ron
@ron -` w drugiej kolumnie ustawia zarówno miękki, jak i twardy limit. Musisz je ustawić osobno, jeśli chcesz mieć inne wartości. Limit miękki można zmienić w dowolnym momencie, uruchamiając ulimitpolecenie (wywoływane limitw csh). Nieuprzywilejowany użytkownik nigdy nie może przekroczyć twardego limitu.
Gilles „SO- przestań być zły”
jeśli ustawię tylko na twardą, to czy wartość miękka pozostanie domyślna? jeśli ustawię tylko miękką, a nie twardą, to czy twarda pozostanie wartością domyślną lub z natury równą miękką wartością? Czy mogę ustawić miękki> twardy? Czy miękka jest rzeczywista wartość, która obowiązuje? przepraszam za pytania.
Ron
@ron Miękki limit jest automatycznie ograniczany do twardego limitu. Jeśli ustawisz tylko twardy limit, wówczas ustawisz miękki limit na max (default_soft_limit, actual_hard_limit).
Gilles „SO- przestań być zły”
4

możesz dodać fs.file-max = <your number>do /etc/sysctl.conf. Następnie uruchom ponownie.

użytkownik1606
źródło
cat / proc / sys / fs / file-max to 169203, ale ulimit -n to 1024
Nie ma potrzeby ponownego uruchamiania. Po prostu biegnij sysctl fs.file-max=123456. ( /etc/sysctl.confjest odczytywany w czasie rozruchu przez skrypt, który wywołuje sysctlzawartość.)
Gilles „SO- przestań być zły”
3
ulimit -n

może modyfikować ustawienia procesu i

/proc/sys/fs/file-max

lub wywoływana zmienna sysctl fs.file-maxmoże być użyta do odczytu i ustawienia wartości ogólnosystemowej

ptman
źródło
cat / proc / sys / fs / file-max to 169203, ale ulimit -n to 1024
1

Możesz użyć do tego ulimit:

http://bloggerdigest.blogspot.com/2006/10/10/purpose-of-ulimit-linux-command.html

Chociaż powinieneś upewnić się, że otwarcie tak wielu uchwytów plików jest absolutnie konieczne przed skorzystaniem z takich regulacji. Zwiększenie maksymalnej liczby uchwytów plików tylko dlatego, że zapomniałeś wykonać inputstream.close () w pętli, tylko opóźni podstawowy problem.


źródło
1
Chcę połączyć się z wieloma klientami
1

Użyj ulimit (polecenie Bash - man bash lub znajdź podobny dla powłoki) dla każdej instancji programu. Nie używaj globalnych limitów systemowych, jeśli nie wiesz, co robisz - możliwe DoS.

teZeriusz
źródło
W SLES 11.4 Mam ustawiony nofilew limits.confza 100000 pomyślnie. Mogę zaświadczyć, że ustawienie zbyt dużej wartości uniemożliwiło późniejsze logowanie za pomocą SSH i musiałem uruchomić komputer z dysku DVD, aby poprawić tę wartość w pliku limit.conf, aby odzyskać system.
Ron
0
vi ~/.bashrc

I dodaj linię na końcu pliku

ulimit -n 169203
Paulo Tomé
źródło