[关闭]
@pandait 2016-03-21T05:14:38.000000Z 字数 931 阅读 1924

一次不合理的程序解决方案,使用corntab关闭数据库连接

codeigniter


一个已经上线好久的手机后台的api,运营那边说会影响到系统的其它功能,因为一些特殊原因(你懂的),不能直接查看线上的问题,只是运维那边说数据库连接太多导致其它的程序会卡死。

于是让运维那边帮忙查看mysql中用户的一些连接强制进行关闭,但是反馈说居然是关闭不了的,再加上一些原因就不了了之,后面基本半夜接各种电话反馈出现 too many connection,在经过一周的反复折腾出于无赖(也有可能是一种借口)使用了下面的方式进行解决。

以下主要使用了show processlist来查询所有mysql中的查询和休眠process进行一些逻辑上的判断进行kill processlistID查进行强制关闭。

/*
 * kill db api process
 * */
function killapiMainDBProcess()
{
    //get apim process list
    $query = $this->db_read->query('SHOW PROCESSLIST');
    $processlist = $query->result_array();
    //随机记录日志
    $this->randomLogging($processlist);
    if (count($processlist) >= 25) {
            foreach ($processlist as $item) {
                $this->db_api->query('KILL ' . $item['Id']);
            }
        } else {
            foreach ($processlist as $item) {
                if ($item['Command'] == 'Sleep' && $item['Time'] > self::MAX_SLEEP_TIME) {
                    $this->db_read->query('KILL ' . $item['Id']);
            }
        }
    }
    echo 'kill api main process sleep 执行完成';
}

以上代码段是在codeigniter下面进行处理的,在服务器上布置的是一个corntab来进行处理2分钟跑执行一次,大概就是这样一种处理方式,实在想不到其它的招了。

就应了标题所说的----“一次不合理的程序解决方案”,全是泪。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注