Linux 메모리 보고

LinuxBeginner
지금 연습하기

소개

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

이 랩에서는 명령줄 도구를 사용하여 Linux 시스템의 메모리 사용량을 모니터링하고 분석하는 방법을 배우게 됩니다. 시스템 메모리 할당 및 사용에 대한 필수 정보를 제공하는 free 명령어를 살펴볼 것입니다. 이러한 도구를 숙달함으로써 시스템 메모리 리소스를 효과적으로 모니터링하고 시스템 최적화에 대한 정보에 입각한 결정을 내리는 데 필요한 기술을 습득하게 됩니다.

이 랩을 마치면 시스템 메모리 상태를 확인하고, 메모리 통계를 해석하며, 기본적인 메모리 사용 보고서를 생성할 수 있게 됩니다. 이는 모든 Linux 사용자 또는 시스템 관리자에게 기본적인 기술입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 88%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

기본 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 시스템에서 메모리 관리를 위한 견고한 기반을 제공하며, 더 고급 모니터링 도구 및 자동화 기술을 통해 확장할 수 있습니다.