System Linux udostępnia ogromną ilość informacji diagnostycznych poprzez wirtualny system plików /proc. Jednym z mniej znanych, ale bardzo wartościowych źródeł danych o stanie pamięci jest plik /proc/vmstat. Zawiera on szczegółowe statystyki dotyczące zarządzania pamięcią w jądrze (ang. kernelu) Linux, które mogą być niezwykle przydatne przy analizie wydajności, debugowaniu problemów oraz optymalizacji systemu.
W tym artykule pokażę, czym jest /proc/vmstat, jak interpretować jego zawartość oraz na które pola warto zwrócić szczególną uwagę.
Czym jest /proc/vmstat?
Plik /proc/vmstat to interfejs tekstowy dostarczający statystyk związanych z pamięcią wirtualną (Virtual Memory – VM). Dane w nim zawarte pochodzą bezpośrednio z jądra systemu i są aktualizowane w czasie rzeczywistym.
Możesz go wyświetlić prostym poleceniem:
cat /proc/vmstat
Otrzymasz listę par klucz wartość, np.:
pgpgin 123456
pgpgout 654321
pswpin 10
pswpout 20
pgfault 987654
pgmajfault 123
Każda linia reprezentuje konkretną statystykę.
Jak interpretować dane?
Najważniejsze jest zrozumienie, że:
- większość wartości to liczniki rosnące (counters) od momentu uruchomienia systemu
- nie są to wartości chwilowe, lecz skumulowane
- aby analizować zachowanie systemu, często porównuje się różnice w czasie
Przykład:
watch -n 1 cat /proc/vmstat
lub lepiej:
grep -E "pgfault|pgmajfault" /proc/vmstat
Kluczowe metryki w /proc/vmstat
1. Operacje wejścia/wyjścia pamięci
pgpgin– liczba stron pamięci wczytanych z dyskupgpgout– liczba stron zapisanych na dysk
Interpretacja:
- wysokie wartości mogą oznaczać intensywne użycie swapu lub operacje I/O
2. Swap
pswpin– liczba stron załadowanych ze swapupswpout– liczba stron zapisanych do swapu
Interpretacja:
- jeśli
pswpoutrośnie szybko → system zaczyna brakować RAM - jeśli
pswpinrośnie → procesy są przywracane ze swapu (może powodować spowolnienia)
3. Błędy stron (Page Faults)
pgfault– liczba wszystkich błędów stronpgmajfault– liczba poważnych błędów stron (major faults)
Różnica:
- minor fault – strona jest w pamięci, ale trzeba ją zmapować
- major fault – strona musi zostać wczytana z dysku
Interpretacja:
- wysoki
pgmajfault→ potencjalny problem z wydajnością
4. Zarządzanie pamięcią
nr_free_pages– liczba wolnych stronnr_inactive_anon– nieaktywna pamięć anonimowanr_active_anon– aktywna pamięć anonimowanr_inactive_file– nieaktywna pamięć plikównr_active_file– aktywna pamięć plików
Interpretacja:
- pozwala zrozumieć, jak kernel zarządza cache i pamięcią procesów
5. Reclaim i praca kswapd
pgscan_kswapd– liczba skanowanych stron przez kswapdpgscan_direct– liczba skanowań bezpośrednich (direct reclaim)pgsteal– liczba odzyskanych stron
Interpretacja:
- wysoki
pgscan_direct→ procesy same muszą zwalniać pamięć (zły znak) - wysoka aktywność kswapd → system pod presją pamięci
6. Alokacje i zwolnienia
pgalloc_*– liczba alokowanych stron (zależna od strefy)pgfree– liczba zwolnionych stron
Interpretacja:
- dynamiczne zmiany wskazują na intensywne użycie pamięci
7. NUMA (jeśli dostępne)
W systemach NUMA pojawią się dodatkowe pola:
numa_hitnuma_missnuma_foreign
Interpretacja:
- pomagają analizować lokalność pamięci
Praktyczne przykłady użycia
Monitorowanie swapu w czasie rzeczywistym
watch -n 1 "grep pswp /proc/vmstat"
Jeśli wartości rosną:
- system zaczyna używać swapu → warto sprawdzić RAM
Analiza problemów wydajnościowych
Sprawdź:
grep -E "pgmajfault|pswpout|pgscan_direct" /proc/vmstat
Jeśli:
pgmajfaultrośnie szybkopswpoutrośniepgscan_direct> 0
→ masz klasyczny problem z niedoborem pamięci
Obliczanie przyrostów
Możesz napisać prosty skrypt:
#!/bin/bash
prev=$(grep pgfault /proc/vmstat | awk '{print $2}')
sleep 1
curr=$(grep pgfault /proc/vmstat | awk '{print $2}')
echo "Page faults per second: $((curr - prev))"
Wskazówki i dobre praktyki
1. Nie patrz na pojedynczy odczyt
Zawsze analizuj zmiany w czasie.
2. Łącz z innymi narzędziami
/proc/vmstat najlepiej używać razem z:
tophtopvmstatsar
3. Znaj kontekst systemu
Wysokie wartości nie zawsze oznaczają problem:
- serwer cache → dużo
pgpgin/pgpgoutto norma - baza danych → dużo page faultów
/proc/vmstat vs vmstat (narzędzie)
Polecenie vmstat korzysta z tych samych danych, ale prezentuje je w uproszczonej formie.
Różnica:
/proc/vmstat | vmstat |
|---|---|
| pełne dane | agregacja |
| surowe liczniki | wartości chwilowe |
| więcej szczegółów | łatwiejsze do czytania |
Podsumowanie
Plik /proc/vmstat to potężne narzędzie do analizy zachowania pamięci w systemie Linux. Choć na pierwszy rzut oka wygląda jak zbiór tajemniczych liczników, po zrozumieniu kilku kluczowych metryk staje się niezwykle użyteczny.
Najważniejsze rzeczy, które warto zapamiętać:
- to liczniki rosnące – analizuj różnice w czasie
pgmajfaultipswpoutto kluczowe wskaźniki problemówpgscan_directsugeruje presję pamięci- zawsze interpretuj dane w kontekście aplikacji i systemu
Jeśli zajmujesz się administracją systemów, optymalizacją wydajności lub debuggingiem – /proc/vmstat powinien znaleźć się w Twoim zestawie narzędzi.