热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux监控统计一段时间内进程的CPU变化

想法将某个进程占用的CPU写入文件中(文件名为进程名_pid.tmp,创建在当前目录),以时间为序,再通过Excel绘图查看(如果是压测CPU的
想法

将某个进程占用的CPU写入文件中(文件名为 进程名_pid.tmp,创建在当前目录),以时间为序,再通过Excel绘图查看 (如果是压测CPU的话最好不要满载,要到临界值而又不满载,效果最好,满载的话,进程间容易争抢CPU而看不到最真实的情况)

把下面的shell作为脚本保存到linux机器当中,运行命令为 xxx.sh 进程名 时间秒

Shell部分

#!/bin/bash
# 括号前后要有空格,尤其是表达式,中间没有空格会被解析成一个字符串,表达式被看成字符串就是永真
if [ $# -lt 2 ]
then
echo xxx.sh 进程名 时间秒
exit
fi
# grep -v 后面接反向过滤的字符串,head拿到grep的第一行(如果很多进程重名),awk打印第二参数,也就是ps的进程号
pid=`ps -ef | grep $1 | grep -v grep | grep -v '/bin/bash' | head -n 1 | awk '{printf $2}'`
# 变量赋值左边不能有$
tmpfile=${1}_${pid}.tmp
# 判断临时文件是否被创建过,创建过就删除
if [ -e $tmpfile ]
then
rm -rf $tmpfile
fi
# 创建临时文件
touch ${1}_${pid}.tmp
# 打印一个简单的表头
echo 'timestamp cpu%' >> $tmpfile
# 持续时间存在remaining_time
remaining_time=$2
while((remaining_time--))
do
# 获取时间
time=`date +%T`
# top -b -n 1 -c 即打印一次的top
# awk 是可以累加每行的,最后打印,多个重名进程可以把它们的CPU加起来
cpu=`top -b -n 1 -c | grep -E $1 | grep -v grep | awk '{ sum_cpu+=$9; } END { printf ("%8.2f%", sum_cpu) }'`
# Ubuntu 系统可能会出现 % 转义失败的问题 (感谢网友哇哦发现的),需要使用 %% 代替
# 报错 awk: run time error: not enough arguments passed to printf("%8.2f%") FILENAME="-" FNR=2 NR=2
# cpu=`top -b -n 1 -c | grep -E $1 | grep -v grep | awk '{ sum_cpu+=$9; } END { printf ("%8.2f%%", sum_cpu) }'`
echo $time' '$cpu >> $tmpfile
sleep 1
done

遇到的问题:

运行脚本报错:syntax error: unexpected end of file

目前遇到两种可能:1、格式有误,比如if的结尾没有用fi。2、windows和linux的 \r \n问题,需要手动设置,如:vi下输入 :set ff=unix ,我用notepad++可以设置文本编辑格式为linux

shell参考资料

字符串拼接

Shell 字符串拼接_小白的进阶的博客-CSDN博客_shell字符串拼接

linux时间获取

Linux系统date命令的参数及获取时间戳的方法 - 唐世光 - 博客园

if判断语句

Shell if 条件判断_诗歌poetry的博客-CSDN博客

 自增运算

shell编程之自增自减运算符_永远不要矫情的博客-CSDN博客_shell 自减

Excel部分

我是notepad++和wps一起使用的

步骤

先打开创建的文件(前面shell会创建一个文件名为 进程名_pid.tmp的文件),按住alt键手动选择一整列,然后ctrl + c

接着创建一个Excel表格,单击其中的一个方格(注意不是双击)

然后ctrl + v 粘贴,如图

在wps里选择插入,折线图(要先框选我们要做图表的数据)

就能得到我们的折线图(当然Excel还可以求平均值等操作,这里就不细说了)


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 常用工具(一)
    1.时间戳在线转换工具(1)链接https:tool.lutimestamp(2)说明可以通过此工具:将时间戳转为具体时间点,也可以将具体时间点转为时间戳(3)效果2.JSON在线 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • 工作用可能会用到会话分组:Message是消息实体对象,里面有toId和fromId指明接收方ID和发送方Id,通过组合形式“12-22-”为map的key其中Mess ... [详细]
  • Apple iPad:过渡设备还是平板电脑?
    I’vebeenagonizingoverwhethertopostaniPadarticle.Applecertainlydon’tneedmorepublicityandthe ... [详细]
author-avatar
LD系瑰精棂_142
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有