Php 处理问题的最佳方式是什么;警告:mysql_connect():连接太多;科哈纳3号?
我有一个公司用来记录员工工作的web应用程序 很多人经常一次登录 应用程序在共享主机上运行 我有时会收到 警告:mysql_connect()[function.mysql connect]:连接太多 然后让更多的错误级联。。。类似于Php 处理问题的最佳方式是什么;警告:mysql_connect():连接太多;科哈纳3号?,php,exception-handling,kohana,kohana-3,Php,Exception Handling,Kohana,Kohana 3,我有一个公司用来记录员工工作的web应用程序 很多人经常一次登录 应用程序在共享主机上运行 我有时会收到 警告:mysql_connect()[function.mysql connect]:连接太多 然后让更多的错误级联。。。类似于mysql\u select\u db(),mysql\u error(),mysql\u errnon(),最后是未捕获的数据库异常 当我运行主请求时,我将其包装在一个try中,捕获任何异常并显示一个未找到的页面。这是因为如果找不到资源(尽管路由可能有效),我的控
mysql\u select\u db()
,mysql\u error()
,mysql\u errnon()
,最后是未捕获的数据库异常
当我运行主请求时,我将其包装在一个try
中,捕获任何异常并显示一个未找到的页面。这是因为如果找不到资源(尽管路由可能有效),我的控制器通常会抛出异常,例如http://example.com/products/30
是一条有效的路线,但产品#30不存在
处理过多连接的最佳方法是什么?理想情况下,我希望单独捕获该异常,然后显示一个漂亮的页面,通知员工在5分钟后重试
在application/bootstrap.php
中运行我的主请求的代码如下所示
$request = Request::instance();
try {
$request->execute();
} catch (Exception $e) {
if (Kohana::$environment === Kohana::DEVELOPMENT) throw $e;
// Log the error
Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));
// Create a 404 response
$request->status = 404;
$request->response = Request::factory(Route::get('catch_all')->uri(array('path' => 'errors/404')))->execute();
}
$request->send_headers();
echo $request->response;
谢谢你的帮助 您可能希望首先检查您的MySQL系统属性max_connections当前设置为什么,并查看它如何比较使用要求。如果您不能很好地处理使用需求,那么您可能会做得比使用代码记录同步连接的数据更糟糕;或者,您可以使用实时数据库分析工具对此进行监控
您还可以查看您的代码是否占用连接太长时间(即不必要的),并纠正此问题。也许可以调查连接池。我刚刚创建了这样的文件来处理所有错误:
<?php
class Kohana extends Kohana_Core
{
/**
* Redirect to custom exception_handler
*/
public static function exception_handler(Exception $e)
{
if (Kohana::DEVELOPMENT === Kohana::$environment)
{
// Pass to Kohana if we're in the development environment
parent::exception_handler($e);
}
else
{
Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));
// Default route
$route = Route::url('default', array('controller' => 'error', 'action' => '404'));
// Error sub-request.
echo Request::factory($route)
->execute()
->send_headers()
->response;
}
}
}
在/etc/my.cnf
的[mysqld]
部分添加:
max_connections = 500
然后执行SET GLOBAL max_connections=500代码>在MySQL中或重新启动MySQL。可能是您应该使用set\u exception\u handler()
而不是更改系统核心类逻辑?类似于引导中的if(Kohana::DEVELOPMENT!==Kohana::$environment){set_exception_handler(数组('Kohana','exception_handler');}
。php@biakaveron:为什么?这是一个静态多态性,所以我刚刚重写了一个方法。