Pokazuję, w jaki sposób mogę zinterpretować monitorowanie tak, aby CPU, RAM, obciążenie i I/O szybko dostarczały znaczących informacji. Pozwala mi to rozpoznać wąskie gardła na wczesnym etapie, prawidłowo sklasyfikować szczyty i zainicjować bezpośrednie działania w celu Wydajność i dostępność.
Punkty centralne
- Rdzenie CPU prawidłowo: Zawsze ustawiaj wykorzystanie i obciążenie w odniesieniu do liczby rdzeni.
- Pamięć RAM i swap Czytaj: Rosnąca konsumpcja i aktywność swapowa ostrzegają przed spowolnieniem.
- Średnie obciążenie wskazują: Wysokie obciążenie IOwait wskazuje na wąskie gardła pamięci lub dysku.
- Wskaźniki we/wy sprawdź: %util, await i IOPS pokazują nasycenie i kolejki.
- Wartości bazowe wykorzystywać: Ustawianie i udoskonalanie trendów, wartości progowych i alarmów.
Prawidłowe kategoryzowanie użycia procesora
Oceniam CPU-wykorzystanie zawsze w kontekście rdzeni, bo 75 % na 4 rdzeniach oznacza coś innego niż 75 % na 32 rdzeniach. Jeśli obciążenie utrzymuje się powyżej 80 % przez dłuższy czas, planuję optymalizacje w kodzie lub dodatkowe moce. Oprócz całkowitego wykorzystania na rdzeń, sprawdzam średnie obciążenie w ciągu 1, 5 i 15 minut, aby oddzielić krótkie szczyty od ciągłego obciążenia. Dzięki top/htop natychmiast rozpoznaję hotspoty i używam pidstat do izolowania poszczególnych procesów z widocznymi czasami CPU. Jeśli stale wysokie wartości wskazują na nieefektywne zapytania, skupiam się na indeksach bazy danych, buforowaniu i Profilowanie.
| Metryki | Zdrowy obszar | sygnał alarmowy | Następny krok |
|---|---|---|---|
| Wykorzystanie procesora | poniżej 80 % | ponad 85 trwałych % | Znajdź gorące punkty, zoptymalizuj kod/zapytania, dodaj rdzenie, jeśli to konieczne. |
| Średnie obciążenie | poniżej liczby rdzeni | o rdzeniach (5/15 min.) | Sprawdź listę procesów, wyjaśnij IOwait, zmniejsz kolejki |
Rozróżniam również użytkownik-, system-, irq/softirq- oraz steal-time. Jeśli system lub softirq znacznie wzrośnie, praca jądra lub sterowników (sieć / pamięć masowa) zużywa zegar. Jeśli kradzież rośnie na maszynach wirtualnych, konkuruję z sąsiadami na tym samym hoście; następnie usuwam plik Hałaśliwy sąsiad-wpływają na obciążenie pracą lub je opóźniają. Niezłe udziały wskazują na celowe nadawanie niskiego priorytetu zadaniom. Piętrzenie Przełączniki kontekstowe lub jeśli wpis kolejki uruchamiania w vmstat wzrasta, sprawdzam retencję blokad, zbyt małe pule wątków lub zbyt dużą równoległość.
- Krótkie sprawdzenie procesora: wyjaśnienie zależności między użytkownikiem a systemem, sprawdzenie kradzieży (chmura!), identyfikacja hotspotów pro-core.
- Termika i częstotliwość: Throttling jest sygnalizowany wysokimi temperaturami i spadkiem częstotliwości taktowania - należy wziąć pod uwagę ustawienia chłodzenia i zasilania.
- Hyper-Threading: Planuję wykorzystanie konserwatywnie, ponieważ wątki logiczne nie zastępują pełnych rdzeni.
Zrozumienie pamięci RAM, pamięci podręcznej i wymiany
Rozróżniam używane RAM, pamięci podręcznej/bufora i wolnej dostępnej pamięci, ponieważ Linux aktywnie wykorzystuje wolną pamięć jako pamięć podręczną. Staje się to problematyczne, gdy aplikacje stale zapełniają pamięć RAM i uruchamia się swap. Regularna aktywność swap spowalnia system, ponieważ dostęp do dysku trwa znacznie dłużej niż do pamięci RAM. Jeśli wykorzystanie pamięci rośnie nieprzerwanie przez wiele godzin, sprawdzam wycieki pamięci i obserwuję błędy stron jako sygnał do drukowania. W razie potrzeby zwiększam ilość pamięci RAM, optymalizuję odśmiecanie lub zmniejszam ślad poszczególnych stron. Usługi.
| Metryki | Zdrowy obszar | sygnał ostrzegawczy | Pomiar |
|---|---|---|---|
| Wykorzystanie pamięci RAM | poniżej 80 % | ponad 85 %, stały wzrost | Analiza nieszczelności, tuning pamięci podręcznej, w razie potrzeby rozbudowa pamięci RAM |
| Wykorzystanie swapów | poniżej 10 % | Regularna aktywność | Zmniejszenie wymagań dotyczących pamięci masowej, dostosowanie możliwości wymiany, szybsza pamięć masowa |
| Błędy strony | niski/stały | nagłe szczyty | Powiększ hotset, wzmocnij buforowanie, odciąż zapytania |
Obserwuję również THP (Transparent Huge Pages), lokalność NUMA i zabójca OOM. THP może wyzwalać zagęszczanie w obciążeniach wrażliwych na opóźnienia; dlatego sprawdzam, czy dostosowanie ma sens. W przypadku systemów NUMA zwracam uwagę na nierównomierną Miejsce przechowywania na gniazdo procesora. Jeśli zabójca OOM uruchamia procesy, rezerwa została wykorzystana - sprawdzam limity, wycieki i vm.overcommit-ustawienia. Mogę złagodzić presję za pomocą zram/zswap, jeśli nośnik jest wystarczająco szybki, ale zawsze przedkładam przyczynę (footprint) nad zwalczanie objawów.
- Precyzyjnie dostosuj swappiness: unikaj agresywnego swappingu, ale nie wypieraj pamięci podręcznej strony zbyt wcześnie.
- Regularnie wyciągaj profile sterty i GC; porównuj szczytowe zużycie po wdrożeniach.
- Zdefiniuj limity pamięci (kontenery/usługi) z zapasem, aby uniknąć twardych zabójstw.
Wyraźnie odczytaj średnią obciążenia
Czytam Obciążenie jako miara zapotrzebowania: zlicza procesy, które są uruchomione lub oczekują na zasoby. Wartość 1,0 oznacza pełne wykorzystanie na pojedynczym rdzeniu, podczas gdy 1,0 to prawie żadne obciążenie na 8 rdzeniach. Jeśli 5- lub 15-minutowe obciążenie przekracza liczbę rdzeni, natychmiast sprawdzam, czy nie stoi za tym IOwait lub zablokowane procesy. Jeśli procesor jest wolny, a obciążenie nadal wysokie, często wskazuje to na wąskie gardła I/O lub blokady. W przypadku typowych błędnych interpretacji korzystam z przeglądu w Interpretacja średniej obciążenia, abym mógł czysto obliczyć liczbę rdzeni Kalibracja.
Zauważyłem, że nieprzerwane I/O (D-State) zwiększa obciążenie, chociaż CPU robi niewiele. Dlatego koreluję obciążenie z vmstat (r/b) i listą procesów zawierającą stany. Krótkie skoki obciążenia w oknie 1-minutowym są często nieszkodliwe; wzrost w oknie 15-minutowym sygnalizuje strukturalne nasycenie. Zasadą jest, że kolejka uruchomień i obciążenie powinny pozostać poniżej średniej liczby rdzeni; tymczasowe wartości odstające oswajam poprzez buforowanie, backpressure i Dozowanie.
Uwidocznienie wejść/wyjść i IOwait
Rozważam I/O z iostat -x: %util pokazuje, jak zajęte jest urządzenie, a await ujawnia średni czas oczekiwania na żądanie. Jeśli %util stale zbliża się do 100 % lub wartości await wspinają się do dwucyfrowego zakresu milisekund, dostępy narastają. Iotop pomaga mi zidentyfikować poszczególne procesy z wysokim obciążeniem I/O, podczas gdy vmstat ujawnia proporcje IOwait w kolumnie wa. Wysoki IOwait przy umiarkowanym CPU wskazuje na nasycenie dysku lub opóźnienie pamięci masowej. Podsumowuję szczegóły dotyczące przyczyn i środków zaradczych w Zrozumienie IOwait razem, dzięki czemu mogę zidentyfikować wąskie gardła dokładnie we właściwym miejscu. rozpuszczać się.
| Metryki | Znaczenie | Próg | Pomiar |
|---|---|---|---|
| %utile | Wykorzystanie urządzenia | ponad 90 % | Równoważenie obciążenia, szybsze SSD/NVMe, dostrajanie kolejek |
| czekać | Czas oczekiwania/żądanie | rosnący/wysoki | Wzmocnienie pamięci podręcznej, dodanie indeksów, zmniejszenie opóźnień pamięci masowej |
| IOPS | Operacje/sek. | Widoczne nasycenie | Optymalizacja przepustowości, batching, asynchroniczność praca |
Oceniam również stawki za pisanie poprzez Writeback i brudnych stron. Jeśli przydziały dirty_background/dirty_ratio wzrastają, system opóźnia płukanie - może to generować szczyty opóźnień. Journaling i odbudowa RAID objawiają się wysokim udziałem system/wa bez odpowiedniego obciążenia aplikacji. Sprawdzam, czy wąskie gardła są spowodowane przez system plików (opcje montowania, głębokość kolejki, harmonogram) lub urządzenie bazowe, a także czy macierze LVM/RAID powodują nierównomierne obciążenie poszczególnych urządzeń. Po pełnym wykorzystaniu skaluję pionowo (szybsze medium) lub poziomo (sharding, repliki).
- Środki natychmiastowe: Wzmocnić warstwę cache przed DB, zaostrzyć indeksy, zwiększyć hotset w RAM.
- Płynna ścieżka zapisu: Sprawdzanie wielkości partii, asynchroniczne zatwierdzanie, interwały punktów kontrolnych.
- Sprawdź system plików: wolne i-węzły, fragmentację, ustaw opcje montowania (noatime) zgodnie z wymaganiami.
Rozpoznawanie połączeń: Procesor, pamięć RAM i wejścia/wyjścia w interakcji
Zawsze podchodzę do systemów całościowo, ponieważ Metryki wpływają na siebie nawzajem. Wysokie obciążenie przy niskim CPU często wskazuje na blokowanie operacji I/O, podczas gdy wysoki CPU przy stałym obciążeniu wskazuje na zadania wymagające dużej mocy obliczeniowej. Jeśli ciśnienie pamięci RAM wzrasta, dane migrują do wymiany i nagle powodują obciążenie I/O i długi czas oczekiwania. I odwrotnie, ukierunkowane buforowanie zmniejsza obciążenie I/O, a tym samym obniża obciążenie i szczyty CPU. Daje to jasny obraz, który pozwala mi podjąć działania w najbardziej efektywnym momencie. zastosowanie.
Prawidłowa ocena wskaźników sieciowych
Organizuję Sieć-Sygnały wzdłuż przepustowości, opóźnienia, błędów i połączeń. Wysoka przepustowość ze stabilnym opóźnieniem nie jest krytyczna; jeśli występują retransmisje, spadki lub błędy, szukam wąskich gardeł na karcie sieciowej, sterowniku, przełączniku lub w aplikacji. Za pomocą ss -s rozpoznaję pełne listy (ESTAB, SYN-RECV), powodzie timewait i wyczerpane zaległości. Sar -n pokazuje mi p/s, err/s, drop/s; ethtool/nstat ujawnia błędy NIC i problemy z offloadingiem. Osobno mierzę wyszukiwania DNS, ponieważ powolne rozwiązywanie nazw spowalnia całe żądania.
- Wysoka liczba retransmisji: Sprawdź MTU/fragmentację, dostosuj bufor (rmem/wmem) i odciążenie, przeanalizuj ścieżkę opóźnienia.
- SYN backlog full: zwiększenie backlogu, sprawdzenie limitów prędkości, Łączenie połączeń zoptymalizować.
- Wartości odstające w P95/P99: View Nagle/Delayed ACK, negocjacje TLS, Keep-Alive i ponowne wykorzystanie sesji.
Rozważ wirtualizację i kontenery
W maszynach wirtualnych obserwuję steal, ponieważ retencja hiperwizora wyraźnie „kradnie“ procesor. Planuję dodatkowy zapas lub izoluję krytyczne obciążenia. W kontenerach limity cgroup są kluczowe: cpu.max/cpu.shares kontrolują sprawiedliwość, zdarzenia memory.max i oom-kill pokazują twarde limity. Throttling jest rozpoznawalny w pidstat/Top jako wysoki czas oczekiwania, mimo że dostępna jest wystarczająca liczba rdzeni. Mierzę dla każdego kontenera/poda, nie tylko na poziomie hosta, i koreluję limity, żądania i rzeczywiste Użyj. Node-Pressure (PSI) pomaga mi wcześnie zobaczyć ciśnienie w całym systemie.
Trendy, wartości bazowe i sezonowość
Tworzę dla procesora, pamięci RAM, obciążenia i wejścia/wyjścia Linia bazowa według pory dnia i dnia tygodnia, dzięki czemu mogę odróżnić normalne wzorce od rzeczywistych anomalii. Powtarzające się zadania cron, kopie zapasowe lub zadania analityczne powodują przewidywalne szczyty, które oznaczam osobno. W przypadku wartości odstających używam średnich ruchomych i 95. percentyli, aby zmniejszyć liczbę fałszywych alarmów. Dostosowuję wartości progowe raz w tygodniu, jeśli zmienia się zachowanie użytkowników. Jeśli chodzi o wizualizację, polegam na wypróbowanych i przetestowanych metodach Narzędzia do monitorowania, trendy w zrozumiały sposób i zaoszczędzić czas potrzebny na podejmowanie decyzji. skracać się.
Uzupełniam linie bazowe o Wdrażanie znaczników i wydarzenia biznesowe (kampanie, premiery), aby kategoryzować skoki obciążenia. Zwracam uwagę na sezonowość w ujęciu dziennym, tygodniowym i miesięcznym; wybieram roll-upy (1m, 5m, 1h), aby nie wygładzały szczytów. W przypadku silnych wahań obciążenia, oceniam p95/p99 w oknach czasowych, tak aby „długie ogony“ pozostały widoczne.
Rozsądne ustawianie wartości progowych i alarmów
Definiuję alarmy w taki sposób, aby wywoływały działanie, a nie tylko generowały głośność, ponieważ jakość bije jakość. Ilość. Na przykład dla procesora używam >80 % przez pięć minut, dla pamięci RAM >85 % i dla obciążenia > rdzenia do 15 minut. Ustawiam alarm IOwait, gdy wa w vmstat rośnie powyżej zdefiniowanych wartości bazowych. Łączę ostrzeżenia i krytyczne, aby móc podjąć środki zaradcze przed eskalacją. Każdy sygnał łączę z runbookiem, który wyjaśnia pierwszy krok i czas reakcji. oszczędności.
Grupuję alarmy według przyczyny zamiast objawu: Problem z pamięcią masową generuje wiele kolejnych alarmów (bezczynność procesora, wysokie obciążenie, timeouty) - deduplikuję je w jeden. Incydent. Alerty z wieloma warunkami (np. obciążenie > rdzenie ORAZ wzrost IOwait) zmniejszają hałas. Okna konserwacyjne i wyciszenia są częścią procesu, podobnie jak działania następcze: dostrajam progi po każdym incydencie i dokumentuję jasne kryteria wyjścia dla każdego alertu.
Szybkie diagnozowanie wzorców błędów
Wycieki pamięci rozpoznaję po powoli zwiększającym się Wykorzystanie pamięci, który nie powraca po wdrożeniach. Brakujące indeksy bazy danych są ujawniane przez wysokie obciążenie I/O, rosnące wartości oczekiwania i zapytania, które zawieszają się na liście procesów. Szczyty CPU spowodowane pętlami lub problemami z wyrażeniami regularnymi często występują bezpośrednio po zdarzeniach związanych z ruchem i utrzymują się aż do ponownego uruchomienia. Pełne wolumeny można zobaczyć wcześniej w rosnącej kolejce I/O i malejącej przepustowości; czyszczenie w odpowiednim czasie zapobiega awariom. Widzę opóźnienia sieciowe w dłuższych czasach odpowiedzi przy normalnym profilu CPU/RAM i koreluję to z metrykami na Sieć-poziom.
Dodatkowe próbki:
- Kradnij wysoko w maszynach wirtualnych: hałaśliwy sąsiad lub przeciążone hosty - odizolowanie lub przeniesienie obciążenia.
- Przerwy GCCPU spada, opóźnienie rośnie, krótki stop-the-world plateaus - dostosuj parametry sterty/GC.
- Zagęszczanie THPczas systemowy wzrasta, opóźnienie rośnie - sprawdź tryb THP.
- Wskazówki dotyczące zapisu zwrotnegowysokie await/wa, szczególnie dla checkpointów - wygładzenie strategii flush/checkpoint.
- Wyczerpanie basenuPule połączeń lub wątków pełne, wiele oczekujących żądań - dostosuj ciśnienie wsteczne i limity.
- Porty efemeryczne lub Limity FD osiągnięto: nowe połączenia nie powiodły się - zwiększ sysctl/ulimits i aktywuj ponowne użycie.
Przyszłościowe planowanie wydajności i kontrola kosztów
Planuję wydajność na podstawie danych o trendach, dzięki czemu mogę dokonywać ukierunkowanych aktualizacji. czas-we właściwy sposób. Jeśli 95. percentyl CPU rośnie o 10 % miesięcznie, obliczam punkt, w którym regularnie uruchamiane są alarmy. W przypadku pamięci RAM sprawdzam, ile miejsca pozostało do wymiany i jak buforowanie zmniejsza wymagania. W przypadku operacji we/wy obliczam najwyższą wartość oczekiwania, która jest nadal akceptowalna, i nadaję priorytet inwestycjom w szybsze nośniki przed skalowaniem bez kontroli. W ten sposób utrzymuję niezawodność systemów i przewidywalne koszty, zamiast polegać na Wąskie gardła zareagować.
Biorę pod uwagę efekty kolejkowania: Od ~70-80 % wykorzystania opóźnienia rosną nieproporcjonalnie; dlatego planuję Headroom dla szczytów. Right-sizing zamiast overprovisioning zmniejsza koszty: skalowanie w mniejszych krokach, kombinacje spot/reserved i wyłączanie nieużywanych zasobów. Rozszerzam poziomo, gdy zapewniona jest bezstanowość; pionowo, gdy opóźnienia są poniżej ścieżek krytycznych lub sharding byłby zbyt złożony.
Stos narzędzi: top, vmstat, iostat, pidstat
Zaczynam od top/htop, aby posortować procesy według CPU, RAM i Stan aby posortować i zobaczyć wartości odstające. Następnie czytam vmstat dla kolejki uruchamiania (r), zablokowanych procesów (b), IOwait (wa) i przełączników kontekstowych (cs). Za pomocą iostat -x oceniam %util, await, r/s i w/s na urządzenie, aby szybko rozpoznać nasycenie. Pidstat pokazuje mi specyficzne dla procesu czasy CPU, I/O i przełączniki kontekstowe, co jest niezbędne dla współdzielonych hostów. Zbieram również kluczowe dane za pośrednictwem agenta na pulpicie nawigacyjnym, dzięki czemu mogę analizować wzorce na przestrzeni dni. porównać.
Uzupełniam w razie potrzeby:
- sar dla historycznych danych systemowych (CPU, RAM, sieć, urządzenia blokowe).
- ss i statystyki netlink dla gniazd, zaległości i retransmisji.
- perf/Narzędzia oparte na eBPF do głębokiej analizy ścieżek gorących bez dużych kosztów ogólnych.
- strace selektywnie w przypadku podejrzenia wywołania systemowego, aby blokery były widoczne.
- fio w Staging, aby zmierzyć realistyczne profile przechowywania i uzyskać wartości docelowe.
Łączenie metryk z dziennikami i śladami
I link Metryki z dziennikami i rozproszonymi śladami poprzez korelacje: Identyfikatory żądań, tagi usług i wersji, region i węzeł. Pozwala mi to znaleźć przejście od zwiększonych opóźnień do konkretnych, powolnych zapytań lub wadliwych zależności zewnętrznych. Oznaczam wdrożenia na pulpicie nawigacyjnym, dzięki czemu mogę rozpoznać regresje w ciągu kilku sekund. Dodaję percentyle opóźnień do współczynników błędów (rate) i nasycenia (saturation) - daje to jasny obraz SLO z alarmami, które bezpośrednio odzwierciedlają wrażenia użytkownika.
Praktyczny przewodnik na następne 30 dni
W pierwszym tygodniu jasno określam Wartości bazowe i oznaczyć regularne zadania, takie jak kopie zapasowe lub raporty. W drugim tygodniu konfiguruję alarmy i runbooki, które opisują pierwszą interwencję dla każdego sygnału. W trzecim tygodniu optymalizuję główne czynniki: powolne zapytania, brakujące indeksy, niepotrzebne serializacje lub zbyt małe pamięci podręczne. W czwartym tygodniu sprawdzam, jak zmienił się rozkład obciążenia i odpowiednio dostosowuję wydajność lub limity. Tworzy to powtarzalny cykl, który przenosi monitorowanie z obserwacji reaktywnej na monitorowanie zorientowane na działanie. Podatki Tak.
Aktywnie testuję alarmy (Game Day): sztuczne obciążenie, niski poziom pamięci, ograniczone I/O - zawsze z wycofywaniem. Dopracowuję runbooki z jasnymi punktami pomiarowymi („jeśli obciążenie > rdzenie ORAZ wa wysokie, to ...“). Wykonuję cotygodniowe mini-postmortemy, nawet bez incydentu, w celu zapewnienia korzyści edukacyjnych i Hałas redukcja. Pod koniec 30 dni będziesz mieć solidne pulpity nawigacyjne, czyste progi i zespół, który wie, jak reagować w ukierunkowany sposób.
Krótkie podsumowanie
Czytam Monitoring-dane konsekwentnie w kontekście rdzeni CPU, wykorzystania pamięci, średnich obciążeń i wskaźników I/O. Wysoki CPU w czasie, rosnące wykorzystanie pamięci RAM, obciążenie rdzeni i IOwait to moi najważniejsi kandydaci do alarmu. Za pomocą top, vmstat, iostat, pidstat i przejrzystych pulpitów nawigacyjnych rozpoznaję wzorce i wybieram najbardziej skuteczną śrubę regulacyjną. Wartości bazowe, znaczące progi i runbooki przekształcają dane liczbowe w konkretne, szybkie działania. Pozwala mi to na interpretację monitoringu, unikanie wąskich gardeł i zapewnienie niezawodnego doświadczenia użytkownika. bezpieczny.


