You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter 3.1.13中如何解决Too Many Connections错误?

解决CodeIgniter 3.1.13中"Too Many Connections"错误的方案

问题背景

已在数据库配置中设置pconnect = FALSE,也手动调用$this->db->close()关闭连接,但仍出现"Too Many Connections"错误。通过SHOW PROCESSLIST发现,仅加载网站页眉和页脚就会创建大量Sleep状态的MySQL线程。

当前数据库配置:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'port'     => 3306,
    'username' => 'root',
    'password' => '',
    'database' => 'db_name',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8mb4',
    'dbcollat' => 'utf8mb4_unicode_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

排查与解决步骤

  • 排查重复初始化连接问题
    检查控制器、模型、页眉/页脚视图中是否重复调用$this->load->database()。若已在application/config/autoload.php中自动加载了database库,任何手动调用都会新建连接。公共组件(如页眉、页脚)需复用已有的连接实例,避免重复初始化。

  • 优化MySQL闲置连接清理
    调整MySQL的wait_timeout和interactive_timeout参数,缩短闲置连接的存活时间,让MySQL自动清理Sleep状态的连接:

    • 临时生效:执行SET GLOBAL wait_timeout = 300; SET GLOBAL interactive_timeout = 300;(单位:秒,示例为5分钟)
    • 永久生效:修改MySQL配置文件(my.cnf/my.ini),添加或修改:
      wait_timeout = 300
      interactive_timeout = 300
      
  • 确认CodeIgniter连接复用逻辑
    确保所有数据库配置的pconnect均为FALSE,避免持久连接堆积。若存在多数据库配置,需逐一检查。可在控制器的析构方法中统一关闭连接:

    public function __destruct()
    {
        $this->db->close();
    }
    
  • 定位连接泄漏点

    • 检查循环逻辑中是否存在重复创建连接的情况(如foreach内加载模型或初始化连接)。
    • 开启CodeIgniter日志排查:在application/config/config.php中设置$config['log_threshold'] = 2;,查看日志中连接创建/关闭的记录,定位重复创建连接的代码位置。
  • 调整MySQL最大连接数(治标方案)
    若以上优化后仍无法满足需求,可适当提高MySQL的max_connections参数(默认151),修改配置文件:

    max_connections = 500
    

    注意:此为临时缓解方案,优先解决连接泄漏问题才是根本。

内容的提问来源于stack exchange,提问作者Ainz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:35:13