ThinkPHP5.0.*版本 cli模式下php每隔段時間就出錯

軒雪初晨發表於2019-02-16

關於ThinkPHP5.0.*版本 cli模式下php每隔段時間就出錯
cli模式下php每隔段時間就出錯
官方論壇
日誌如下:

控制檯

Uncaught thinkexceptionErrorException: Error while sending STMT_CLOSE packet. PID=23951 in /www/web/work/public_html/thinkphp/library/think/db/Connection.php:318

log檔案

thinkdbConnection::free(): send of 9 bytes failed with errno=32 Broken pipe

分析原因

長時間資料庫會斷線 但是新版本會改進斷線重連機制

解決方案

1.臨時解決

修改/thinkphp/library/think/db/Connection.php

1.1是否需要斷線重連

`break_reconnect` => true,

1.2 釋放查詢結果 捕獲異常

public function free()
{

try {
    $this->PDOStatement = null;
} catch (Exception $e) {
    Log::write("has error when free PDOStatement maybe mysql gone away,skip it:" . $e->getMessage(), log::DEBUG);
}

}

1.3 是否斷線,修改為master最新

protected function isBreak($e)
{

if (!$this->config[`break_reconnect`]) {
    return false;
}

$info = [
    `server has gone away`,
    `no connection to the server`,
    `Lost connection`,
    `is dead or not enabled`,
    `Error while sending`,
    `decryption failed or bad record mac`,
    `server closed the connection unexpectedly`,
    `SSL connection has been closed unexpectedly`,
    `Error writing data to the connection`,
    `Resource deadlock avoided`,
    `failed with errno`,
    `send of 33 bytes failed with errno=32 Broken pipe`,
];

$error = $e->getMessage();

foreach ($info as $msg) {
    if (false !== stripos($error, $msg)) {
        return true;
    }
}
return false;

}

2.官方推薦使用最新版本以解決此問題


作者:HD2killers
來源:CSDN
原文:https://blog.csdn.net/HD2kill…
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章