workerman http 并发上去了 后mysql 报错
首先请了解单例模式的连接资源的释放
由于Workerman不会在每次请求后释放全局对象及类的静态成员,在数据库等单例模式中,往往会将数据库实例(内部包含了一个数据库socket连接)保存在数据库静态成员中,可能导致大量的未释放链接句柄
但是,默认情况下的workerman模块已经对数据库链接进行了处理和调试,一个进程的所有请求共用单个链接,建议着重检查二开部分的代码。
还有可能是数据库配置的 max_connections 值过小,可直接适当调大观察情况
max_connections
二开的哪些操作会 造成 一个请求一个 链接并且不会释放呢
比如启动服务时就调用了Db类
业务中使用了蛮多的 Db 事务 这算吗
无法确定哈,你可以通过实时查询数据库的当前连接列表进行调试,比如 SHOW PROCESSLIST; 命令
SHOW PROCESSLIST;
首先请了解单例模式的连接资源的释放
由于Workerman不会在每次请求后释放全局对象及类的静态成员,在数据库等单例模式中,往往会将数据库实例(内部包含了一个数据库socket连接)保存在数据库静态成员中,可能导致大量的未释放链接句柄
但是,默认情况下的workerman模块已经对数据库链接进行了处理和调试,一个进程的所有请求共用单个链接,建议着重检查二开部分的代码。
还有可能是数据库配置的
max_connections
值过小,可直接适当调大观察情况二开的哪些操作会 造成 一个请求一个 链接并且不会释放呢
比如启动服务时就调用了Db类
业务中使用了蛮多的 Db 事务 这算吗
无法确定哈,你可以通过实时查询数据库的当前连接列表进行调试,比如
SHOW PROCESSLIST;
命令