← Назад к вопросам

Как посмотреть количество свободной оперативки в Linux?

1.0 Junior🔥 181 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как посмотреть количество свободной оперативки в Linux

Употребление памяти — ключевой показатель для мониторинга production сервера. Разберёмся с инструментами и интерпретацией результатов.

Команда 1: free (основная команда)

Самый прямой способ:

free -h

Вывод:

              total        used        free      shared  buff/cache   available
Mem:           31Gi       10Gi       2.5Gi      512Mi       18Gi       19Gi
Swap:          16Gi       2Gi        14Gi

Объяснение полей:

  • total — всего оперативной памяти
  • used — используется (включает кэш)
  • free — полностью свободная память
  • available — память, доступная для приложений (включает кэш, который может быть освобожден)
  • buff/cache — буферы и кэш ОС

Важный момент: available — это то, что нужно смотреть, не free!

# Вариант с лучшей читаемостью
free -lh  # Показывает в гигабайтах
free -m   # Показывает в мегабайтах
free -b   # Показывает в байтах

# Автоматическое обновление (каждую секунду)
watch -n 1 free -h

Команда 2: top (реальное время)

Визуальное отображение использования памяти:

top

Показывает:

KiB Mem:  32634004 total, 10485760 used,  2621440 free, 18874304 buff/cache
KiB Swap: 16777216 total,  2097152 used, 14680064 free

PID  USER  PR  NI  VIRT  RES  SHR  S  %CPU  %MEM  TIME+  COMMAND
1234 user  20   0  1.2g  512m 128m S  5.5  1.5  12:34  python
5678 user  20   0  2.5g  1.2g 256m S  2.1  3.8  05:21  java

Горячие клавиши в top:

  • q — выход
  • M — сортировать по памяти
  • P — сортировать по CPU
  • 1 — показать каждый CPU отдельно

Команда 3: htop (улучшенная версия top)

Рекомендуется установить:

sudo apt-get install htop  # Ubuntu/Debian
sudo yum install htop       # CentOS/RHEL

htop

Красивая визуализация с цветной шкалой памяти.

Команда 4: vmstat (статистика памяти)

Для анализа тренда:

vmstat 1 5  # 5 снимков с интервалом 1 секунда

Вывод:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0   2097   2621   2048  18874    0    0     5    10   200  300 45 10 40  5
 1  0   2097   2500   2048  18874    0    0     8    12   210  320 50 10 35  5

Ключевые колонки:

  • swpd — используется swap
  • free — свободная память
  • buff — буферы
  • cache — кэш
  • si, so — swap in/out (если не 0 — проблема!)

Команда 5: /proc/meminfo (файл системы)

Детальная информация:

cat /proc/meminfo

Вывод:

MemTotal:       32634004 kB
MemFree:         2621440 kB
MemAvailable:   19922944 kB
Buffers:         2048000 kB
Cached:          16826944 kB
SwapTotal:      16777216 kB
SwapFree:       14680064 kB
Dirty:             10240 kB
Writeback:           512 kB
AnonPages:       8388608 kB
Mapped:          1048576 kB

Команда 6: ps (память конкретного процесса)

# Память конкретного процесса
ps aux | grep python
# USER  PID  %CPU  %MEM  VSZ   RSS  COMMAND
# user  1234  5.5  1.5   1.2g  512m python

# VSZ — виртуальная память (сумма с swap)
# RSS — физическая память (в RAM)

# Отсортировать по памяти
ps aux --sort=-%mem | head -10

# Память процесса в человеческом формате
ps -o pid,comm,%mem,rss -p 1234

Командо 7: pmap (карта памяти процесса)

Для анализа, что именно использует память:

pmap -x 1234  # 1234 — PID процесса

Вывод:

1234:   python
  Address   Kbytes     RSS    Dirty Mode  Mapping
  00400000     128     128       0 r-x-- /usr/bin/python3.9
  00620000      12      12       12 rw--- /usr/bin/python3.9
  ...
  -------  -------  ------  ------
  total    524288  262144   10240

