How to Increase Number of Open Files Limit in Linux

W systemie Linux, można zmienić maksymalną ilość otwartych plików. Możesz zmodyfikować ten numer za pomocą polecenia ulimit. Daje ono możliwość kontrolowania zasobów dostępnych dla powłoki lub uruchomionego przez nią procesu.

Read Also: Set Linux Running Processes Limits on Per-Userl Level

W tym krótkim tutorialu pokażemy, jak sprawdzić aktualny limit otwartych plików i opisów plików, ale aby to zrobić, będziesz musiał mieć dostęp root do swojego systemu.

Po pierwsze, zobaczmy jak możemy dowiedzieć się o maksymalnej liczbie otwartych deskryptorów plików w twoim systemie Linux.

Znajdź Linux Open File Limit

Wartość jest przechowywana w:

# cat /proc/sys/fs/file-max818354

Liczba którą zobaczysz, pokazuje liczbę plików które użytkownik może mieć otwarte podczas jednej sesji logowania. Wynik może być różny w zależności od twojego systemu.

Na przykład na moim serwerze CentOS limit został ustawiony na 818354, podczas gdy na serwerze Ubuntu, który używam w domu, domyślny limit został ustawiony na 176772.

Jeśli chcesz zobaczyć twarde i miękkie limity, możesz użyć następujących komend:

Sprawdź twarde limity w Linuksie

# ulimit -Hn4096

Sprawdź miękkie limity w Linuksie

# ulimit -Sn1024

Aby zobaczyć twarde i miękkie wartości dla różnych użytkowników, możesz po prostu zmienić użytkownika za pomocą „su” na użytkownika, którego limity chcesz sprawdzić.

Na przykład:

# su marin$ ulimit -Sn1024
$ ulimit -Hn4096

Jak sprawdzić systemowe limity deskryptorów plików w Linuksie

Jeśli używasz serwera, niektóre z twoich aplikacji mogą wymagać wyższych limitów dla otwartych deskryptorów plików. Dobrym tego przykładem są usługi MySQL/MariaDB lub serwer WWW Apache.

Możesz zwiększyć limit otwartych plików w Linuksie przez edycję dyrektywy jądra fs.file-max. W tym celu można użyć narzędzia sysctl.

Sysctl jest używany do konfigurowania parametrów jądra w czasie pracy.

Na przykład, aby zwiększyć limit otwartych plików do 500000, możesz użyć następującego polecenia jako root:

# sysctl -w fs.file-max=500000

Możesz sprawdzić aktualną wartość otwartych plików za pomocą następującego polecenia:

$ cat /proc/sys/fs/file-max

Za pomocą powyższego polecenia wprowadzone zmiany pozostaną aktywne tylko do następnego restartu. Jeśli chcesz zastosować je na stałe, będziesz musiał edytować następujący plik:

# vi /etc/sysctl.conf

Dodaj następującą linię:

fs.file-max=500000

Oczywiście, możesz zmienić liczbę według własnych potrzeb. Aby zweryfikować zmiany ponownie użyj:

# cat /proc/sys/fs/file-max

Użytkownicy będą musieli się wylogować i zalogować ponownie, aby zmiany zaczęły obowiązywać. Jeśli chcesz zastosować limit natychmiast, możesz użyć następującego polecenia:

# sysctl -p

Set User Level Open File limits in Linux

Powyższe przykłady, pokazały jak ustawić globalne limity, ale możesz chcieć zastosować limity na podstawie użytkownika. W tym celu, jako użytkownik root, będziesz musiał edytować następujący plik:

# vi /etc/security/limits.conf

Jeśli jesteś administratorem Linuksa, sugeruję abyś zapoznał się z tym plikiem i tym co możesz w nim zrobić. Przeczytaj wszystkie komentarze w nim zawarte, ponieważ zapewnia on dużą elastyczność w zakresie zarządzania zasobami systemu poprzez ograniczanie użytkowników/grup na różnych poziomach.

Linie, które powinieneś dodać, przyjmują następujące parametry:

<domain> <type> <item> <value>

Tutaj jest przykład ustawienia miękkich i twardych limitów dla użytkownika marin:

## Example hard limit for max opened filesmarin hard nofile 4096## Example soft limit for max opened filesmarin soft nofile 1024

Myślenia końcowe

Ten krótki artykuł pokazał ci podstawowy przykład tego, jak możesz sprawdzić i skonfigurować globalne i na poziomie użytkownika limity maksymalnej liczby otwartych plików.

Chociaż tylko zarysowaliśmy powierzchnię, gorąco zachęcam do bardziej szczegółowego spojrzenia i przeczytania odnośnie /etc/sysctl.conf i /etc/security/limits.conf i nauczenia się jak ich używać. Będą one dla ciebie bardzo pomocne pewnego dnia.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.