workerman作为客户端发送数据给服务端引起mysql报错,报错显示mysql Too many connections
修改了mysql配置文件的max_connections,设置为1000,测试发现代码运行一段时间之后还是报原来的错误。删掉向服务端发送消息的代码又正常运行,求大佬解惑
代码如下
<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require 'Autoloader.php';
require_once __DIR__ . '/vendor/autoload.php';
// 创建一个Worker监听8992端口,不使用任何应用层协议
$tcp_worker = new Worker("tcp://0.0.0.0:8992");
// 启动10个进程对外提供服务
$tcp_worker -> count = 8;
$tcp_worker -> onWorkerStart = function ($tcp_worker) {
//将db实例存储在全局变量中(也可以存储在某类的静态成员中)
global $db;
$db = new \Workerman\MySQL\Connection('127.0.0.1', '3306', 'root', 'root', 'test');
global $tcp_connection;
//以tcp协议连接远程tcp服务器
$tcp_connection = new AsyncTcpConnection("tcp://127.0.0.1:8000");
};
// 当客户端发来数据时
$tcp_worker -> onMessage = function ($connection, $data) {
global $tcp_connection;
//异步连接其他服务端
$tcp_connection -> connect();
//向服务端发送$data
$tcp_connection -> send($data);
};
// 运行worker
Worker ::runAll();
1、报告mysql Too many connections,说明mysql服务器连接数已经达到负载上线,并且有大量的mysql连接未正常释放;
2、单看你这段代码,也没发现能产生那么大的mysql连接,8个进程初始化了8个mysql链接而已;
3、另外发送数据到8000端口,是不是你8000端口所在的服务存在“非正常”操作mysq呢?