Введение
Управление памятью является важной частью администрирования системы Linux, которая напрямую влияет на производительность и стабильность системы. Понимание того, как память распределяется, используется и отслеживается в системах Linux, позволяет администраторам оптимизировать производительность, решать проблемы и обеспечивать достаточное количество ресурсов для приложений.
В этом практическом занятии (LabEx) вы научитесь отслеживать и анализировать использование памяти в системах Linux с помощью инструментов командной строки. Вы познакомитесь с командой free, которая предоставляет важную информацию о распределении и использовании системной памяти. Освоив эти инструменты, вы получите навыки, необходимые для эффективного мониторинга системных ресурсов памяти и принятия обоснованных решений по оптимизации системы.
К концу этого практического занятия вы сможете проверять статус системной памяти, интерпретировать статистику использования памяти и создавать базовые отчеты о использовании памяти, что является фундаментальными навыками для любого пользователя Linux или системного администратора.
Использование базовой команды free
Команда free представляет собой фундаментальную утилиту Linux, которая отображает количество свободной и использованной памяти в вашей системе. Эта информация помогает вам понять текущее состояние памяти в системе и определить, достаточно ли у вас ресурсов для запуска приложений.
Запуск базовой команды free
Откройте терминал в рабочем пространстве по умолчанию по адресу /home/labex/project и выполните базовую команду free:
free
Вы должны увидеть вывод, похожий на следующий:
total used free shared buff/cache available
Mem: 8000000 3000000 1000000 25000 4000000 4700000
Swap: 0 0 0
Вывод показывает значения памяти в байтах, что может быть сложно прочитать. Для более удобного формата используйте опцию -h (человекочитаемый формат):
free -h
Теперь вывод будет выглядеть примерно так:
total used free shared buff/cache available
Mem: 7.6Gi 2.9Gi 954Mi 24Mi 3.8Gi 4.5Gi
Swap: 0B 0B 0B
Этот формат отображает размеры памяти с соответствующими единицами измерения (KB, MB, GB), что делает его гораздо легче интерпретировать.
Создание каталога для вашей работы
Создадим каталог для хранения файлов, которые вы будете создавать в рамках этого практического занятия (LabEx):
mkdir -p ~/project/memory_data
Сохранение статистики памяти в файл
Теперь сохраним вывод команды free -h в файл для дальнейшего использования:
free -h > ~/project/memory_data/memory_stats.txt
Для проверки того, что файл был создан и содержит ожидаемую информацию, используйте команду cat:
cat ~/project/memory_data/memory_stats.txt
Вы должны увидеть тот же вывод, который был ранее отображен в вашем терминале.
Понимание столбцов вывода информации о памяти
Теперь, когда у вас есть базовая статистика по памяти, давайте разберемся, что означает каждый столбец в выводе команды free. Эти знания помогут вам более эффективно интерпретировать состояние системной памяти.
Объяснение столбцов вывода информации о памяти
Откройте файл со статистикой памяти, который вы создали на предыдущем шаге:
cat ~/project/memory_data/memory_stats.txt
Вывод содержит несколько столбцов:
total: Общее количество памяти (RAM), установленной в системе.
used: Количество памяти, которое в данный момент используется системой.
free: Количество памяти, которая в данный момент не используется ни для чего.
shared: Память, разделяемая несколькими процессами, часто используется tmpfs (временные файловые системы) и сегментами разделяемой памяти.
buff/cache: Память, используемая буферами ядра и кэшем страниц:
- buffers: Память, используемая ядром для временного хранения данных перед записью на диск.
- caches: Память, используемая для хранения данных, прочитанных с диска, для более быстрого доступа.
available: Оценка того, сколько памяти доступно для запуска новых приложений без использования свопа.
Создание отчета о памяти
Теперь давайте создадим подробный отчет о памяти, в котором объясним, что означает каждый столбец и запишем текущие значения. Создайте новый файл с именем memory_report.txt:
nano ~/project/memory_data/memory_report.txt
В редакторе nano добавьте следующее содержимое (замените заполнители на фактические значения из вашей системы):
Memory Report - Created on $(date)
total: [Your value here]
The total amount of physical RAM installed on the system.
used: [Your value here]
The amount of memory currently being used by applications and the operating system.
free: [Your value here]
The amount of memory that is completely unused and available.
shared: [Your value here]
Memory used by tmpfs and shared memory segments that can be accessed by multiple processes.
buff/cache: [Your value here]
Memory used for kernel buffers and disk cache to improve system performance.
available: [Your value here]
An estimate of how much memory is available for starting new applications without swapping.
Для получения текущих значений вы можете обратиться к ранее сохраненному файлу memory_stats.txt.
После добавления содержимого сохраните файл, нажав Ctrl+O, а затем Enter, а затем выйдите из nano, нажав Ctrl+X.
Просмотр памяти в разных единицах измерения
Команда free позволяет отображать память в разных единицах измерения. Давайте создадим файл, показывающий память в различных единицах:
free -b | head -2 > ~/project/memory_data/memory_units.txt
echo "Memory in bytes (above)" >> ~/project/memory_data/memory_units.txt
echo "" >> ~/project/memory_data/memory_units.txt
free -k | head -2 >> ~/project/memory_data/memory_units.txt
echo "Memory in kilobytes (above)" >> ~/project/memory_data/memory_units.txt
echo "" >> ~/project/memory_data/memory_units.txt
free -m | head -2 >> ~/project/memory_data/memory_units.txt
echo "Memory in megabytes (above)" >> ~/project/memory_data/memory_units.txt
echo "" >> ~/project/memory_data/memory_units.txt
free -g | head -2 >> ~/project/memory_data/memory_units.txt
echo "Memory in gigabytes (above)" >> ~/project/memory_data/memory_units.txt
Просмотрите файл, чтобы увидеть представление памяти в разных единицах:
cat ~/project/memory_data/memory_units.txt
Это поможет вам понять, как отображать информацию о памяти в наиболее подходящих для ваших нужд единицах измерения.
Мониторинг памяти в реальном времени
Системные администраторы часто должны отслеживать использование памяти в течение определенного времени, чтобы выявить тенденции или устранить неполадки. На этом шаге вы узнаете, как отслеживать использование памяти в реальном времени и создавать простой скрипт для записи использования памяти с регулярными интервалами.
Использование команды watch с free
Команда watch позволяет периодически запускать другую команду и отображать ее вывод. Это очень полезно для мониторинга использования памяти в реальном времени:
watch -n 2 free -h
Эта команда запускает free -h каждые 2 секунды и показывает обновленный вывод. Вы должны увидеть, как статистика по памяти обновляется в реальном времени.
Для выхода из команды watch нажмите Ctrl+C.
Использование опции интервала с командой free
Самая команда free может отображать использование памяти с регулярными интервалами. Синтаксис выглядит так:
free -s [seconds] -c [count]
Где:
-sзадает интервал в секундах между обновлениями-cзадает количество обновлений для отображения
Давайте отслеживаем использование памяти каждые 3 секунды в общей сложности 4 раза:
free -h -s 3 -c 4
Это отобразит статистику по памяти 4 раза с паузой в 3 секунды между каждым обновлением.
Создание скрипта для мониторинга памяти
Давайте создадим скрипт, который будет записывать информацию о использовании памяти с регулярными интервалами. Сначала создайте новый файл скрипта:
nano ~/project/memory_data/memory_monitor.sh
Добавьте следующее содержимое в файл:
#!/bin/bash
## Создание файла журнала с текущей датой и временем
log_file=~/project/memory_data/memory_log_$(date +%Y%m%d_%H%M%S).txt
## Запись заголовка в файл журнала
echo "Memory Usage Log - Started at $(date)" > $log_file
echo "Monitoring every 5 seconds for 5 readings" >> $log_file
echo "----------------------------------------" >> $log_file
## Цикл 5 раз, с записью информации о памяти каждые 5 секунд
for i in {1..5}; do
echo "Reading $i - $(date)" >> $log_file
free -h >> $log_file
echo "----------------------------------------" >> $log_file
sleep 5
done
echo "Monitoring completed at $(date)" >> $log_file
echo "Log saved to $log_file"
Сохраните файл, нажав Ctrl+O, затем Enter, и выйдите, нажав Ctrl+X.
Теперь сделайте скрипт исполняемым:
chmod +x ~/project/memory_data/memory_monitor.sh
Запустите скрипт:
~/project/memory_data/memory_monitor.sh
Скрипт будет работать около 25 секунд (5 секунд × 5 записей) и создаст файл журнала с информацией о использовании памяти. После завершения работы скрипта вы увидите сообщение, указывающее, где сохранен файл журнала.
Для просмотра файла журнала:
cat ~/project/memory_data/memory_log_*
Этот файл журнала показывает, как использование памяти изменяется со временем, что полезно для устранения неполадок, связанных с памятью, или для понимания моделей использования памяти.
Изучение расширенной информации о памяти
В Linux доступна более детальная информация о памяти, чем то, что показывает базовая команда free. На этом шаге вы изучите дополнительные источники информации о памяти и создадите общий сводку по памяти.
Исследование файла /proc/meminfo
Файл /proc/meminfo содержит подробную информацию о памяти вашей системы. Давайте рассмотрим его:
head -20 /proc/meminfo
В этом файле содержится десятки значений, связанных с памятью, в том числе:
MemTotal: Общее доступное ОЗУMemFree: Свободная памятьMemAvailable: Доступная памятьBuffers: Память, используемая буферами ядраCached: Память, используемая для кэширования файловSwapTotal: Общий размер свопаSwapFree: Свободное место в свопе
Давайте извлечем из этого файла важную информацию:
grep -E "MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree" /proc/meminfo > ~/project/memory_data/meminfo_excerpt.txt
Посмотрим на извлеченную информацию:
cat ~/project/memory_data/meminfo_excerpt.txt
Создание обобщенного сводки по памяти
Теперь давайте создадим скрипт, который сгенерирует общий отчет о состоянии памяти. Создайте новый файл скрипта:
nano ~/project/memory_data/create_summary.sh
Добавьте следующее содержимое:
#!/bin/bash
## Установка имени выходного файла с временной меткой
output_file=~/project/memory_data/memory_summary_$(date +%Y%m%d_%H%M%S).txt
## Создание заголовка
echo "LINUX MEMORY SUMMARY REPORT" > $output_file
echo "===========================" >> $output_file
echo "Date: $(date)" >> $output_file
echo "" >> $output_file
## Базовая статистика по памяти
echo "BASIC MEMORY STATISTICS:" >> $output_file
free -h >> $output_file
echo "" >> $output_file
## Подробная информация о памяти
echo "DETAILED MEMORY INFORMATION:" >> $output_file
echo "Total RAM: $(grep MemTotal /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Free RAM: $(grep MemFree /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Available RAM: $(grep MemAvailable /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Buffer memory: $(grep Buffers /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Cache memory: $(grep "^Cached:" /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "" >> $output_file
## Информация о свопе
echo "SWAP INFORMATION:" >> $output_file
echo "Total Swap: $(grep SwapTotal /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Free Swap: $(grep SwapFree /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "" >> $output_file
## Расчет процента использования памяти
total_mem=$(grep MemTotal /proc/meminfo | awk '{print $2}')
used_mem=$(grep MemTotal /proc/meminfo | awk '{print $2}')
used_mem=$((used_mem - $(grep MemFree /proc/meminfo | awk '{print $2}')))
used_mem=$((used_mem - $(grep Buffers /proc/meminfo | awk '{print $2}')))
used_mem=$((used_mem - $(grep "^Cached:" /proc/meminfo | awk '{print $2}')))
mem_percentage=$((used_mem * 100 / total_mem))
echo "MEMORY USAGE SUMMARY:" >> $output_file
echo "Memory usage percentage: ${mem_percentage}%" >> $output_file
echo "" >> $output_file
echo "Memory summary report generated at $output_file"
Сохраните файл, нажав Ctrl+O, затем Enter, и выйдите, нажав Ctrl+X.
Сделайте скрипт исполняемым:
chmod +x ~/project/memory_data/create_summary.sh
Запустите скрипт для генерации сводного отчета:
~/project/memory_data/create_summary.sh
После завершения работы скрипта посмотрите на сгенерированный сводный отчет:
cat ~/project/memory_data/memory_summary_*
Этот общий отчет дает вам детальное представление о состоянии памяти вашей системы, объединяя данные из нескольких источников.
Создание простой команды для отображения статуса памяти
Наконец, давайте создадим простую однострочную команду, которая показывает текущий статус памяти в компактном формате:
echo "Memory status: $(free -h | grep Mem | awk '{print "Total:"$2, "Used:"$3, "Free:"$4, "Available:"$7}')" > ~/project/memory_data/memory_status.txt
Посмотрите на статус памяти:
cat ~/project/memory_data/memory_status.txt
Эта команда извлекает самую важную информацию из вывода команды free и представляет ее в компактном формате.
Резюме
В этом практическом занятии вы изучили основные методы мониторинга и анализа использования памяти в системах Linux. Вы перешли от базового отображения информации о памяти к более сложному анализу, приобретая ценные навыки для системного администрирования и устранения неполадок.
Основные концепции и навыки, которые вы освоили:
Базовое отображение информации о памяти: Вы использовали команду
freeдля просмотра базовой статистики по памяти и научились интерпретировать столбцы вывода.Понимание показателей памяти: Вы изучили, что означает каждый показатель памяти (общий объем, используемый, свободный, общий доступ, буфер/кэш, доступный) и как отображать память в разных единицах измерения.
Мониторинг в реальном времени: Вы научились отслеживать использование памяти в реальном времени с помощью команды
watchи создали скрипт для записи использования памяти с регулярными интервалами.Расширенный анализ памяти: Вы исследовали подробную информацию о памяти из файла
/proc/meminfoи создали общие сводки по памяти.
Эти навыки являются важными для эффективного системного администрирования, так как управление памятью напрямую влияет на производительность системы. С помощью мониторинга использования памяти вы можете:
- Определить проблемы с производительностью, связанные с памятью
- Узнать, нужны ли системе дополнительные ресурсы
- Понять, как приложения используют память
- Обнаружить утечки памяти или чрезмерное использование памяти
- Принимать обоснованные решения по оптимизации системы
Техники, которые вы освоили в этом практическом занятии, создают прочную основу для управления памятью в системах Linux и могут быть расширены с использованием более продвинутых инструментов мониторинга и автоматизации.



