由于“连接太多”,PHP mysql_connect有时会失败。 在检查进程状态列表时,我注意到当发生这种情况时,有很长的进程处于睡眠状态。多久?时间:28490
这是我初始化连接的方式:
$this->connection[$server] = mysql_connect( $credentials['dbUrl'], $credentials['dbUser'], $credentials['dbPass'], true);
这种情况不会一直发生,有时连接会“卡住”。我认为它可能与页面上没有完成的东西有关(图像没有加载?外部服务卡住?)。脚本什么时候正式完成?它是在页面完全加载后吗?
我想到了两种可能的解决方案:
1.使用mysql_close。
2.更改max mysql timeout(/etc/my.cnf
)
3.处理脚本超时。
什么原因导致连接陷入“睡眠”? 您如何建议解决/进一步调查此问题?
答案 0 :(得分:1)
一个很好的解决方案是将您的连接放入一个函数,然后添加一个析构函数来为您关闭连接。这样,连接会在最后一次调用mysql连接后自动关闭。
class DbConn {
public $connection;
public function __construct($host, $name, $user, &$pass) {
$this->connection = mysql_connect(mysql_connect($host, $user, $pass);
if(mysql_connect_errno) {
echo mysql_connect_error;
} else {
mysql_select_db($name, $this->connection);
}
unset($pass); //Clear password for security.
}
public function __destruct() {
mysql_close($this->connection);
}
}
这应该处理大多数打开的连接,因为它们将在脚本结束之前关闭,即使脚本挂在图像上,连接也会在最后一个查询运行后关闭。你可能仍会得到一些,但不足以导致too many connections
错误。