Linux команды · 4 min read · Oct 16, 2025

Как извлечь значения из top и построить их

Как извлечь значения из top и построить их

By: Showayb Zahda+

Многие исследователи, занимающиеся оценкой производительности и бенчмаркингом, нуждаются в захвате значений CPU и RAM. Другим может понадобиться захватить пропускную способность. В этом коротком руководстве я покажу, как я захватываю значения CPU и RAM из “top” и затем извлекаю их одной командой.

Чтобы захватить и сохранить вывод top, используйте пакетный режим “top -b”. Top по умолчанию обновляет свои данные каждые 10 секунд. Однако некоторым исследователям нужны значения каждую секунду. Это просто, просто передайте параметр d, команда станет “top -b -d 1”. 1 здесь означает одну секунду. Эта команда будет захватывать вывод top каждую секунду. Но это еще не все. Вам нужно сохранить его. Это просто, просто перенаправьте вывод в файл:

top -b -d 1 > top.txt

После завершения эксперимента не забудьте остановить top, нажав “ctrl + c”. Теперь у вас есть файл, который содержит огромное количество строк, и вам нужно из него только часть строки. К счастью, формат вывода фиксирован, и это делает извлечение значений очень простым.

Следующее - это часть одного из секунд вывода top. Смотрев на вывод, вы можете увидеть, что есть строка, начинающаяся с 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. Я использую их с пайплайнингом, так что все будет одной командой. :)

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 представляет собой показание CPU за одну секунду. Но давайте скажем, что мне нужно значение простоя этой строки, которое, например, “68.1%id,”. Теперь приходит очередь на обрезку. Команда cut обрезает данные в файле или стандартном выводе на основе номера столбца. Номер столбца - это номер символа в строке. Все считается, т.е. % - это один, пробел - один, 5 - один столбец. Так как же считать, вы можете использовать любой текстовый редактор и прочитать внизу редактора номер столбца или сделать это вручную.

Используя текстовый редактор, я обнаружил, что столбцы с 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

Ну, если вы захватываете top каждые 3 секунды, вы можете сделать это:

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

Get new posts in your inbox

No spam. Unsubscribe anytime.