• shell编程实战之内存检查超过设定值杀死php-fpm进程


    首先,我们要获取服务器的内存使用率。通过free可以获取总内存大小以及使用内存多少

    [root@jackie ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        1882000      728120      407880        4440      746000      980784
    Swap:       1049596           0     1049596

    我们需要的是Mem那行的,total以及used项。我们通过grep以及awk命令,可以获得当前系统的内存使用率。

    free |grep -i mem | awk '{n=$3/$2; printf("%.0f", n * 100)}'

    获得了内存使用率后,然后拿它和预设值作比较。当大于预设值时,就把系统中所以php-fpm进程杀死。那么接下来的工作就是如何找出系统中所有php-fpm进程,以及如何去杀死这些进程。
    想要获取系统所有的php-fpm进程,可以使用ps命令,然后结合grep过滤即可。

     1 [root@jackie ~]# ps aux | grep php-fpm | grep -v grep | grep -v master
     2 www       1811  0.0  0.4 220504  8416 ?        S    Jul25   0:00 php-fpm: pool www
     3 www       1812  0.0  0.4 220504  8440 ?        S    Jul25   0:00 php-fpm: pool www
     4 www       1813  0.0  0.4 220376  8432 ?        S    Jul25   0:00 php-fpm: pool www
     5 www       1814  0.0  0.4 220508  8392 ?        S    Jul25   0:00 php-fpm: pool www
     6 www       1815  0.0  0.4 220508  8412 ?        S    Jul25   0:00 php-fpm: pool www
     7 www       2761  0.0  0.4 220376  8396 ?        S    Aug12   0:00 php-fpm: pool www
     8 www       7448  0.0  0.4 220376  8412 ?        S    Jul31   0:00 php-fpm: pool www
     9 www      16877  0.0  0.8 247856 16172 ?        S    13:06   0:00 php-fpm: pool www
    10 www      16878  0.0  0.8 247856 16176 ?        S    13:06   0:00 php-fpm: pool www
    11 www      16880  0.0  0.8 247856 16488 ?        S    13:06   0:00 php-fpm: pool www
    12 www      16881  0.0  0.8 247856 16488 ?        S    13:06   0:00 php-fpm: pool www
    13 www      16882  0.0  0.8 247856 16488 ?        S    13:06   0:00 php-fpm: pool www
    14 www      16884  0.0  0.8 247856 16176 ?        S    13:06   0:00 php-fpm: pool www
    15 www      16885  0.0  0.7 247856 14572 ?        S    13:06   0:00 php-fpm: pool www
    16 www      16886  0.0  0.7 247856 15052 ?        S    13:06   0:00 php-fpm: pool www
    17 www      16887  0.0  0.7 247856 15052 ?        S    13:06   0:00 php-fpm: pool www
    18 www      16888  0.0  0.8 247856 15240 ?        S    13:06   0:00 php-fpm: pool www
    ......

    通过上面的命令获取到了所有php-fpm进程,然后我们遍历这些信息,通过kill 进程号,来杀死php-fpm进程。
    下面给出完整的shell脚本程序:

    #!/bin/bash
    # 内存检查,超过70%,杀死所有php-fpm进程
    MEM_LIM=70
    
    used=$(free | grep -i mem | awk '{n=$3/$2;printf("%.0f", n*100)}')
    
    if ((used > MEM_LIM));then
        pids=`ps aux | grep php-fpm | grep -v grep | grep -v master | awk '{print $2}'`
        for pid in $pids
        do
           kill -9 $pid
        done
    fi

    上述的脚本是非常简单了,清晰命令。

    下面总结下该脚本程序使用了哪些知识点:

    • free命令获取内存使用率

    • ps命令获取所有php-fpm进程

    • kill命令杀死进程

    • shell编程条件分支以及循环结构

    链接:https://mp.weixin.qq.com/s/Tl6cZuVMBebPDA2U0zEj7A

  • 相关阅读:
    SSP状态寄存器SSPSTAT
    【PIC学习第18例】PIC16F877A 内部EEPROM读写实验
    批量去除flv专辑的片头
    .Net并行库介绍——Task(1)
    一个下载游戏封面的站点
    一个猜数字的小游戏
    RamDisk加速Windows 7?
    .Net并行库介绍——Task(2)
    数独的自动出题算法
    Live Messenger 2009登陆错误的解决方法
  • 原文地址:https://www.cnblogs.com/clubs/p/13787192.html
Copyright © 2020-2023  润新知