15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
15.11.2023

Команди и инструменти за проверка на консумацията на RAM в Linux

Мониторингът на RAM използването в Linux означава заявяване на подсистемата за памет на ядрото за извличане на метрики за разпределение на физическата памет, използване на swap и размери на резидентния набор за всеки процес. Най-преките методи използват вградени помощни програми — free, top, htop, ps, vmstat и smem — всяка от които разкрива различен слой от йерархията на паметта, от общите стойности за цялата система до пропорционалния размер на набора (PSS) за всеки процес.

Прекомерното натоварване на паметта задейства Linux убиеца при изчерпване на паметта (OOM), който принудително прекратява процеси, за да освободи RAM. Разбирането кои команди разкриват кои метрики — и какво всъщност означават тези метрики — е разликата между реактивно справяне с проблеми и проактивно управление на капацитета. Това ръководство обхваща всеки основен инструмент, изходните данни на ядрото, от които те четат, и граничните случаи, които изненадват дори опитни администратори.

Защо мониторингът на RAM е важен на Linux сървъри

Управлението на паметта в Linux е умишлено агресивно. Ядрото използва цялата налична RAM като кеш на страници за ускоряване на дисковия I/O, което означава, че система, отчитаща почти нулева свободна памет, не е непременно под натоварване — тя може просто да кешира ефективно. Погрешното тълкуване на това поведение е една от най-честите грешки при интерпретиране на необработени стойности за памет.

Основни причини за непрекъснат мониторинг на RAM:

  • Предотвратяване на OOM убиеца: Идентифицирайте процеси, консумиращи много памет, преди ядрото да прекрати критични услуги.
  • Откриване на използване на swap: Интензивната swap активност (суапване) показва изчерпване на RAM и причинява сериозна I/O латентност.
  • Диагностика на изтичане на памет: Процеси с постоянно нарастващ RSS с течение на времето сигнализират за изтичания на ниво приложение.
  • Планиране на капацитета: Данните за тенденциите информират решенията за вертикално мащабиране или преразпределение на натоварването.
  • Настройка на производителността: Регулирането на vm.swappiness, огромни страници и NUMA топология изисква базови данни за паметта.

В среда за VPS Хостинг, където ресурсите се споделят или са ограничени от лимитите на хипервайзора, точният мониторинг на RAM е особено критичен — достигането на таван на паметта безшумно влошава производителността, преди да се задейства каквото и да е предупреждение.

Разбиране на терминологията за памет в Linux

Преди да изпълните каквато и да е команда, трябва да разберете какво всъщност представляват изходните колони.

ТерминОпределение
TotalИнсталирана физическа RAM (или разпределена на виртуалната машина)
UsedПамет, активно консумирана от процеси и структури на ядрото
FreeНапълно неизползвана RAM — често подвеждащо ниска
SharedПамет, използвана от tmpfs и споделена между процеси
Buff/CacheБуфери на ядрото и кеш на страници — може да бъде освободена при поискване
AvailableРеалистична оценка на RAM, налична за нови разпределения без суапване
Swap UsedДанни, изместени от RAM към swap дяла или swap файла
VSZ (Virtual Size)Общото виртуално адресно пространство, запазено от процес
RSS (Resident Set Size)Физическа RAM, заета в момента от процес
PSS (Proportional Set Size)RSS, коригиран за споделена памет — най-точната метрика за всеки процес
USS (Unique Set Size)Памет, притежавана изключително от процес; напълно освободена при излизане

Критично прозрение: Винаги използвайте колоната Available от free -h, а не колоната Free, когато оценявате дали системата има достатъчно RAM за ново натоварване. Колоната Free игнорира освобождаемия кеш, което води до фалшиви аларми.

Файлът /proc/meminfo: Авторитетният източник

Всеки инструмент, описан в тази статия, чете от /proc/meminfo, виртуален файл, поддържан от ядрото в реално време. Директното му инспектиране ви дава най-детайлните налични данни:

cat /proc/meminfo

