linux系统用top命令查看并记录CPU利用率
linux系统用top命令查看并记录CPU利用率
问题现象:
服务器的CPU和内存使用率突然变高,甚至长时间持续90%以上运行,这时我们需要使用top命令监控并记录,每分钟 排行前二十的进程 资源占用情况,持续记录几个小时,然后使用Notepad++和excel整理分析,整理出监测时间段内各进程资源使用排行(柱状图或折线图)。
top命令:
# top -c -b -n 480 -d 60 | grep ^top -A 26 > /tmp/top.log
含义:使用top命令完整显示系统的整体性能信息以及正在运行的进程的相关信息,并用 | grep 截取前26行,记录到/tmp/top.log文本里。
解析:
-c:显示完整的命令行而不截断。
-b:以批处理(batch)模式运行,直接将结果输出到文件。
-n <次数>:指定 top 命令运行的次数后自动退出。(测试请设置小一点)
-d <秒数>:指定 top 命令的刷新时间间隔,单位为秒。
| grep ^top -A 26 :对每次的top结果进行筛选,只保留前26行(即前20个进程排行)
> /tmp/top.log :将结果输出到top.log文件
# top -c -b -n 480 -d 60 | grep ^top -A 26 | while IFS= read -r line; do echo "$(date) $line"; done > /tmp/top.log
含义:使用top命令完整显示系统的整体性能信息以及正在运行的进程的相关信息,并用 | grep 截取前26行,记录到/tmp/top.log文本里。
“ | while IFS= read -r line; do echo "$(date) $line"; done ”在打印的日志每一行前追加时间戳。
日志信息追加时间戳
当Linux输出日志的时候没有时间戳,可以追加时间戳到日志上。
就像下面这样:
[root@localhost ~]# echo "hello, world" | gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }'
你可以追加一个静态的时间戳到文件里,使用 sed 和 date 命令:
... | sed "s/^/$(date) /" >> output.txt
如果你需要一个真实的动态的时间戳,使用 gawk 命令(strftime function):
... | gawk '{ print strftime(), $0 }'
我们可以定义自己喜欢的时间格式:
... | gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }'
如果刷新日志的频率不够快,那是因为有缓存,可以调用下刷新函数:
... | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush() }'
如果系统没有安装gawk,也有其他的方式可以实现:
可以安装ts
... | ts '%F %T'
可以使用perl:
... | perl -pe 's/^/localtime . " "/e'
或者使用perl格式化:
... | perl -MPOSIX -pe 's/^/strftime("%Y-%m-%d %H:%M:%S", localtime) . " "/e'
数据采集:
数据过滤:
Notepad++
NOTEPAD++提取含关键字的全部行
1.ctrl+F>标记,勾选“标记所在行”,输入关键字表达式,点击全部标记
即可标记全部待关键字的行。
2.搜索>书签>复制书签行即可复制出全部含关键字的行。
原文链接:https://blog.csdn.net/eylanpp/article/details/123554322
数据整理:
将含关键字的行,全部复制到excel,采用“数据分列”将它们分开。
将需要的数据列复制出来,然后采用“数据透视”分析某进程一段时间内的CPU和内存的使用情况。