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


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

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.


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


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.


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.


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

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.