zoukankan      html  css  js  c++  java
  • 使用Shell脚本对Linux系统和进程资源进行监控

    检查进程是否存在

    在对进程进行监控时,我们一般需要得到该进程的 ID,进程 ID 是进程的唯一标识,但是有时可能在服务器上不同用户下运行着多个相同进程名的进程,下面的函数 GetPID 给出了获取指定用户下指定进程名的进程 ID 功能(目前只考虑这个用户下启动一个此进程名的进程),它有两个参数为用户名和进程名,它首先使用 ps 查找进程信息,同时通过 grep 过滤出需要的进程,最后通过 sed 和 awk 查找需要进程的 ID 值(此函数可根据实际情况修改,比如需要过滤其它信息等)

    命令介绍

    1.ps:查看系统中瞬间进程信息

    参数:

    -u< 用户识别码 > 列出属于该用户的程序的状况,也可使用用户名称来指定。

    -p< 进程识别码 > 指定进程识别码,并列出该进程的状况。

    -o 指定输出格式

    2. grep: 用于查找文件中符合字符串的当前行。

    参数:-v 反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行。

    3. sed: 一个非交互性文本编辑器,它编辑文件或标准输入导出的文件,一次只能处理一行内容。

    参数:-n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

    p 标志 打印匹配行

     4. awk:一种编程语言,用于在 linux/unix 下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是 linux/unix 下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk 的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出 ( 屏幕 ),如果没有指定模式,则所有被操作所指定的行都被处理。

     参数:-F fs or –field-separator fs :指定输入文件折分隔符,fs 是一个字符串或者是一个正则表达式,如 -F:。

    示例:

    cpu使用率 :ps -p ${PID}  -o pcpu | grep -v CPU | awk '{print $1}'

    内存使用:ps -o vsz -p ${PID} | grep -v VSZ  

    业务进程句柄使用量:ls /proc/${PID}/fd  | wc -l

    参数:-l 统计行数。

    -c 统计字节数。

    -w 统计字数。

    netstat -an | grep ":8080" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l 

    netstat -an|grep ":8080 "|awk'$1 == "udp" && $NF == "0.0.0.0:*" {print $0}'| wc-l

    netstat: 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

    参数:-a 显示所有连线中的 Socket。

    -n 直接使用 IP 地址,而不通过域名服务器。

    egrep: 在文件内查找指定的字符串。egrep 执行效果如 grep -E,使用的语法及参数可参照 grep 指令,

    与 grep 不同点在于解读字符串的方法,egrep 是用扩展的正则表达式语法来解读,而 grep 则用基本的正则表达式语法,

    扩展的正则表达式比基本的正则表达式有更完整的表达规范。

    cpu监控

    在对服务器进行维护时,有时也遇到由于系统 CPU(利用率)负载 过量导致业务中断的情况。服务器上可能运行多个进程,查看单个进程的 CPU 都是正常的,但是整个系统的 CPU 负载可能是异常的。通过脚本对系统 CPU 负载进行时时监控,可以在异常时及时发送告警,便于维护人员及时处理,预防事故发生。下面的函数可以检测系统 CPU 使用情况 . 使用 vmstat 取 5 次系统 CPU 的 idle 值,取平均值,然后通过与 100 取差得到当前 CPU 的实际占用值。

    function GetSysVPU()
    {
        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
    }
    
    cpu=$(GetSysVPU)
    echo "The system CPU is $cpu"
    
    if [ $cpu -gt 90 ]
    then
        echo "The usage of system cpu is larger than 90%"
    else
        echo "The usage of system cpu is normal"
    fi

    检测系统磁盘空间

    系统磁盘空间检测是系统资源检测的重要部分,在系统维护维护中,我们经常需要查看服务器磁盘空间使用情况。因为有些业务要时时写话单,日志,或者临时文件等,如果磁盘空间用尽,也可能会导致业务中断,下面的函数可以检测当前系统磁盘空间中某个目录的磁盘空间使用情况 . 输入参数为需要检测的目录名,使用 df 输出系统磁盘空间使用信息,然后通过 grep 和 awk 过滤得到某个目录的磁盘空间使用百分比。

    function GetDiskSpc()
    {
        if [ $# -ne 1 ]
        then
            return 1
        fi
    
        Folder="$1"
    
        DiskSpace=`df -h | grep $Folder | awk '{print $4}' | awk -F% '{print $1}'`
        echo $DiskSpace
    }
    
    Folder="/liyanan04"
    DiskSpace=`GetDiskSpc $Folder`
    
    echo "The system $Folder disk space is $DiskSpace%"
    
    if [ $DiskSpace -gt 90 ]
    then
        echo "The usage of system disk is larger than 90%"
    else
        echo "The usage of system disk is normal"
    fi

    总结

    在 Linux 平台下,shell 脚本监控是一个非常简单,方便,有效的对服务器,进程进行监控的方法,对系统开发以及进程维护人员非常有帮助。

    它不仅可以对上面的信息进行监控,发送告警,同时也可以监控进程的日志等等的信息,希望本文对大家有帮助。

  • 相关阅读:
    makeObjectsPerformSelector 方法的用法
    UISearchBar控件
    iOS应用崩溃日志分析
    IOS崩溃日志分析
    iOS 中捕获程序崩溃日志
    iOS疯狂详解之imageIO完成渐进加载图片
    iOS中nil,NULL,Nil,NSNull的区别
    IOS 8 UITableView cell lines不能靠左解决方法
    Android小玩意儿-- 从头开发一个正经的MusicPlayer(三)
    Android小玩意儿-- 从头开发一个正经的MusicPlayer(二)
  • 原文地址:https://www.cnblogs.com/LyningCoder/p/4228621.html
Copyright © 2011-2022 走看看