Ключови полета за наблюдение:

  • MemTotal — обща използваема RAM
  • MemFree — напълно неактивна RAM
  • MemAvailable — прогнозна налична RAM за нови процеси
  • Buffers — суров кеш на дискови блокове
  • Cached — кеш на страници за файлове
  • SwapTotal / SwapFree — капацитет и наличност на swap
  • Dirty — памет, чакаща да бъде записана на диск (високите стойности показват I/O натоварване)
  • HugePages_Total / HugePages_Free — статус на разпределение на огромни страници
  • Slab — кеш на структури от данни на ядрото (може да нарасне значително на натоварени NFS или сървъри за бази данни)

Разбирането на /proc/meminfo ви позволява да интерпретирате изхода на всеки друг инструмент с пълен контекст.

Проверка на RAM с командата free

free е най-бързият начин за получаване на снимка на паметта за цялата система. Чете директно от /proc/meminfo и форматира изхода в таблица, четима от човек.

Основна употреба

free

Изходът е в килобайти по подразбиране. Използвайте флагове за по-четими формати:

free -h        # Human-readable (MB/GB)
free -m        # Output in megabytes
free -g        # Output in gigabytes
free -s 5      # Refresh every 5 seconds (continuous monitoring)
free -h --si   # Use SI units (1000-based) instead of binary (1024-based)

Обяснение на примерния изход

              total        used        free      shared  buff/cache   available
Mem:           15Gi       4.2Gi       1.1Gi       312Mi       9.8Gi       10.9Gi
Swap:         2.0Gi       128Mi       1.9Gi

В този пример системата изглежда, че има само 1,1 GB свободна памет, но 10,9 GB всъщност са налични за нови процеси, тъй като ядрото ще освободи buff/cache при поискване. Това е най-важното нещо, което трябва да разберете за изхода на free.

Граничен случай: Използването на swap като предупредителен сигнал

Дори малко количество използване на swap (Swap: used > 0) на производствен сървър заслужава разследване. Това означава, че ядрото вече е решило, че някои страници с памет се съхраняват по-добре на диск, отколкото в RAM — знак, че работният набор надвишава физическата памет.

Проверка на RAM с командата top

top предоставя непрекъснато актуализиран изглед в реално време на използването на системните ресурси, комбинирайки статистики за CPU и памет с класиран списък на процесите.

top

Ключови полета за памет в top

В горната част на интерфейса на top два реда показват статистики за паметта:

MiB Mem :  16384.0 total,   1126.4 free,   4301.2 used,  10956.4 buff/cache
MiB Swap:   2048.0 total,   1920.0 free,    128.0 used.  11200.0 avail Mem

В таблицата с процеси най-релевантните колони за памет са:

  • VIRT — размер на виртуалната памет (еквивалент на VSZ)
  • RES — резидентна физическа памет (RSS)
  • SHR — споделена част от паметта на RES
  • %MEM — процент от общата физическа RAM, използвана

Полезни интерактивни команди на top

КлавишДействие
MСортиране на процесите по използване на паметта (%MEM)
PСортиране по използване на CPU
kПрекратяване на процес по PID
1Превключване на статистики за всяко CPU ядро
fДобавяне/премахване на полета за показване
WЗапазване на текущата конфигурация

Изпълнение на top неинтерактивно

За скриптиране и запис на журнали, изпълнете top в пакетен режим:

top -b -n 1 | head -30

Това извежда единична снимка — полезна за скриптове за мониторинг, базирани на cron.

Проверка на RAM с htop

htop е подобрен, базиран на ncurses преглед на процеси, който представя същите основни данни като top със значително по-удобен интерфейс. Не е инсталиран по подразбиране на повечето дистрибуции.

Инсталация

# Debian / Ubuntu
apt-get install htop

# RHEL / CentOS / AlmaLinux / Rocky Linux
yum install htop
# or on newer versions:
dnf install htop

# Alpine Linux
apk add htop

Какво добавя htop спрямо top

  • Цветово кодирани ленти за памет, разграничаващи използваната памет, буферите и кеша с един поглед
  • Хоризонтален и вертикален изглед на дървото на процесите (F5)
  • Поддръжка на мишка за кликване и превъртане
  • Множествен избор за групово управление на процеси
  • Вградено търсене (F3) и филтриране (F4) без запомняне на клавишни комбинации
  • Директно показване на наличната памет на видно място в заглавката

