Analiza wydajności serwera NFS w systemie Linux

22

Chciałbym przeprowadzić analizę naszego serwera NFS, aby pomóc wyśledzić potencjalne wąskie gardła w naszych aplikacjach. Na serwerze działa SUSE Enterprise Linux 10.

Rzeczy, które chcę wiedzieć, to:

  • Które pliki są uzyskiwane przez klientów
  • Przepustowość odczytu / zapisu dla poszczególnych klientów
  • Narzut narzucony przez inne wywołania RPC
  • Czas spędzony na oczekiwaniu na inne żądania NFS lub dyskowe operacje we / wy na obsługę klienta

Wiem już o dostępnych statystykach /proc/net/rpc/nfsdi tak naprawdę napisałem blog opisujący je dogłębnie. To, czego szukam, to sposób na głębsze kopanie i pomoc w zrozumieniu, jakie czynniki wpływają na wydajność widzianą przez konkretnego klienta. Chcę przeanalizować rolę, jaką serwer NFS odgrywa w działaniu aplikacji w naszym klastrze, dzięki czemu mogę wymyślić sposoby najlepszej optymalizacji.

Kamil Kisiel
źródło
To wydaje się być czymś, do czego napisano system tap. Dokumenty są trochę badziewne, ale zgaduję, że możesz coś wymyślić, aby wykonać tego rodzaju analizę przy użyciu tego. sourceware.org/systemtap/examples/keyword-index.html
Cian

Odpowiedzi:

2

Pomysł, spróbuj sniffować ruch nfs za pomocą wireshark. Może ci powiedzieć, który użytkownik uzyskał dostęp do jakiego pliku:

tshark -R nfs -i eth0
ko-dos
źródło
2

Muszę powiedzieć o wszystkich * dostępnych narzędziach statystycznych dla jednego, nfsstat jest zdecydowanie najgorszy! Daje to możliwość spojrzenia na kilka liczników, ale to wszystko. Jeśli spojrzysz na nie dwa razy, musisz wykonać próbę ustalenia, o ile zmienił się każdy licznik, a jeśli chcesz poznać szybkość zmian, musisz podzielić przez liczbę sekund między próbkami. Szczerze mówiąc, nfsstat datuje się na wiele lat, kiedy rzeczy były jeszcze dość prymitywne i nikt nie chce zmieniać formatu wyjściowego, ponieważ prawdopodobnie spowodowałoby to wiele problemów.

Jeśli chodzi o używanie funkcji Collectl do monitorowania NFS, zapewnia on wyjście nfsstat w znacznie łatwiejszym do odczytania formacie, ale co jeszcze lepsze, możesz pozwolić mu działać przez wiele godzin lub dni i odtwarzać dane zebrane w tle. Jeśli chodzi o żądanie sprawdzenia, co robią procesy, Collectl może również gromadzić dane procesu, w tym ilość operacji we / wy każdego procesu, a nawet odtwarzać je, pokazując najwyższych użytkowników we / wy. Możesz także skorzystać z najwyższej funkcji w czasie rzeczywistym.

Jeśli chcesz obejrzeć motyw dysku, kolekcjoner może to zrobić i wyświetlić wszystko na skoordynowanym ekranie.

Sprawdź to ... -mark


źródło
2

Collectl (szczególnie jego podsystem NFS ) to bardzo miłe narzędzie, które może być przydatne do analizy, ale nie pasuje do listy wymagań. Nie znam żadnego takiego narzędzia dla Linuksa.

(Proszę dodam to off-topic UWAGA: Nie jest oprogramowanie, które pasuje do Twoich wymagań: Sun DTrace opartej Analytics (PDF) . - ale niestety nie jest dostępny w systemie Linux Znajdziesz wiele wspaniałych przykładów w blogu Brendana Gregga ilustrujące możliwości tego narzędzia).

knweiss
źródło
1

Moim zdaniem to właśnie podkreśla problem z dzisiejszymi narzędziami. Tutaj wymieniono co najmniej 3, w tym nfsstat, iostat i iotop. Potem padła wzmianka o wireshare i nfsreplay. Czy to naprawdę brzmi jak normalny sposób robienia rzeczy? Poza wireshark z jest kategorią samą w sobie, czy nie wolisz 1 narzędzia?

