Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要一种有选择地杀死休眠php进程的方法吗_Php_Linux - Fatal编程技术网

需要一种有选择地杀死休眠php进程的方法吗

需要一种有选择地杀死休眠php进程的方法吗,php,linux,Php,Linux,我有一个网站,定期获得大量休眠的php进程。我的托管服务设置了20个并发运行进程的限制。如果超过了限制,我的网站就会出现503错误 这是一种罕见的现象,似乎与访问我的网站的人数没有任何关系 作为一种保护措施,我希望有一个带有php脚本的cron作业,它可以杀死已经休眠超过10分钟的php进程 我有一个php函数,可以杀死所有睡眠超过10分钟的MySql进程 public function kill_sleeping_mysql_processes() { $result = $

我有一个网站,定期获得大量休眠的php进程。我的托管服务设置了20个并发运行进程的限制。如果超过了限制,我的网站就会出现503错误

这是一种罕见的现象,似乎与访问我的网站的人数没有任何关系

作为一种保护措施,我希望有一个带有php脚本的cron作业,它可以杀死已经休眠超过10分钟的php进程

我有一个php函数,可以杀死所有睡眠超过10分钟的MySql进程

  public function kill_sleeping_mysql_processes()
  {
     $result = $this->db->query("SHOW FULL PROCESSLIST");
    foreach($result->result_array() as $row)
    {
        if ($row['Command'] == "Sleep" && $row['Time'] > 600)
        {
            $this->db->query("KILL {$row['Id']}")
        }
    }
  }
问题是我如何对php进程做同样的事情

我可以用这段代码读取php进程

exec("ps aux | less", $output);
如果我有pid,我可以用这段代码杀死特定的php进程

$pid = 11054;
exec("kill -9 $pid");

但是,如何有选择地杀死休眠超过10分钟的php进程呢?

我拼凑了一些东西。它并不优雅,而且有点像黑客,但它似乎可以工作,尽管在投入cron工作之前,我将进一步测试它

    public function kill_dormant_php_processes()
    {
        $output_array = array();

        exec("ps aux | grep -v grep", $ps_output);

        array_shift($ps_output);

        if (count($ps_output) > 0)
        {
            $i = 0;
            foreach ($ps_output as $ps) 
            {
                $ps = preg_split('/ +/', $ps);
                $output_array[$i]->pid = $ps[1];
                $output_array[$i]->stat = $ps[7];
                $output_array[$i]->time = $ps[9];
                $i++;
            }
        }

        if( ! empty($output_array))
        {
            foreach ($output_array as $row) 
            {
                if( $row->stat == 'S' && date('H:i', strtotime($row->time)) > date('H:i', strtotime('00:01')))
                {
                    exec("kill -9 $row->pid");
                }
            }
        }
    }
我相信一定有更好的办法

有人能解释一下为什么朗读中的00:01似乎转化为6分钟吗

freedom   6933  6.0  0.1  57040 13040 ?        S    16:55   0:01 /usr/local/bin/php53.cgi -c .:/home/freedom/:/etc index.php

我拼凑了一些东西。它并不优雅,而且有点像黑客,但它似乎可以工作,尽管在投入cron工作之前,我将进一步测试它

    public function kill_dormant_php_processes()
    {
        $output_array = array();

        exec("ps aux | grep -v grep", $ps_output);

        array_shift($ps_output);

        if (count($ps_output) > 0)
        {
            $i = 0;
            foreach ($ps_output as $ps) 
            {
                $ps = preg_split('/ +/', $ps);
                $output_array[$i]->pid = $ps[1];
                $output_array[$i]->stat = $ps[7];
                $output_array[$i]->time = $ps[9];
                $i++;
            }
        }

        if( ! empty($output_array))
        {
            foreach ($output_array as $row) 
            {
                if( $row->stat == 'S' && date('H:i', strtotime($row->time)) > date('H:i', strtotime('00:01')))
                {
                    exec("kill -9 $row->pid");
                }
            }
        }
    }
我相信一定有更好的办法

有人能解释一下为什么朗读中的00:01似乎转化为6分钟吗

freedom   6933  6.0  0.1  57040 13040 ?        S    16:55   0:01 /usr/local/bin/php53.cgi -c .:/home/freedom/:/etc index.php

作为此处共享的PHP脚本的替代方案,您可以使用带有“早于”时间过滤器的
killall
命令(使用
-o
选项)来终止所有这些进程

例如,此命令将杀死所有运行超过30分钟的
php cgi
进程:

killall -o 30m /usr/bin/php-cgi

作为此处共享的PHP脚本的替代方案,您可以使用带有“早于”时间过滤器的
killall
命令(使用
-o
选项)来终止所有这些进程

例如,此命令将杀死所有运行超过30分钟的
php cgi
进程:

killall -o 30m /usr/bin/php-cgi

只是好奇你是否检查了日志并试图解决根问题?是的,我试图解决根问题但没有任何效果…我还多次联系了主机的支持人员寻求帮助。几周或几个月都没有问题,然后突然我收到了大量停止运行的脚本,导致我的网站瘫痪。真糟糕。考虑把它写为BASH脚本并用Con调用它。请看:祝你好运。你的PHP配置选项是什么?你能在达到20个限制之前限制工作人员的数量吗?只是好奇你是否检查了日志并试图解决根本问题?是的,我试图解决根本问题,但没有任何效果…我还多次联系我的主机支持寻求帮助。几周或几个月都没有问题,然后突然间我遇到了大量问题让我的网站瘫痪的脚本。真糟糕。考虑把它写为BASH脚本并用Con调用它。请看:祝你好运。你的PHP配置选项是什么?你能在达到20人限制之前限制工人数量吗?