はじめに
メモリ管理は、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 オプション(人間が読みやすい形式)を使用します。
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
このコマンドは、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
## 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_*
この包括的なレポートは、複数の情報源からのデータを組み合わせることで、システムのメモリ状態を詳細に示します。
シンプルなメモリステータスコマンドの作成
最後に、現在のメモリステータスを簡潔な形式で表示するシンプルな 1 行のコマンドを作成しましょう。
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 システムのメモリ管理のための堅固な基礎を提供し、より高度な監視ツールや自動化技術を用いて拡張することができます。



