php fork太多进程导致整体性能下降

4次阅读
  • 1. 同事跑了一个 php 的抓取, 这个会导致非常高的 sleep 值, 大概到好几千的水平. 进而 mysql 会 down 掉.
    写了个 crontab
    #crontab -e
     

    [php]
    * */1 * * * /sh/detect_php.sh 
    * */1 * * * /sh/detect_php.sh
     
     
     
    detech_php 的内容
     
    [php]
    #!/bin/bash 
     
    host_dir=`cd /sh` 
    proc_name="mysql" 
    bug_time=`date -R` 
    pid=0 
     
    proc_num() 

        num=`ps -ef | grep $proc_name | grep -v grep | wc -l` 
        return $num 

     
    proc_id() 

        pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'` 

     
    proc_num 
    number=$? 
    if [$number -eq 0] 
    then 
        ./restart_php_mysql.sh 
        proc_id 
        echo " Kill the php and new mysql pid is : ${pid} :  ${bug_time} " >> php_mysql.log 2>&1 
    else 
        proc_id 
        echo " The mysql is working , ${bug_time} " >> php_mysql.log 2>&1 
        echo "it's ok!" 
    fi 
    #!/bin/bash
    host_dir=`cd /sh`
    proc_name="mysql"
    bug_time=`date -R`
    pid=0
    proc_num()
    {
     num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
     return $num
    }
    proc_id()
    {
     pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
    }
    proc_num
    number=$?
    if [$number -eq 0]
    then
     ./restart_php_mysql.sh
     proc_id
     echo " Kill the php and new mysql pid is : ${pid} :  ${bug_time} " >> php_mysql.log 2>&1
    else
     proc_id
     echo " The mysql is working , ${bug_time} " >> php_mysql.log 2>&1
     echo "it's ok!"
    fi
    脚本解释, 这个脚本非常简单的. 就是判断 mysql 进程是否为 0, 如果为 0, 那么就去杀掉 php, 然后重启 mysql. 并且写入一个日志.

    restart_php_mysql.sh 的内容
    [php]
    #!/bin/sh 
    killall -9 php 
    service mysql restart 
    #!/bin/sh
    killall -9 php
    service mysql restart
    pkill 会导致脚本在杀完进程后直接 terminated. 所以这里不使用 pkill. 
     

正文完