Linux Tips · 1 min read · Oct 16, 2025

topから値を抽出してプロットする方法

topから値を抽出してプロットする方法

By: Showayb Zahda+

多くの研究者は、パフォーマンス評価やベンチマークを行う際に、CPUやRAMの値をキャプチャする必要があります。他の研究者はスループットをキャプチャする必要があるかもしれません。この短いチュートリアルでは、”top”からCPUとRAMの値をキャプチャし、それを1行のコマンドで抽出する方法を示します。

topの出力をキャプチャして保存するには、バッチモード”top -b”を使用します。topはデフォルトで10秒ごとに読み取りを更新します。しかし、一部の研究者は毎秒値が必要です。パラメータdを渡すだけで簡単にできます。コマンドは”top -b -d 1”になります。ここでの1は1秒です。このコマンドは毎秒topの出力をキャプチャします。しかし、まだ終わりではありません。出力をファイルに保存する必要があります。簡単です、出力をファイルにリダイレクトします:

top -b -d 1 > top.txt

実験が終わったら、”ctrl + c”を押してtopを停止するのを忘れないでください。これで、膨大な行数を持つファイルができ、必要なものはその一部だけです。幸いなことに、出力の形式は固定されており、値を抽出するのが非常に簡単です。

以下は、topの1秒間の一部です。出力を見ると、”Cpu(s).”で始まる行とその次の行は”Mem:”です。実際には、これらの行の一部が必要であり、すべてではありません。では、どうやってそれを行うのでしょうか。

top 18: 54:43 up 4:05, 2 users, load average: 3.64, 2.35, 1.37  
Tasks: 135 total, 6 running, 129 sleeping, 0 stopped, 0 zombie  
Cpu(s): 19.2%us, 19.7%sy, 0.0%ni, 61.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st  
Mem: 2054160k total, 2016144k used, 38016k free, 12292k buffers  
Swap: 4417864k total, 38360k used, 4379504k free, 1310488k cached  
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  
6929 shuaib 15 0 173m 12m 8940 R 65 0.6 7:22.44 gtkgnash  
6916 shuaib 15 0 525m 58m 22m S 6 2.9 0:56.39 totem  
5717 root 15 0 491m 87m 12m S 3 4.4 2:13.24 Xorg

Linuxに不慣れな場合、物事が奇妙に見えるかもしれませんが、とにかく、私が提供するコマンドを使用して仕事を終わらせてください。私が使用するコマンドは、cat、grep、cut、nlです。これらをパイプラインで使用するので、すべてが1行のコマンドになります。:)

cat top.txt | grep Cpu

このコマンドは次のような出力を示します:

Cpu(s): 14.3%us, 7.4%sy, 0.0%ni, 73.9%id, 0.0%wa, 0.0%hi, 4.4%si, 0.0%st  
Cpu(s): 15.3%us, 7.4%sy, 0.0%ni, 72.4%id, 0.0%wa, 0.0%hi, 4.9%si, 0.0%st  
Cpu(s): 11.7%us, 5.4%sy, 0.0%ni, 76.6%id, 2.9%wa, 0.5%hi, 2.9%si, 0.0%st  
Cpu(s): 19.6%us, 9.3%sy, 0.0%ni, 66.7%id, 0.0%wa, 0.0%hi, 4.4%si, 0.0%st  
Cpu(s): 14.8%us, 9.9%sy, 0.0%ni, 70.4%id, 0.0%wa, 0.5%hi, 4.4%si, 0.0%st  
Cpu(s): 16.2%us, 9.3%sy, 0.0%ni, 67.2%id, 0.0%wa, 0.0%hi, 7.4%si, 0.0%st  
Cpu(s): 12.3%us, 8.9%sy, 0.0%ni, 72.4%id, 0.0%wa, 0.0%hi, 6.4%si, 0.0%st  
Cpu(s): 19.2%us, 11.8%sy, 0.0%ni, 63.1%id, 1.0%wa, 0.0%hi, 4.9%si, 0.0%st  
Cpu(s): 16.2%us, 10.3%sy, 0.0%ni, 68.1%id, 0.0%wa, 0.5%hi, 4.9%si, 0.0%st  
Cpu(s): 17.7%us, 9.9%sy, 0.0%ni, 68.5%id, 0.0%wa, 0.0%hi, 3.9%si, 0.0%st  
Cpu(s): 15.7%us, 9.8%sy, 0.0%ni, 70.6%id, 0.0%wa, 0.0%hi, 3.9%si, 0.0%st  
Cpu(s): 13.7%us, 7.4%sy, 0.0%ni, 74.0%id, 0.0%wa, 0.0%hi, 4.9%si, 0.0%st

うわー、これは魔法です。まあ、気に入っていただければ。とにかく、各CPU行は1秒間のCPUの読み取りを表していますが、この行のアイドル値、例えば”68.1%id,”が必要だとしましょう。さて、カットのターンが来ました。cutコマンドは、ファイルまたは標準出力のデータを列番号に基づいてカットします。列番号は、行内の文字の数です。すべてが1カウントされます。つまり、%は1、スペースは1、5は1列です。では、どうやってカウントするかというと、任意のテキストエディタを使用して、エディタの下部で列番号を読み取るか、手動で行うことができます。

テキストエディタを使用して、列35から39がアイドル値を表す番号であることがわかりました。では、どうやってカットするか。コマンドを続けます:

cat top.txt | grep Cpu | cut -c 35-39

出力は以下の通りです:

73.9
72.4
76.6
66.7
70.4
67.2
72.4
63.1
68.1
68.5
70.6
74.0

うわー、また魔法です。いいですね。cut -c 35-39は、入力から列35から39をカットしてターミナルに出力することを意味します。したがって、%us部分をキャプチャしたい場合は、列をカウントして置き換えればよいです。私たちは毎秒値をキャプチャしました。では、秒を追加するにはどうすればよいでしょうか。簡単です、nlを使用します:行番号:

cat top.txt | grep Cpu | cut -c 35-39 | nl

1     73.9
2     72.4
3     76.6
4     66.7
5     70.4
6     67.2
7     72.4
8     63.1
9     68.1
10     68.5
11     70.6
12     74.0

さて、もし3秒ごとにtopをキャプチャする場合は、次のようにできます:

cat top.txt | grep Cpu | cut -c 35-39 | nl -i 3
1 73.9  
4 72.4  
7 76.6  
10 66.7  
13 70.4  
16 67.2  
19 72.4  
22 63.1  
25 68.1  
28 68.5  
31 70.6  
34 74.0

うわー、これも素晴らしいです。では、出力をファイルにリダイレクトします:

cat top.txt | grep Cpu | cut -c 35-39 | nl > cpu.txt

ファイルをgnuplotや他のプロットソフトウェアに持って行き、楽しんでください。

Mem部分については、同じ手順に従ってパラメータを変更することで、あなたの番だと思います。

Cheers
Showayb A A Zahda
[email protected]

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。