Zauważam, że na nowym obrazie CentOS, który właśnie uruchomiłem z EC2, domyślną wartością ulimit są 1024 otwarte pliki, ale / proc / sys / fs / file-max jest ustawiony na 761,408 i zastanawiam się, jak działają te dwie limity razem. Zgaduję, że ulimit -n jest limitem liczby deskryptorów plików na użytkownika, podczas gdy / proc / sys / fs / file-max jest ogólnosystemowy? Jeśli tak jest, powiedzmy, że zalogowałem się dwukrotnie jako ten sam użytkownik - czy każdy zalogowany użytkownik ma limit 1024 otwartych plików, czy jest to limit 1024 otwartych plików między każdym z tych zalogowanych? w użytkownikach?
Czy ma duży wpływ na wydajność ustawienie maksymalnej liczby deskryptorów plików, jeśli system nigdy nie otwiera bardzo wielu plików?
Odpowiedzi:
file-max
to maksymalna liczba deskryptorów plików (FD) wymuszona na poziomie jądra, której nie można przekroczyć przez wszystkie procesy bez zwiększenia.ulimit
Jest wykonywane na poziomie procesu, który może być mniejsza niżfile-max
.Zwiększenie nie powoduje ryzyka wpływu na wydajność
file-max
. We współczesnych dystrybucjach maksymalny FD ustawiony jest dość wysoko, podczas gdy w przeszłości wymagał on ponownej kompilacji i modyfikacji jądra, aby zwiększyć go powyżej 1024. Nie zwiększyłbym całego systemu, chyba że będzie taka potrzeba techniczna.Konfiguracja poszczególnych procesów często wymaga dostrojenia do obsługi konkretnego demona, czy to bazy danych, czy serwera WWW. Jeśli całkowicie usuniesz limit, demon może potencjalnie wyczerpać wszystkie dostępne zasoby systemowe; co oznacza, że nie będziesz w stanie rozwiązać problemu, chyba że naciśniesz przycisk resetowania lub wyłączanie zasilania. Oczywiście jedno z nich może spowodować uszkodzenie otwartych plików.
źródło
ulimit
Granica nie jest dla każdego użytkownika, ale na proces! Zobacz unix.stackexchange.com/questions/55319/…Nie jestem pewien, czy całkowicie rozumiem znaczenie tego zdania (angielski nie jest moim językiem ojczystym) Jeśli to zdanie oznacza, że konfiguracja ulimit dla deskryptorów plików nie jest ograniczeniem dla poszczególnych procesów, zaakceptowana odpowiedź (AFAIK) jest błędna.
Mam na myśli to, że jeśli jakiś użytkownik uruchomił 4 procesy, a konfiguracja ulimit dla FD wynosi 1024, każdy proces może otworzyć 1024 FD. Użytkownik nie będzie ograniczony do 1024 FD, ale procesy uruchomione przez tego użytkownika.
Na przykład:
Oto przykład perla, w którym osiągamy limit (jest to limit na proces):
Wynik:
1021, ponieważ były 3 otwarte deskryptory plików przed osiągnięciem pętli while (stdout, stdin i stderr)
Przepraszam, jeśli całkowicie się mylę lub źle zrozumiałem odpowiedź.
źródło