Скрипт на Python для мониторинга

import psutil
import time

def monitor_memory():
    while True:
        # Общая информация о памяти
        mem = psutil.virtual_memory()
        
        print(f"Total: {mem.total / (1024**3):.2f} GB")
        print(f"Used: {mem.used / (1024**3):.2f} GB")
        print(f"Available: {mem.available / (1024**3):.2f} GB")
        print(f"Percent: {mem.percent}%")
        print(f"Buffers: {mem.buffers / (1024**3):.2f} GB")
        print(f"Cached: {mem.cached / (1024**3):.2f} GB")
        print()
        
        # Информация о swap
        swap = psutil.swap_memory()
        print(f"Swap Used: {swap.used / (1024**3):.2f} GB")
        print(f"Swap Free: {swap.free / (1024**3):.2f} GB")
        print(f"Swap Percent: {swap.percent}%")
        print()
        
        time.sleep(5)

if __name__ == '__main__':
    monitor_memory()

Установка:

pip install psutil

Скрипт для мониторинга конкретного процесса

import psutil
import os

def get_process_memory(pid):
    try:
        process = psutil.Process(pid)
        mem_info = process.memory_info()
        
        return {
            'pid': pid,
            'name': process.name(),
            'rss': mem_info.rss / (1024**2),  # MB
            'vms': mem_info.vms / (1024**2),  # MB
            'percent': process.memory_percent()
        }
    except psutil.NoSuchProcess:
        return None

# Использование
pid = os.getpid()
mem = get_process_memory(pid)
print(f"Process {mem['name']} (PID {mem['pid']}):")
print(f"  RSS: {mem['rss']:.2f} MB")
print(f"  VMS: {mem['vms']:.2f} MB")
print(f"  Memory %: {mem['percent']:.2f}%")

Интерпретация результатов

МЕМОРИЯ ИСПОЛЬЗУЕТСЯ НОРМАЛЬНО:
├─ available > 10-20% от total
├─ swap используется мало (<5%)
└─ процессы работают без падений

МЕМОРИЯ ЗАКАНЧИВАЕТСЯ:
├─ available < 5% от total
├─ swap быстро растёт
├─ процессы начинают OOM Kill'аться
└─ НУЖНО:
   ├─ Увеличить RAM
   ├─ Оптимизировать приложение
   └─ Кэширование/Compression

Best Practices для production

# 1. Рутинный мониторинг
watch -n 5 'free -h && echo "---" && top -b -n 1 | head -5'

# 2. Алерт, если память выше 80%
if [ $(free | awk 'NR==2{print int($3/$2*100)}') -gt 80 ]; then
    echo "ALERT: Memory > 80%" | mail admin@example.com
fi

# 3. Автоматическое освобождение кэша (опасно, использовать осторожно)
# sudo bash -c 'echo 3 > /proc/sys/vm/drop_caches'  # Очищает все кэши

# 4. Проверка утечек памяти
memory_before=$(free | awk 'NR==2{print $3}')
sleep 3600  # 1 час
memory_after=$(free | awk 'NR==2{print $3}')
if [ $((memory_after - memory_before)) -gt 1000000 ]; then
    echo "Possible memory leak detected"
fi

Типичная структура памяти

Тоtal Memory (32 GB)
├─ Used (10 GB)
│  ├─ Приложения (Python, Java, etc) — 5 GB
│  ├─ ОС — 2 GB
│  └─ Прочее — 3 GB
├─ Free (2.5 GB)
└─ Buff/Cache (18 GB)
   ├─ Page Cache (файлы) — 15 GB
   ├─ Buffer Cache (диск) — 2 GB
   └─ Slab Cache (ядро) — 1 GB

Эта кэшированная память может быть освобождена для приложений когда нужно.

Как посмотреть количество свободной оперативки в Linux? | PrepBro