Легенда на цветовете на лентата за памет в htop

ЦвятЗначение
ЗеленИзползвана памет (процеси)
СинБуферен кеш
Жълт/ОранжевКеш на страници
ЧервенИзползван swap

Професионален съвет: В htop, натиснете F2 (Настройки) > Опции за показване > активирайте „Показване на честотата на CPU” и „Подробно CPU време” за по-пълна картина заедно с данните за паметта.

Проверка на RAM с командата ps

ps (статус на процеса) заявява таблицата на процесите на ядрото и може да бъде сортиран и филтриран за идентифициране на най-големите консуматори на памет в даден момент.

Сортиране на процесите по консумация на памет

ps aux --sort=-%mem

Обяснение на изходните колони

КолонаОписание
USERСобственик на процеса
PIDИдентификатор на процеса
%CPUИзползване на CPU от стартирането на процеса
%MEMПроцент от използваната физическа RAM (RSS / MemTotal)
VSZРазмер на виртуалната памет в KB
RSSРазмер на резидентния набор в KB
TTYУправляващ терминал
STATСъстояние на процеса (S=спящ, R=изпълняващ се, Z=зомби, D=неприекъсваемо чакане)
STARTЧас на стартиране на процеса
TIMEКумулативно консумирано CPU време
COMMANDИме и аргументи на командата

Практични едноредови команди

Показване на топ 10 процеси, консумиращи памет, с четим от човек изход:

ps aux --sort=-%mem | head -11

Показване на използването на паметта за конкретно име на процес (напр. Apache):

ps aux | grep apache2 | awk '{sum += $6} END {print sum/1024 " MB"}'

Това сумира RSS стойностите на всички работни процеси на apache2 — критично за разбирането на истинския отпечатък на многопроцесни уеб сървъри.

Важна забележка: ps показва RSS, което двойно брои споделените библиотеки. Ако 20 работника на Apache всеки картографира същата 50 MB споделена библиотека, ps отчита 1 000 MB използване на споделена библиотека за тях, докато действителната физическа цена е само 50 MB. Използвайте smem за точно отчитане.

Проверка на RAM с smem

smem е най-точният инструмент за отчитане на паметта за всеки процес, наличен в Linux, тъй като отчита PSS (Пропорционален размер на набора) — споделената памет се разделя пропорционално между всички процеси, които я картографират, елиминирайки проблема с двойното броене, присъщ на инструментите, базирани на RSS.

Инсталация

# Ubuntu / Debian
apt-get install smem

# CentOS / RHEL 7
yum install smem

# RHEL 8+ / AlmaLinux / Rocky Linux
dnf install smem

# Alternatively, install via pip
pip install smem

Основна употреба

smem

Полезни опции на smem

smem -r              # Sort by RSS (descending)
smem -s pss -r       # Sort by PSS (most accurate, descending)
smem -u              # Aggregate by user
smem -m              # Show system-wide memory map
smem -p              # Show percentages instead of raw KB
smem -k              # Show values in KB
smem -t              # Show totals row
smem --pie name      # Generate a pie chart (requires matplotlib)
smem -P apache2      # Filter by process name pattern

PSS срещу RSS: Защо е важно

Разгледайте сървър, изпълняващ 10 работни процеса на Node.js, всеки споделящ 100 MB библиотека на V8 runtime:

  • RSS на процес: 200 MB (100 MB споделена + 100 MB частна)
  • Общо отчетен RSS: 2 000 MB
  • PSS на процес: 110 MB (10 MB дял от 100 MB + 100 MB частна)
  • Общо отчетен PSS: 1 100 MB
  • Действително използвана физическа RAM: 1 100 MB

RSS надценява използването с почти 2 пъти в този сценарий. При вземане на решения за мащабиране на Dedicated сървър, използването на PSS от smem ви дава истинската картина.

Проверка на RAM с vmstat

vmstat (статистики за виртуална памет) предоставя по-широк изглед на паметта, swap, I/O и CPU активността, което го прави идеален за диагностициране на натоварване на паметта в цялата система, а не на проблеми с отделни процеси.

vmstat 2 10    # Report every 2 seconds, 10 times

Ключови колони за памет

