如何使用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系统mysql自动备份并使用ftp上传的方法

    linux系统mysql自动备份并使用ftp上传的方法

    这篇文章主要介绍了linux系统自动导出mysql备份,并上传到指定ftp,还可以删除旧的备份文件,大家参考使用吧
    2014-01-01
  • 对用户输入的判断的shell实现代码

    对用户输入的判断的shell实现代码

    今天的案例是将 对用户输入的判断的shell脚本,需要的朋友可以参考下
    2016-08-08
  • Linux ps命令详解及Linux查看进程的操作方法

    Linux ps命令详解及Linux查看进程的操作方法

    这篇文章主要介绍了Linux ps命令详解,Linux查看进程的操作方法,ps命令常用的方式有三种,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Linux下Oracle归档日志自动清理脚本代码(sh)

    Linux下Oracle归档日志自动清理脚本代码(sh)

    将以下代码保存为.sh文件,并放到crontab里就可以实现自动清理
    2013-01-01
  • journalctl 命令使用小结

    journalctl 命令使用小结

    journalctl命令是Linux系统中一个用于查询和管理系统日志的命令行工具,它基于systemd的日志守护进程systemd-journald的功能,这篇文章主要介绍了journalctl 命令使用总结,需要的朋友可以参考下
    2024-06-06
  • Putty实现自动登陆远程Linux主机的方法

    Putty实现自动登陆远程Linux主机的方法

    这篇文章主要介绍了Putty实现自动登陆远程Linux主机的方法,本文讲解的是使用公钥和密钥方式实现自动登录,需要的朋友可以参考下
    2015-04-04
  • Linux shell脚本的建立与执行

    Linux shell脚本的建立与执行

    今天小编就为大家分享一篇关于Linux shell脚本的建立与执行,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • shell中无法使用cd命令的原因及解决方法

    shell中无法使用cd命令的原因及解决方法

    本文主要介绍了shell中无法使用cd命令的原因及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Shell脚本四则运算符号实用的技巧和注意事项

    Shell脚本四则运算符号实用的技巧和注意事项

    这篇文章主要介绍了Shell脚本四则运算符号实用的技巧和注意事项,文中通过示例代码介绍了基本的算术运算符号(加、减、乘、除)、浮点数运算(使用bc命令),以及自增、自减和复合赋值运算符的使用技巧,需要的朋友可以参考下
    2025-04-04
  • 自动生成linux网卡配置脚本分享

    自动生成linux网卡配置脚本分享

    这篇文章主要介绍了自动生成linux网卡配置的脚本,因为Linux虚拟机在复制时候网卡信息会更新,所以导致需要重新配置网卡。本脚本功能,第一次添加网卡后,启动虚拟机,然后运行脚本(可以写在启动脚步中),然后根据ifconfig -a 的信息来创建ifcfg-ethX的配置文件或者修改对应的ifcfg-ethX的mac
    2014-03-03

最新评论