|
Polecenie vmstat jest najczęściej używanym narzędziem do monitorowania Linuksa/Uniksa, które wyświetla wartości stanu serwera w określonych przedziale czasowych, w tym serweraWykorzystanie CPU, zużycie pamięci, zamiana pamięci wirtualnej, odczyt i zapis IO. To polecenie to moje ulubione polecenie do sprawdzania Linuksa/Unixa – jedno to wsparcie dla Linuksa/Unixa, a drugie, że w porównaniu do górnej wersji widzę zużycie CPU, pamięci i IO całej maszyny, zamiast tylko widzieć zużycie CPU i pamięci każdego procesu (różne scenariusze użycia). Zazwyczaj narzędzie VMSTAT odbywa się za pomocą dwóch parametrów numerycznych: pierwszym parametrem jest liczba próbkowanych przedziałów czasowych, jednostka to sekundy, a drugim parametrem jest liczba próbek, takich jak:
root@ubuntu:~# VMSTAT 2 1 Procs -----------memory---------- ---swap-- -----io---- -system-- ----CPU---- r b swpd free buff cache si so bi bo in cs us sy id wa wa 1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0 2 oznacza, że stan serwera jest zbierany raz na dwie sekundy, a 1 oznacza, że stan serwera jest zbierany tylko raz. W rzeczywistości podczas procesu aplikacyjnego monitorujemy przez pewien czas, a jeśli nie chcemy monitorować, możemy po prostu zakończyć VMSTAT bezpośrednio, na przykład:
root@ubuntu:~# VMSTAT 2 Procs -----------memory---------- ---swap-- -----io---- -system-- ----CPU---- r b swpd free buff cache si so bi bo in cs us sy id wa wa 1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0 0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0 1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0
Oznacza to, że VMSTAT zbiera dane co 2 sekundy i kontynuuje działania aż do momentu, gdy zakończę program, a ja kończę program po pięciu zebraniu danych tutaj. Dobrze, polecenie zostało wprowadzone, teraz zacznijmy wyjaśniać znaczenie każdego parametru. rOznacza to uruchomienie kolejki (czyli liczbę procesów faktycznie przypisanych CPU), testowany przeze mnie serwer jest obecnie stosunkowo bezczynny, nie ma żadnych programów, a gdy ta wartość przekroczy liczbę CPU, pojawia się wąskie gardło CPU. To również wiąże się z obciążeniem górnej części – zazwyczaj obciążenie jest większe, jeśli przekracza 3, jeśli przekracza 5, a jeśli przekracza 10, to nie jest normalne, a stan serwera jest bardzo niebezpieczny. Obciążenie górnej części jest podobne do obciążenia kolejki na sekundę. Jeśli kolejka jest zbyt duża, oznacza to, że procesor jest zajęty, co zwykle powoduje duże obciążenie CPU. bTo oznacza zablokowany proces, to niewiele do powiedzenia, proces jest zablokowany, wszyscy rozumieją. SWPDJeśli rozmiar użytej pamięci wirtualnej jest większy niż 0, oznacza to, że Twój komputer ma niewystarczającą ilość pamięci fizycznej, a jeśli nie jest to przyczyną wycieku pamięci programu, to czas na aktualizację pamięci lub przeniesienie zadań zużywających pamięć na inną maszynę. wolne Rozmiar wolnej pamięci fizycznej, moja pamięć maszynowa to łącznie 8G, a pozostałe 3415M. wzmocnienie System Linux/Unix służy do przechowywania treści w katalogu, uprawnień itd. cache, zajmuję na tym komputerze prawdopodobnie ponad 300 mln Cachecache jest bezpośrednio używany do zapamiętywania otwieranych plików, buforowania plików, zajmuję ponad 300M na własnym komputerze (oto sprytna rzecz Linuksa/Unixa – część wolnej pamięci fizycznej do buforowania plików i katalogów, aby poprawić wydajność wykonywania programu, gdy program korzysta z pamięci, bufor/cache są używane szybko). ) Si Jeśli ta wartość jest większa niż 0, oznacza to, że pamięć fizyczna jest za mała lub pamięć wycieka. Mój komputer ma dużo pamięci i wszystko jest w porządku. więc Rozmiar dysku zapisywanego do pamięci wirtualnej na sekundę, jeśli wartość ta jest większa niż 0, jest taki sam jak powyżej. bi Sprzęt blokowyLiczba bloków odbieranych na sekundę, tutaj urządzenie blokowe odnosi się do wszystkich dysków i innych urządzeń blokowych w systemie, domyślny rozmiar bloku to 1024 bajty, nie mam żadnej operacji IO na maszynie, więc zawsze było 0, ale widziałem to na maszynach obsługujących duże ilości danych (2-3T), które mogą osiągnąć 140000/s, a prędkość zapisu na dysku to prawie 140M na sekundę boLiczba bloków wysyłanych na sekundę przez urządzenie blokowe, na przykład podczas odczytu pliku, bo jest większa niż 0. Bi i Bo są zazwyczaj bliskie 0, w przeciwnym razie IO jest zbyt częste i wymaga regulacji. wLiczba przerwań na sekundę CPU, w tym przerwania czasowe CSLiczba przełączników kontekstu na sekundę, na przykład gdy wywołujemy funkcję systemową, musimy przełączać konteksty i przełączać wątkiKontekst procesuNa przykład w serwerach WWW, takich jak Apache i nginx, zazwyczaj wykonujemy testy wydajności z tysiącami, a nawet dziesiątkami tysięcy współbieżności, a proces wyboru serwera WWW można skrócić o szczyt procesu lub wątku, test obciążenia, aż cs osiągnie stosunkowo niewielką wartość, czyli liczba procesów i wątków stanie się bardziej odpowiednią. Wywołania systemowe są również takie same – za każdym razem, gdy wywoływana jest funkcja systemowa, nasz kod trafia do przestrzeni jądra, co skutkuje przełączaniem kontekstu, co jest bardzo zasobochłonne, i powinniśmy unikać częstych wywołań funkcji systemowych. Zbyt wiele przełączania kontekstu sprawia, że większość procesora jest marnowana na przełączanie kontekstu, co skutkuje mniejszym czasem CPU na poważniejsze zadania, a CPU nie jest w pełni wykorzystany, co nie jest zalecane. NasużytkownikCzas CPUKiedyś widziałem, że w USA było blisko 100, a kolejka r na serwerze, który bardzo często szyfrował i deszyfrował (maszyna była testowana obciążeniowo, a wydajność nie była dobra). syJeśli czas CPU systemu jest zbyt wysoki, oznacza to, że wywołania systemowe są długie, na przykład podczas częstych operacji IO. id Czas bezczynności CPU, ogólnie rzecz biorąc, id + us + sy = 100, ogólnie uważam, że id to zużycie CPU w stanie bezczynności, us to zużycie CPU przez użytkownika, a sy to zużycie CPU systemu. WTPoczekaj na czas procesora IO.
|