← Назад к вопросам
Как посмотреть количество свободной оперативки в 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— сортировать по CPU1— показать каждый 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— используется swapfree— свободная память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
Эта кэшированная память может быть освобождена для приложений когда нужно.