Linux 메모리 보고

LinuxBeginner
지금 연습하기

소개

메모리 관리는 시스템 성능과 안정성에 직접적인 영향을 미치는 Linux 시스템 관리의 중요한 측면입니다. Linux 시스템에서 메모리가 어떻게 할당, 사용 및 보고되는지 이해하면 관리자는 성능을 최적화하고, 문제를 해결하며, 애플리케이션에 충분한 리소스를 보장할 수 있습니다.

이 랩에서는 명령줄 도구를 사용하여 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 옵션 (human-readable, 사람이 읽을 수 있는 형식) 을 사용합니다.

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) 로 메모리 크기를 표시하여 해석하기가 훨씬 쉽습니다.

작업 디렉토리 생성

이 랩에서 생성할 파일을 저장할 디렉토리를 만들어 보겠습니다.

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

출력에는 여러 열이 포함되어 있습니다.

  1. total: 시스템에 설치된 총 메모리 (RAM) 의 양입니다.

  2. used: 현재 시스템에서 사용 중인 메모리의 양입니다.

  3. free: 현재 아무것도 사용하지 않는 메모리의 양입니다.

  4. shared: 여러 프로세스에서 공유하는 메모리로, 종종 tmpfs (임시 파일 시스템) 및 공유 메모리 세그먼트에서 사용됩니다.

  5. buff/cache: 커널 버퍼 및 페이지 캐시에 사용되는 메모리:

    • buffers: 디스크에 쓰기 전에 데이터를 임시로 저장하기 위해 커널에서 사용하는 메모리
    • caches: 더 빠른 액세스를 위해 디스크에서 읽은 데이터를 저장하는 데 사용되는 메모리
  6. 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를 눌러 파일을 저장하고, Ctrl+X를 눌러 nano 를 종료합니다.

다른 단위로 메모리 보기

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

이 명령어는 2 초마다 free -h를 실행하고 업데이트된 출력을 표시합니다. 실시간으로 메모리 통계가 업데이트되는 것을 볼 수 있습니다.

watch 명령어를 종료하려면 Ctrl+C를 누릅니다.

Interval 옵션과 함께 free 사용

free 명령어 자체는 정기적인 간격으로 메모리 사용량을 표시할 수 있습니다. 구문은 다음과 같습니다.

free -s [seconds] -c [count]

여기서:

  • -s는 업데이트 간격을 초 단위로 지정합니다.
  • -c는 표시할 업데이트 횟수를 지정합니다.

총 4 번의 업데이트에 대해 3 초마다 메모리 사용량을 모니터링해 보겠습니다.

free -h -s 3 -c 4

이렇게 하면 메모리 통계가 4 번 표시되고 각 업데이트 사이에 3 초의 일시 중지가 있습니다.

메모리 모니터링 스크립트 생성

정기적인 간격으로 메모리 사용량 정보를 기록하는 스크립트를 만들어 보겠습니다. 먼저, 새 스크립트 파일을 만듭니다.

nano ~/project/memory_data/memory_monitor.sh

파일에 다음 내용을 추가합니다.

#!/bin/bash

## Create a log file with the current date and time
log_file=~/project/memory_data/memory_log_$(date +%Y%m%d_%H%M%S).txt

## Write header to the log file
echo "Memory Usage Log - Started at $(date)" > $log_file
echo "Monitoring every 5 seconds for 5 readings" >> $log_file
echo "----------------------------------------" >> $log_file

## Loop 5 times, capturing memory info every 5 seconds
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: 총 사용 가능한 RAM
  • 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

## Set output file with timestamp
output_file=~/project/memory_data/memory_summary_$(date +%Y%m%d_%H%M%S).txt

## Create header
echo "LINUX MEMORY SUMMARY REPORT" > $output_file
echo "===========================" >> $output_file
echo "Date: $(date)" >> $output_file
echo "" >> $output_file

## Basic memory statistics
echo "BASIC MEMORY STATISTICS:" >> $output_file
free -h >> $output_file
echo "" >> $output_file

## Detailed memory information
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

## Swap information
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

## Memory usage percentage calculation
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 명령어 출력에서 가장 중요한 정보를 추출하여 간결한 형식으로 표시합니다.

요약

이 Lab 에서는 Linux 시스템에서 메모리 사용량을 모니터링하고 분석하는 데 필요한 기술을 탐구했습니다. 기본적인 메모리 보고에서 고급 분석으로 발전하여 시스템 관리 및 문제 해결에 유용한 기술을 습득했습니다.

배운 주요 개념 및 기술:

  1. 기본 메모리 보고: free 명령어를 사용하여 기본 메모리 통계를 보고 출력 열을 해석하는 방법을 배웠습니다.

  2. 메모리 지표 이해: 각 메모리 지표 (총, 사용, 사용 가능, 공유, 버퍼/캐시, 사용 가능) 의 의미와 다양한 단위로 메모리를 표시하는 방법을 탐구했습니다.

  3. 실시간 모니터링: watch 명령어를 사용하여 실시간으로 메모리 사용량을 모니터링하는 방법을 배우고 정기적인 간격으로 메모리 사용량을 기록하는 스크립트를 만들었습니다.

  4. 고급 메모리 분석: /proc/meminfo 파일에서 자세한 메모리 정보를 탐구하고 포괄적인 메모리 요약 보고서를 만들었습니다.

이러한 기술은 효과적인 시스템 관리에 필수적이며, 메모리 관리는 시스템 성능에 직접적인 영향을 미칩니다. 메모리 사용량을 모니터링하면 다음을 수행할 수 있습니다.

  • 메모리 관련 성능 문제 식별
  • 시스템에 더 많은 리소스가 필요한지 결정
  • 애플리케이션이 메모리를 사용하는 방식 이해
  • 메모리 누수 또는 과도한 메모리 사용 감지
  • 시스템 최적화에 대한 정보에 입각한 결정

이 Lab 에서 배운 기술은 Linux 시스템에서 메모리 관리를 위한 견고한 기반을 제공하며, 더 고급 모니터링 도구 및 자동화 기술을 통해 확장할 수 있습니다.