КолонаОписание
swpdИзползвана виртуална памет (swap)
freeНеактивна памет
buffПамет, използвана като буфери
cacheПамет, използвана като кеш
siПамет, суапната от диска (KB/s)
soПамет, суапната на диска (KB/s)

Критичен сигнал: Ненулеви стойности на si (суап-вход) и so (суап-изход) в работещ поток на vmstat показват активно суапване — окончателен знак за изчерпване на паметта. Дори случайни пикове в so могат да причинят пикове на латентност на приложението от стотици милисекунди.

Проверка на RAM с sar (Репортер на системната активност)

sar от пакета sysstat записва исторически данни за паметта, позволявайки ретроспективен анализ — нещо, което инструментите в реално време не могат да предоставят.

Инсталация

apt-get install sysstat    # Debian/Ubuntu
yum install sysstat        # CentOS/RHEL

Употреба

sar -r 1 5          # Memory stats every 1 second, 5 times
sar -r -f /var/log/sysstat/sa$(date +%d)   # Today's historical data
sar -S 1 5          # Swap statistics

sar е безценен за отговаряне на въпроси като „Имаше ли пик на паметта в 3 часа сутринта, причинил срива на приложението?” — въпрос, на който никой инструмент в реално време не може да отговори след факта.

Проверка на RAM с /proc/<PID>/status и /proc/<PID>/smaps

За задълбочен анализ на всеки процес, ядрото излага подробни карти на паметта директно в /proc.

Бърза проверка на паметта за всеки процес

cat /proc/$(pgrep nginx | head -1)/status | grep -E "VmRSS|VmPeak|VmSize|VmSwap"

Пример за изход:

VmPeak:   512340 kB
VmSize:   498120 kB
VmRSS:    102400 kB
VmSwap:        0 kB
  • VmPeak — пиков размер на виртуалната памет, достигнат някога от този процес
  • VmRSS — текущ размер на резидентния набор
  • VmSwap — колко от този процес е суапнато

Подробна карта на паметта с smaps

cat /proc/$(pgrep mysql | head -1)/smaps | grep -E "^(Size|Rss|Pss|Shared|Private)"

Това разкрива всяко картографиране на паметта (heap, stack, споделени библиотеки, анонимни картографирания) с индивидуални RSS и PSS стойности — най-детайлният изглед на паметта, наличен без профайлър.

Сравнение на инструментите: Избор на правилната команда

ИнструментОбхватТип метрикаВ реално времеИсторическиТочност на споделена паметНай-добър случай на употреба
freeЗа цялата системаTotal/AvailableДаНеН/ПБърза проверка на здравето
topЗа всеки процес + системаRSS, %MEMДаНеНиска (RSS)Интерактивен мониторинг
htopЗа всеки процес + системаRSS, %MEMДаНеНиска (RSS)Интерактивен мониторинг (предпочитан)
psЗа всеки процесRSS, VSZСнимкаНеНиска (RSS)Скриптиране, сортиране
smemЗа всеки процесPSS, USS, RSSСнимкаНеВисока (PSS)Точно отчитане на паметта
vmstatЗа цялата системаSwap I/O, freeДаНеН/ПДиагностициране на натоварване на swap
sarЗа цялата системаВсички метрикиНеДаН/ПАнализ след инцидент
/proc/meminfoЗа цялата системаНеобработени данни на ядротоДаНеН/ПСкриптиране, автоматизация
/proc/PID/smapsЗа всеки процесПълна картаДаНеВисокаЗадълбочено профилиране на процеси

Практически работни процеси за мониторинг

Работен процес 1: Бърза триаж (под 60 секунди)

free -h                          # Step 1: Is Available memory critically low?
vmstat 1 5                       # Step 2: Is active swapping occurring?
ps aux --sort=-%mem | head -15   # Step 3: Which processes are the top consumers?

Работен процес 2: Идентифициране на изтичане на памет

# Watch a specific process's RSS grow over time
watch -n 5 'ps -o pid,rss,vsz,comm -p $(pgrep your_app)'

# Or use smem with repeated snapshots
while true; do smem -P your_app -t; sleep 30; done

Работен процес 3: Исторически анализ след инцидент

sar -r -f /var/log/sysstat/sa$(date +%d --date='yesterday')

