Php 处理问题的最佳方式是什么;警告:mysql_connect():连接太多;科哈纳3号?

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中,捕获任何异常并显示一个未找到的页面。这是因为如果找不到资源(尽管路由可能有效),我的控

我有一个公司用来记录员工工作的web应用程序

很多人经常一次登录

应用程序在共享主机上运行

我有时会收到

警告:mysql_connect()[function.mysql connect]:连接太多

然后让更多的错误级联。。。类似于
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:为什么?这是一个静态多态性,所以我刚刚重写了一个方法。