Jak czytać informacje z pliku /proc/vmstat w systemie Linux

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 dysku
  • pgpgout – 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 swapu
  • pswpout – liczba stron zapisanych do swapu

Interpretacja:

  • jeśli pswpout rośnie szybko → system zaczyna brakować RAM
  • jeśli pswpin rośnie → procesy są przywracane ze swapu (może powodować spowolnienia)

3. Błędy stron (Page Faults)

  • pgfault – liczba wszystkich błędów stron
  • pgmajfault – 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 stron
  • nr_inactive_anon – nieaktywna pamięć anonimowa
  • nr_active_anon – aktywna pamięć anonimowa
  • nr_inactive_file – nieaktywna pamięć plików
  • nr_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 kswapd
  • pgscan_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_hit
  • numa_miss
  • numa_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:

  • pgmajfault rośnie szybko
  • pswpout rośnie
  • pgscan_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:

  • top
  • htop
  • vmstat
  • sar

3. Znaj kontekst systemu

Wysokie wartości nie zawsze oznaczają problem:

  • serwer cache → dużo pgpgin/pgpgout to 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/vmstatvmstat
pełne daneagregacja
surowe licznikiwartoś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
  • pgmajfault i pswpout to kluczowe wskaźniki problemów
  • pgscan_direct sugeruje 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.

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.