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!



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


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