Работен процес 4: Скрипт за автоматизирано предупреждение

#!/bin/bash
THRESHOLD=90
USED_PCT=$(free | awk '/^Mem:/ {printf "%.0f", $3/$2 * 100}')
if [ "$USED_PCT" -gt "$THRESHOLD" ]; then
    echo "ALERT: RAM usage at ${USED_PCT}% on $(hostname)" | mail -s "Memory Alert" admin@example.com
fi

Този скрипт може да бъде поставен в cron задача за непрекъснат автоматизиран мониторинг — практическа необходимост на всеки производствен VPS с cPanel или сървър на голо желязо.

Разширено: Параметри за настройка на паметта на ядрото

След като сте идентифицирали натоварването на паметта, тези параметри на sysctl директно влияят на поведението:

# View current swappiness (default: 60)
sysctl vm.swappiness

# Reduce swap tendency (recommended for databases: 10)
sysctl -w vm.swappiness=10

# Increase dirty page write-back aggressiveness
sysctl -w vm.dirty_ratio=15
sysctl -w vm.dirty_background_ratio=5

# Drop page cache manually (use with caution on production)
sync; echo 3 > /proc/sys/vm/drop_caches

Обяснение на vm.swappiness: Стойност от 60 означава, че ядрото ще започне суапване, когато RAM е 40% използвана. За сървъри за бази данни (MySQL, PostgreSQL, Redis), задаването на 10 поддържа данните в RAM много по-дълго, драстично намалявайки I/O латентността. За настолни системи или системи с ограничена RAM, стойността по подразбиране е по-подходяща.

Чести клопки и погрешни интерпретации

Клопка 1: Паника заради ниска „свободна” памет

Както беше обяснено по-рано, Linux умишлено използва свободната RAM като кеш. Система с 200 MB свободна, но 8 GB налична памет е здрава. Винаги четете колоната Available.

Клопка 2: Сумиране на RSS за оценка на общото използване на паметта

Сумирането на RSS стойностите на ps за всички процеси обикновено ще надвиши общата физическа RAM поради двойното броене на споделените библиотеки. Използвайте smem -t за точна системна сума.

Клопка 3: Игнориране на Slab кеша

На натоварени NFS клиенти или сървъри с много малки файлове, Slab разпределителят на ядрото може да консумира гигабайти RAM. Проверете cat /proc/meminfo | grep Slab — тази памет е технически освобождаема, но не се появява в инструментите на ниво процес.

Клопка 4: Объркване на VSZ с действителното използване на паметта

Java приложение може да показва 4 GB VSZ, но само 512 MB RSS. VSZ включва картографирани файлове с памет, запазен, но неразпределен heap и споделени библиотеки — повечето от които никога не се зареждат в физическата RAM.

Клопка 5: Пренебрегване на паметта при контейнеризирани натоварвания

Вътре в Docker контейнер, free показва общата памет на хоста, а не лимита на cgroup на контейнера. Използвайте cat /sys/fs/cgroup/memory/memory.usage_in_bytes и cat /sys/fs/cgroup/memory/memory.limit_in_bytes за точни метрики на ниво контейнер.

Настройване на постоянен мониторинг на RAM

За производствени среди, командите в определен момент от времето са недостатъчни. Разгледайте тези подходи за непрекъсната видимост:

  • sysstat с cron: Активира автоматично събиране на исторически данни от sar.
  • Prometheus + Node Exporter: Събира метрики от /proc/meminfo и ги излага за табла на Grafana.
  • Netdata: Мониторинг в реално време с нулева конфигурация с гранулярност от секунда и вградено откриване на аномалии в паметта.
  • Zabbix или Nagios: Предупреждения от корпоративен клас с конфигурируеми прагове за памет и политики за ескалация.

При изпълнение на натоварвания на инфраструктура за GPU Хостинг, наблюдавайте и GPU VRAM заедно със системната RAM — nvidia-smi --query-gpu=memory.used,memory.free --format=csv предоставя еквивалентните метрики за GPU памет.

За уеб хостинг среди, управлявани чрез VPS контролни панели, повечето панели включват вградени графики за памет — но те обикновено правят запитвания на интервали от 1–5 минути и ще пропуснат краткотрайни пикове, които vmstat или sar биха уловили.

