Mam proces Java (Glassfish), który przecieka deskryptory plików. Wiem to, ponieważ otrzymuję pomocny java.io.IOException: Too many open files
wyjątek. Mogę zajrzeć /proc/PID#/fd
i zobaczyć wszystkie otwarte deskryptory plików. Kiedy używam lsof, otrzymuję bardzo dużą liczbę wpisów takich jak to:
java 18510 root 8811u skarpeta 0,4 1576079 nie może zidentyfikować protokołu
java 18510 root 8812u skarpeta 0,4 1576111 nie może zidentyfikować protokołu
java 18510 root 8813u skarpeta 0,4 1576150 nie może zidentyfikować protokołu
Widzę 12 nowych tworzonych na minutę. Jakich opcji mogę użyć na lsof lub jakie inne narzędzia są dla mnie dostępne, aby pomóc wyśledzić deskryptory plików gniazd, w których nie można zidentyfikować protokołu?
lsof
max-file-descriptors
Cclark
źródło
źródło
Odpowiedzi:
aby zobaczyć 20 najlepszych uchwytów plików za pomocą procesów:
dane wyjściowe są w formacie uchwyt pliku format, pid, cmndline dla procesu
przykładowe wyjście
źródło
Zapoznaj się z poleceniem strace. Monitoruje wywołania systemowe. Ostatnio użyłem go do śledzenia wycieków deskryptora pliku, które powodowały wielokrotne awarie naszego demona snmpd. Trzeba się przyzwyczaić, ale jest to potężne narzędzie.
Możesz użyć strace, aby dołączyć do działającego procesu (nie zapomnij o opcji -f, aby śledzić procesy potomne).
źródło
Co dokładnie próbujesz wyśledzić? Zdalne adresy IP powiązane z wyciekającymi FD, wadliwym kodem lub czymś innym?
Jak już zauważyłeś, że nastąpił wyciek, skontaktowanie się z inżynierami odpowiedzialnymi za ten proces Java wydaje się rozsądnym następnym krokiem.
źródło
can't identify protocol
nie daje inżynierom wiele do roboty. Czy w lsof są narzędzia lub opcje, których nie widzę, których powinienem używać? Problem nie występuje w środowisku testowym i zaczął się w tym środowisku dopiero po migracji szafki. Ten sam kod nie miał problemów przed migracją, a gdy aplikacja nie została wdrożona, Glassfish wciąż przecieka. Moje najlepsze przypuszczenie to coś zepsutego z perspektywy sieci, a gniazda próbują się zainicjować, ale nie mogą, a następnie zawieszają się i zostają.