소개
메모리 관리는 시스템 성능과 안정성에 직접적인 영향을 미치는 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
출력에는 여러 열이 포함되어 있습니다.
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를 눌러 파일을 저장하고, 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: 총 사용 가능한 RAMMemFree: 사용 가능한 메모리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 시스템에서 메모리 사용량을 모니터링하고 분석하는 데 필요한 기술을 탐구했습니다. 기본적인 메모리 보고에서 고급 분석으로 발전하여 시스템 관리 및 문제 해결에 유용한 기술을 습득했습니다.
배운 주요 개념 및 기술:
기본 메모리 보고:
free명령어를 사용하여 기본 메모리 통계를 보고 출력 열을 해석하는 방법을 배웠습니다.메모리 지표 이해: 각 메모리 지표 (총, 사용, 사용 가능, 공유, 버퍼/캐시, 사용 가능) 의 의미와 다양한 단위로 메모리를 표시하는 방법을 탐구했습니다.
실시간 모니터링:
watch명령어를 사용하여 실시간으로 메모리 사용량을 모니터링하는 방법을 배우고 정기적인 간격으로 메모리 사용량을 기록하는 스크립트를 만들었습니다.고급 메모리 분석:
/proc/meminfo파일에서 자세한 메모리 정보를 탐구하고 포괄적인 메모리 요약 보고서를 만들었습니다.
이러한 기술은 효과적인 시스템 관리에 필수적이며, 메모리 관리는 시스템 성능에 직접적인 영향을 미칩니다. 메모리 사용량을 모니터링하면 다음을 수행할 수 있습니다.
- 메모리 관련 성능 문제 식별
- 시스템에 더 많은 리소스가 필요한지 결정
- 애플리케이션이 메모리를 사용하는 방식 이해
- 메모리 누수 또는 과도한 메모리 사용 감지
- 시스템 최적화에 대한 정보에 입각한 결정
이 Lab 에서 배운 기술은 Linux 시스템에서 메모리 관리를 위한 견고한 기반을 제공하며, 더 고급 모니터링 도구 및 자동화 기술을 통해 확장할 수 있습니다.