Техническа матрица за решения: Кой инструмент да използвате кога

СценарийПрепоръчан инструментКоманда
Бърза проверка на здравето на систематаfreefree -h
Намиране на най-големите консуматори на памет в моментаps или htop`ps aux –sort=-%memhead -15`
Точно отчитане за всеки процесsmemsmem -s pss -r
Диагностициране на активно суапванеvmstatvmstat 1 10
Разследване на минал инцидент с паметтаsarsar -r -f /var/log/sysstat/saDD
Задълбочено профилиране на конкретен процес/proc/PID/smapscat /proc/PID/smaps
Непрекъснат производствен мониторингPrometheus + Node Exporter
Лимити на паметта на контейнераcgroup filesystemcat /sys/fs/cgroup/memory/memory.usage_in_bytes

Контролен списък с ключови изводи

  • Винаги проверявайте наличната памет от free -h, а не колоната Free, за да оцените действителното пространство.
  • Използвайте vmstat 1 5, за да потвърдите или изключите активното суапване, преди да ескалирате разследването.
  • Използвайте smem -s pss -r вместо ps aux --sort=-%mem, когато ви трябват точни данни за паметта за всеки процес — особено на сървъри с много процеси, споделящи библиотеки.
  • Инсталирайте sysstat на всеки производствен сървър веднага след осигуряването, за да активирате историческо събиране на данни от sar.
  • Задайте vm.swappiness=10 постоянно в /etc/sysctl.conf на сървъри за бази данни, за да минимизирате използването на swap.
  • Проверете /proc/meminfo за стойности на Slab и Dirty, когато стандартните инструменти не обясняват наблюдаваното натоварване на паметта.
  • За контейнеризирани натоварвания, четете cgroup файловете за памет — а не free — за точни лимити и използване.
  • В среди за споделен хостинг или VPS, установете базови линии на паметта по време на нормална работа, за да могат аномалиите да бъдат незабавно разпознати.

Често задавани въпроси

Каква е разликата между „свободна” и „налична” памет в Linux?

„Свободна” е RAM без никакво текущо използване. „Налична” е реалистичната оценка на паметта, която може да бъде разпределена за нови процеси без задействане на суапване — тя включва освобождаем кеш на страници и буфери. На здрав Linux сървър, „свободната” памет е често близо до нула, докато „наличната” остава висока. Винаги използвайте „налична” за оценки на капацитета.

Защо сумата от всички RSS стойности на процесите надвишава общата физическа RAM?

RSS (Размер на резидентния набор) брои споделената памет — като споделени библиотеки — веднъж за всеки процес, който я картографира. Ако 50 процеса всеки картографира 100 MB споделена библиотека, общата сума на RSS се надува с 4 900 MB над действителната физическа цена. Използвайте smem с PSS отчитане, за да елиминирате това двойно броене.

Как да намеря кой процес е задействал Linux OOM убиеца?

Изпълнете dmesg | grep -i "oom|killed process" или journalctl -k | grep -i oom. Ядрото записва точното име на процеса, PID и статистики за паметта в момента на събитието за убиване, включително oom_score на всички оценени процеси.

Какво показва високото използване на swap и колко сериозно е то?

Устойчивото използване на swap означава, че работният набор на системата надвишава физическата RAM. Ядрото компенсира чрез страниране на данни на диска, което обикновено е 100–1 000 пъти по-бавно от достъпа до RAM. Дори скромна swap активност причинява измеримо забавяне на приложението. Това е окончателен сигнал или за намаляване на консумацията на памет, увеличаване на RAM, или преразпределение на натоварванията.

Мога ли да наблюдавам използването на RAM вътре в Docker контейнер, използвайки стандартни Linux команди?

Стандартни команди като free вътре в контейнер показват общата RAM на хоста, а не лимита на cgroup на контейнера. За точни метрики на ниво контейнер, четете /sys/fs/cgroup/memory/memory.usage_in_bytes за текущото използване и /sys/fs/cgroup/memory/memory.limit_in_bytes за конфигурирания лимит. Алтернативно, използвайте docker stats <container_name> от хоста за форматиран изглед.

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало