shell编程之系统进程监控

本文内容是根据网络上一篇博文使用shell脚本对linux系统和进程资源进行监控对其验证学习的总结。
主要是通过常用的 shell 命令来对系统的运行状态进行监控,另一方面也是对学习的 shell 命令的实战。

涉及的命令

系统相关

  • ps 查看当前系统中进程信息
    • -u 指定所属用户
  • vimstat 展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况

文本处理

  • grep 查找文件中匹配符号字符串的行
    • -v 反向选择,用于剔除包含’某些字符串’的行
  • sed 一个非交互性文本编辑器,它编辑文件或标准输入导出的文件,一次只能处理一行内容
    • -n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令(同时阻止sed的自动输出)
  • awk 每接收文件的一行,然后执行相应的命令,来处理文本
  • bc 数字计算

监控场景

获取进程id

  • 代码演示

    #! /bin/bash
    # 通过进程的使用者和名称来获取进程的 PID
    
    # 提示脚本用法
    if [ "$#" -ne 2 ]
    then
        echo "Usage: $0 pUser pName"
        exit 1
    fi
    
    pUser=$1
    pName=$2
    pId=`ps -u $pUser | grep $pName | grep -v 'grep' | grep -v 'vi' | grep -v 'dbx\n' | grep -v 'tail' | grep -v 'start' | grep -v 'stop' | sed -n 1p | awk '{print $1}'`
    
    # 检测进程是否存在
    if [ "-$pId" == "-" ]
    then
        echo "The process does not exist."
    else
        echo $pId
    fi
    
  • 个人理解
    在获取 PId 的命令中,ps 命令获取指定用户启动的程序,再用 grep 命令查找相关进程,剔除掉包含 grep, vi, dbx, tail, start, stop的命令行**(避免上述命令干扰进程的获取)**,sed 命令选取第一行,awk 命令提取出 PId。

监控进程使用的CPU&内存

  • 监控CPU

    # 通过 PId 来获取该进程 CPU 的使用情况
    function GetCpu
    {
        cpuValue=`ps -p $1 -o pcpu | grep -v CPU | awk '{print $1}' | awk -F. '{print $1}'`
        echo $cpuValue
    }
    

    注意:
    最后的 awk 是取整的目的.

  • 监控内存

    # 通过 PId 来获取进程内存使用情况
    function GetMem
    {
        memUsage=`ps -p $1 -o vsz | grep -v VSZ`
        ((memUsage /= 1000))
        echo $memUsage
    }
    
  • 句柄数
    句柄使用过高可能由于负载过高,句柄泄露等情况,通过脚本对业务进程句柄使用量进行时时监控,可以在异常时及时发送告警(例如通过短信),便于维护人员及时处理

    # 通过 PId 来获取该进程句柄使用量
    function GetHandle
    {
        handle=`ls /proc/$1/fd | wc -l`
        echo $handle
    }
    
  • 监控系统 CPU 负载

    # 获取系统 CPU 负载
    function GetSysCpu
    {
        cpuIdle=`vmstat 1 5 | sed -n '3,$p' | awk '{x = x + $15} END {print x/5}' | awk -F. '{print $1}'`
        cpuNum=`echo "100-$cpuIdle" | bc`
        echo $cpuNum
    }
    

    注解:
    使用 vmstat 取 5 次系统 CPU 的 idle 值,取平均值,然后通过与 100 取差得到当前 CPU 的实际占用值。

完整演示

  • 代码文件checkPerform.sh
  • 效果演示
    查询由用户 hjy 打开的 Google 浏览器 chromium 的使用情况
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rXz7xGIL-1614097209825)(/imgs/perform.png)]
  • 结果分析
    目前 Google 浏览器 cpu 使用占 3%,而整个系统的 cpu 使用是 5%,内存使用是 2210M,超了不少,运行的进程有 40 个,也超了不少,而占用的句柄数是 426,也是比较多的。

参考文献

  1. 使用shell脚本对linux系统和进程资源进行监控

如果该文章对您产生了帮助,或者您对技术文章感兴趣,可以关注微信公众号: 技术茶话会, 能够第一时间收到相关的技术文章,谢谢!

技术茶话会

本篇文章由一文多发平台ArtiPub自动发布

你可能感兴趣的:(shell编程之系统进程监控)