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和内存的使用情况。

posted @ 2024-01-29 16:19  张不留行  阅读(2225)  评论(0编辑  收藏  举报