W przypadku programów otwierających, chociaż uważam, że wyjście iostatu jest bardzo przydatne, zbyt trudno jest odczytać te wszystkie liczby 0,00 w liczbach. Collectl zgłasza dokładnie te same dane, ale znacznie łatwiej sformatował oczy. Wiesz już, co myślę o nfsstat, a ponieważ narzędzie Collectl może odtwarzać dowolne dane, nie ma potrzeby używania narzędzia do odtwarzania. Jeśli chodzi o „iotop”, funkcja kolekcjonowania może także pokazywać procesy posortowane według dowolnych zawartych we / wy.

Więc masz to wszystko w zestawie, wraz ze znacznikami czasu. Jeśli potrzebujesz krótszego interwału monitorowania, możesz zawsze podkręcić próbkowanie do 0,1 lub 0,5 sekundy lub cokolwiek pomiędzy, chociaż wygenerujesz więcej narzutu, jeśli będziesz monitorować procesy tak szybko, ale zrobiłbyś to za pomocą dowolnego narzędzia do monitorowania procesu.

OSTATECZNY bonus to wszystko, co zbierasz za pomocą Collectl, który możesz załadować do arkusza kalkulacyjnego i łatwo wydrukować LUB użyć colplot, który jest częścią Collectl-utils.

-znak


źródło
1

Możesz spróbować nfswatchze strony http://nfswatch.sourceforge.net

Możesz zobaczyć przykładowe wyniki na http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatchjest trochę podobny top(choć nie jestem pewien, czy istnieje tryb wsadowy). Po uruchomieniu możesz zmienić zmianę wyświetlania, naciskając klawisz (np. „C”, aby wyświetlić klientów NFS korzystających z serwera NFS).

Jednak w moich krótkich testach nfswatchwydaje się , że nie działa z NFSv4.

Philip Durbin
źródło
1
Ciekawa sugestia. W rzeczywistości sam autor twierdzi, że NFSv4 nie jest obsługiwany, a narzędzie nie było aktualizowane przez około 3 lata. Szkoda, bo byłoby to bardzo przydatne!
Tonin
1

W tej chwili nie mam lepszych odpowiedzi, jednak można dość dokładnie śledzić IO dysku

iostat -mx <delay in sec.> <devices>

Daje to bardzo przydatne dane, w szczególności średni rozmiar kolejki i czas oczekiwania (w ms) dla Twoich operacji we / wy. Pokazuje dość łatwo, jeśli twoje dyski są wąskim gardłem, a jeśli wąskim gardłem jest liczba operacji we / wy lub przepustowość.

Potem z

netstat -plaute | grep nfs

Zobaczysz połączenia klienta i bajty przesyłane z każdego klienta w czasie rzeczywistym. zapętlić na nim ciągłe dane. Stworzenie skryptu zapewniającego ciągłe dane byłoby dość łatwe ... Pracuję nad tym :)

Teraz, aby uzyskać IO na proces, możesz użyć doskonałego iotop . Jednak nadal musisz znaleźć sposób na dopasowanie procesów nfsd do klientów.

Co do tego, które pliki są uzyskiwane przez który klient, utknąłem. W rzeczywistości pliki aktualnie odczytywane / zapisywane z klienta NFS nawet nie pojawiają się w wynikach lsof.

Aby rozwinąć sieć, użyj watch -d, aby zobaczyć, jak rzeczy się zmieniają i sortują według hosta

watch -d "netstat -plaute | grep nfs | sort -k 4,5"
wazoox
źródło
To najlepsze rozwiązanie, jakie do tej pory znalazłem, aby dowiedzieć się, który host powoduje ruch w systemie plików NFS. Następnie mogę przejść do klienta, aby dowiedzieć się, do którego pliku ma dostęp. Dziękuję Ci!
peschü
0

Może chcesz sprawdzić nfsreplay. Może ci pomóc dowiedzieć się, co się dzieje. Również można znaleźć informacje i linki tutaj użyteczne

Nick Anderson
źródło