如何使用shell获取进程名的内存以及CPU利用率

 更新时间:2022年04月17日 16:12:51   作者:飞鸟真人  
最近工作中遇到一个需求,需要找出占用高的进程,所以下面这篇文章主要给大家介绍了关于如何使用shell获取进程名的内存以及CPU利用率的相关资料,需要的朋友可以参考下

原理:

1)使用ps得到进程名的所有进程pid

ps -C process_name  -o pid=

2) 使用 /proc/$pid/status获得内存的占用,并循环求和;

3)使用top获取相关pid的cpu列表,并过滤第10列,求和。

在ubuntu18.04和centos7.9测试:

# !/bin/bash
# author:robin
# usage: bash proc.sh openresty
if [ -e cpu_mr.log ]
then
    rm -f cpu_mr.log
fi
 
pid_array=(122)
 
name=$1
if [ -z "$name" ] 
then
    name="openresty"
fi
#echo $name
 
#cpucmd: '-p 125 -p 235 -p 568'
cpucmd=''
i=0
 
#get all pid by proName
funGetPids(){
    tempstr=`ps -C $name -o pid=`
    #echo $tempstr
 
    
    for line in $tempstr
    do
        pid_array[$i]=$line
        #echo ${pid_array[$i]}
        let "i++"
        cpucmd=${cpucmd}" -p $line "
    done 
    return
}
funGetPids
 
if [ $i -eq 0 ] 
then
echo "{\"sum_vmrss\": -1,  \"sum_cpu\": -1 }"
exit 0
fi
 
sum_vmrss=0
sum_cpu=0.0
#compute mem sum
for pid in  ${pid_array[@]}
do
    vmrss_temp=`cat /proc/$pid/status|grep -e VmRSS|tr -d [:blank:][:alpha:][:]`
    #echo 'vmrss_temp= '  $vmrss_temp
    sum_vmrss=`expr $sum_vmrss + $vmrss_temp`
done
 
#echo $cpucmd
tempstr=`top -n 1 $cpucmd |tail -n +8 | awk '{print $10}'`
 
for line in $tempstr
do
#echo $line
sum_cpu=$(echo "$sum_cpu+$line"|bc)
done
 
# echo "-------------------"
echo "{\"sum_vmrss\": $sum_vmrss,  \"sum_cpu\": $sum_cpu }"
 
exit

使用方法:

bash proc.sh  gnome-shell

输出json:

{"sum_vmrss": 423712,  "sum_cpu": 6.7 }

总结

到此这篇关于如何使用shell获取进程名的内存以及CPU利用率的文章就介绍到这了,更多相关shell获取进程名内存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux echo命令以及linux echo命令提示权限不够的解决办法

    linux echo命令以及linux echo命令提示权限不够的解决办法

    linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法。下面通过本文给大家介绍linux echo命令以及linux echo命令提示权限不够的解决办法,感兴趣的朋友一起看看吧
    2017-09-09
  • Linux系统中掩耳盗铃的sudo配置

    Linux系统中掩耳盗铃的sudo配置

    这篇文章主要介绍了Linux系统中掩耳盗铃的sudo配置的相关资料,需要的朋友可以参考下
    2015-09-09
  • linux mkdir命令详解

    linux mkdir命令详解

    Mkdir 是一个用来在 Linux 系统下创建目录的命令。此命令属于内建命令。接下来通过本文给大家分享linux mkdir命令详解,感兴趣的朋友一起看看吧
    2017-09-09
  • shell遍历目录处理特定目录的脚本代码

    shell遍历目录处理特定目录的脚本代码

    删除文件,目录结构为:ip/年份/月份,每个人都有一份这样的目录现需要删除2012年以前的所有文件,2012年以后的删除特定月份
    2013-02-02
  • Linux Shell脚本系列教程(四):使用函数添加环境变量

    Linux Shell脚本系列教程(四):使用函数添加环境变量

    这篇文章主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下
    2015-06-06
  • 一个ping检测告警函数代码

    一个ping检测告警函数代码

    一个ping脚本,服务器通用告警函数。在没有 nagios 的情况下,这个暂且可以用来作为服务器告警使用
    2013-02-02
  • shell 递归遍历目录下的所有文件并统一改名的方法

    shell 递归遍历目录下的所有文件并统一改名的方法

    今天小编就为大家分享一篇shell 递归遍历目录下的所有文件并统一改名的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Linux 下的 unzip 命令使用示例详解

    Linux 下的 unzip 命令使用示例详解

    Unzip 是一个在 Unix 或类 Unix 系统(例如 Linux)中常用的命令行工具,用于解压缩由 ZIP 压缩算法创建的压缩文件,本文给大家介绍Linux 下的 unzip 命令使用示例详解,感兴趣的朋友一起看看吧
    2023-11-11
  • Shell正则表达式学习笔记

    Shell正则表达式学习笔记

    正则表达式是一种表示方式,可以让你查找匹配特定的准则的文本,例如以字母a开头的文件,学好正则表达式将使以后的文本处理变得方便,快速,本文给大家介绍shell正则表达式学习笔记,对shell正则表达式相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • shell中if条件判断的实现

    shell中if条件判断的实现

    本文主要介绍了shell中if条件判断的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论