LInux中通过TOP持续获取CPU和内存写入到表格

背景:在测试性能的时候需要查看CPU和内存的占用情况,就需要持续获取CPU、内存数据最终以图表形式展示,那怎么做呢?

先看结果:

再看代码

# 配置进程名
process='mysql'
# 配置次数
number=5
# 配置间隔时间
time=3
echo "%CPU,%MEM">test.csv
pid=$(ps -aux | grep ${process} | awk -F' ' '{OFS=","}{print $2}' | head -n 1)
top -b -d ${time} -n ${number} -p ${pid} | grep 'mysqld' | awk -F' ' '{OFS=","}{print $9,$10}'>>test.csv
cat test.csv
sz test.csv

知识准备

echo  # 控制台输出

top  # 动态查看进程信息
# -b:以批处理(batch)模式运行,直接将结果输出到文件
# -d <秒数>:指定 top 命令的刷新时间间隔,单位为秒
# -n <次数>:指定 top 命令运行的次数后自动退出
# -p <进程ID>:仅显示指定进程ID的信息。
# 实例:top -b -d 5 -n 20 -p 938

grep  # 查看文件中的内容,这里主要是查看控制台输出的指定进程的内容

awk  # 分割
# -F' ':分割内容
# {OFS=","}:替换分割内容
# {print $5,$6} :显示内容 $<数字(第几行)>
# 实例:awk -F' ' '{OFS=","}{print $5,$6}'

| # 管道符,将前面输出的内容当作后面命令的输入

> # 重定向(将输出内容写入文本文件),覆盖

>> # 重定向,追加

sz # 下载文件到本地

ps # 查看进程信息
# -a : 显示终端上的所有进程,包括其他用户的进程
# -u : 显示进程的详细状态
# -x :显示没有控制终端的进程

head # 从开头查看文本内容
# -n <行数>:查看几行

# 变量赋值
process=$(命令)
process='mysql'

# 变量引用
${process}

1、首先定义两个字段CPU&内存写入TCP+内存.csv

echo "%CPU,%MEM">TCP+内存.csv

2、通过top和awk获取CPU和内存数据

2.1、通过top获取到的信息太多了,我们只需要CPU和内存

top

2.2、通过ps获取到进程pid,因为接下来要指定进程

ps -aux | grep 'mysql'

2.3、再通过 top -p 938 指定进程,可以看到只有一条数据了,但是还有很多其他的内容,我们需要的只是CPU和内存数据

top -p 938 

2.4、再通过 top -p 938 | grep "mysqld",可以看到又过滤了一部份,但是离我们想要的数据还是有差距

top -p 938 | grep "mysqld"

2.5、先将上面内容写入到文件中,方便接下来看awk分割效果

top -b -d 5 -n 20 -p 938 | grep 'mysqld' > 1.txt

2.6、再通过 awk -F' ' '{OFS=","}{print $5,$6}'  首先按照空格去分割(-F' '),其次再选择需要的部分({print $5,$6}),由于我们最终得到的数据是csv格式的,所以我在这里将空格替换成 ,({OFS=","}),可以看到我们已经得到想要的数据了

awk -F' ' '{OFS=","}{print $10,$11}'

2.7、这里直接将控制输入的结果直接当成文件进行分割,最后写入文件,然后就结束了

top -b -d 5 -n 20 -p 938 | grep 'mysqld' | awk -F' ' '{OFS=","}{print $5,$6}'>>test.csv

2.8、查看文件内容,看看是否写入成功

cat 1.txt

2.9、下载文件

2.9.1、安装lrzsz包

yum install lrzsz

 2.9.2、sz下载文件

sz test.csv

3、为了便捷,最后我们就可以来写一个shell脚本,其实就是将上面的命令都写入一个test.sh的文件

创建文件

touch test.sh

 文件中的内容

# 配置进程名
process='mysql'
# 配置次数
number=5
# 配置间隔时间
time=3
echo "%CPU,%MEM">test.csv
pid=$(ps -aux | grep ${process} | awk -F' ' '{OFS=","}{print $2}' | head -n 1)
top -b -d ${time} -n ${number} -p ${pid} | grep 'mysqld' | awk -F' ' '{OFS=","}{print $9,$10}'>>test.csv
cat test.csv
sz test.csv

给文件赋执行权

chmod o+x test.sh

执行脚本

./test.sh

 4、Excel制作图表CPU图表(内存同理)

4.1、修改图表名称

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值