zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/clubs/p/13787192.html
Copyright © 2011-2022 走看看