Dzisiaj mój serwer uległ awarii z Too many open files in system:, ale ja już mają wysokie wartości, jaka jest maksymalna wartość tego?

Czuję, że w Google nie ma dobrych wyników w tym zakresie, wyjaśniając, co należy wziąć pod uwagę przy ustawianiu tych wartości, po prostu mówią, aby ustawić je na 100 000.

Mam serwer z 32 GB pamięci RAM, który używa teraz tylko 10 GB, zakładam, że zwiększenie limitów plików do bardzo wysokich wartości zwiększy użycie pamięci RAM, czy jest jakiś wzór, którego możesz użyć do obliczenia tego? Jak w przypadku 8 GB pamięci RAM, może mieć X otwartych plików?

Bieżące ustawienia:

cat /proc/sys/fs/file-max 100000 ulimit -Hn 1048576 ulimit -Sn 1024 

Komentarze

  • Brak odpowiedzi, ale wydaje mi się, że ograniczenie maksymalnej liczby otwartych plików nie jest sposobem na zaoszczędzenie pamięci RAM, ale wydajność dysku we / wy. Zezwolenie na dużą liczbę otwartych plików oznacza zezwolenie na (potencjalnie) dużą liczbę jednoczesnych dostępów do dysku. Prawdopodobnie masz również ogólny limit systemu, a także limit na proces. Nie będąc użytkownikiem Linuksa, nie mogę ' powiedzieć nic więcej o to inne niż ulimit pokaże / ustawi limit zasobów na proces.
  • Czy to w ogóle dotyczy dysków SSD? To ' serwer i nie ' nie obchodzi mnie, czy umrze, firma hostingowa po prostu go wymieni i mam kopie zapasowe. Czytałem też, że gniazda sieciowe też mogą powodować ten problem, zależy mi głównie na wydajności. ' Płacę za sprzęt, jeśli używam 100% lub 5%, o ile ' poprawia wydajność. W przypadku serwera w chmurze widzę to jako problem, ale w przypadku dedykowanego sprzętu nie do końca
  • Tak, liczba otwartych gniazd również będzie się liczyła do tego limitu (ogólnie otwarte deskryptory plików). Zapomniałem o tym. Więc jeśli RAM jest Twoim jedynym zmartwieniem, nie ' nie sądzę, żebym martwił się zwiększeniem limitu, chyba że oznacza to, że każda usługa , którą zapewniasz, zaczyna przydzielać dodatkowa pamięć związana z każdym otwartym gniazdem. To byłoby coś, co tylko Ty mógłbyś zbadać.

Odpowiedź

Jak mówi Kusalananda, zwiększenie file-max nie będzie miało bezpośredniego wpływu na użycie pamięci, ale pozwoli procesom otwierać więcej deskryptorów plików, co będzie miało efekt domina (zarówno ze śledzenia opisów plików w jądrze, jak i zwiększonej pamięci użycie w procesach używających tych opisów i deskryptorów) – komentarze jądra sugerują około jeden kilobajt na plik dla danych jądra i zmniejszą domyślną wartość file-max (8192), jeśli to się skończy co stanowi ponad 10% pamięci podczas uruchamiania systemu ( tj. jest tylko 80 MB pamięci RAM). Maksymalna wartość narzucona przez jądro to maksymalna wartość, która może być przechowywana w zmiennej typu long w C twojej architektury.

Jeśli zwiększysz file-max, należy również zwiększyć inode-max; dokumentacja jądra mówi, że powinno to być „3-4 razy większe niż wartość w file-max, ponieważ stdin, stdout i gniazda sieciowe również wymagają struktury i-węzła, aby poradzić sobie z nimi. ”

Zwróć uwagę, że naciśnięcie file-max spowoduje wyświetlenie w dzienniku jądra komunikatu„ VFS: maksymalny limit pliku n osiągnięty ”Z odpowiednią wartością n . Jeśli nie masz tego w swoich dziennikach, albo nie trafiasz file-max, albo zbyt często filtrujesz dzienniki (jest to komunikat dziennika na poziomie informacyjnym).

(file-max nie ogranicza procesów za pomocą CAP_SYS_ADMIN, więc naciśnięcie go nie zatrzyma wszystkiego).

Komentarze

  • Więc nie ma żadnych wad w posiadaniu arbitralnie wysokich liczb? Nie ' nie widzę inode-max w moim systemie? Ubuntu 16.04 tutaj. Chcę tylko zapobiec ponownej awarii serwera, uruchamiam wiele usług internetowych na tym serwerze i nie ' nie przejmuję się wykorzystaniem zasobów.
  • Wadą jest to, że niekontrolowane procesy nie zostaną złapani przez ogólny limit opisów plików, więc mogą spowodować głód zasobów w inny sposób.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *