Dlaczego file-nr i lsof liczą na otwarte pliki różnią się? [Zamknięte]

19

Nagle mam problem; wszystkie moje aplikacje i serwer działały dobrze i nagle widzę, że liczba otwartych plików wzrosła.

Sprawdzam to za pomocą tego polecenia:

cat /proc/sys/fs/file-nr

Kiedy to sprawdzam, pokazuje to 44544 0 128000, więc 44544 to liczba otwartych plików.

Ale kiedy sprawdzę za pomocą tego polecenia - lsof | wc -l pokazuje - 28384.

Który z nich jest poprawny?

Mój maksymalny limit otwartych plików wynosi 65535

ulimit -a
open files                      (-n) 65535

Chcę poznać 5 najlepszych procesów, które wykorzystują więcej otwartych plików. Mogę to uzyskać, lsofale pokazana tutaj liczba różni się bardzo od innych poleceń, o których wspomniałem powyżej.

Czy mogę uzyskać szczegółowe informacje na temat procesów policzonych przez to polecenie cat /proc/sys/fs/file-nr?

Zgodnie z poniższym linkiem mówi, że nie możemy, Jak wyświetlić otwarte deskryptory plików, ale nie używając polecenia lsof

Czy jest dla mnie jakieś rozwiązanie? Muszę dowiedzieć się, który proces zaczął nagle korzystać z bardziej otwartych plików.

AKTUALIZACJA Przepraszamy za kłopoty. Znalazłem błąd, który popełniłem, NIE sprawdzałem lsof | wc -l z katalogu głównego. to dlatego widziałem ogromną różnicę.

nadal istnieje różnica między danymi wyjściowymi pliku -nr i lsof | wc -l (z katalogu głównego). lsof count to więcej niż liczba -nr pliku. Powodem tego jest to, że file -nr ignoruje niektóre katalogi (które są uważane przez lsof za pliki). Znalazłem ten powód przez małe badanie samego google. tak czy inaczej! dzięki chłopaki za całą pomoc!

Vasanth Nag KV
źródło
Czy lsof | wc -l naprawdę pokazuje liczbę ujemną?
Joe Sewell
3
to nie był znak ujemny, to łącznik!
Vasanth Nag KV

Odpowiedzi:

8

Wydaje się, że są tu dwa pytania. Po pierwsze, pełna dokumentacja struktur file-nr i file-max znajduje się na stronie

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

To definiuje pola w tym pliku jako:

Trzy wartości w pliku-nr oznaczają liczbę przydzielonych uchwytów plików, liczbę przydzielonych, ale nieużywanych uchwytów plików i maksymalną liczbę uchwytów plików. Linux 2.6 zawsze zgłasza 0 jako liczbę wolnych uchwytów plików - to nie jest błąd, to po prostu oznacza, że ​​liczba przydzielonych uchwytów plików dokładnie odpowiada liczbie używanych uchwytów plików.

Mam nadzieję, że to dość jasne. Na drugie pytanie odpowiedziano w wątku wspomnianym powyżej ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi ) i wydaje się, że lubię

  1. „użyj lsof” i odpowiednio odfiltruj dane wyjściowe, jeśli chcesz uzyskać dobre przybliżenie deskryptorów plików używanych przez proces lub,
  2. przeglądaj system plików / proc (i nadal musisz filtrować dane wyjściowe), aby uzyskać migawkę w czasie używania deskryptora pliku.

Trudność w uzyskaniu dokładnych wskaźników jest znacząca, ponieważ liczba FD wykorzystywanych w danym punkcie może bardzo szybko wahać się w systemie.

Poniższy wątek sugeruje schemat filtrowania dla podejścia „lsof”:

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim

Thomas N.
źródło
zaktualizowałem moje pytanie. ale dzięki za wszystkie informacje tam.
Vasanth Nag KV
Ale jak to możliwe, skoro według ulimitmnie mogę otworzyć do 1024 plików, jeśli lsof | wc -lmam już 1545 plików ?
Nakilon
Przeczytaj strony podręcznika lsofi ulimitna odpowiedź na swoje pytanie.
Thomas N