Home
Download
Document
Forum
Video
Donate
Source Code
AI 助理
Sponsors
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
Products
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
Login
Register
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
QPS才十几打开文件数确是1000
### 问题描述 SWOOLE HttpServer通过请求日志查看QPS才十几,看错误日志发现超过了设置的最大连接数1000,通过命令lsof -i :9505 | wc -l查看打开的文件居然有1000多,什么原因导致打开了大量文件呢? ### Swoole版本,PHP版本,以及操作系统版本信息 swoole4.6 php7.2 centos7.2(8核8G) ### 相关代码 ```php $dbPool = new PDOPool((new PDOConfig) ->withHost('localhost') ->withPort(3306) // ->withUnixSocket('/tmp/mysql.sock') ->withDbName('aaa') ->withCharset('utf8') ->withUsername('root') ->withPassword('root') ); $http = new \Swoole\Http\Server("0.0.0.0", 9505); $http->set(['enable_coroutine' => true, 'worker_num' => 16, 'reactor_num' => 16, 'max_connection' => 1000, 'dispatch_mode' => 3, 'daemonize' => 1, 'log_file' => '/data/aaa/log/error/api.txt', 'log_level' => SWOOLE_LOG_INFO, 'backlog' => 128]); $http->on('request', function ($request, $response) use ($dbPool) { $db = $dbPool->get(); $ip = $request->server['remote_addr']; if ($ip == '127.0.0.1') { $ip = $request->header['x-real-ip']; } $request_uri = str_replace('/index.php?s=/', '', $request->server['request_uri']); $str = date('Y-m-d H:i:s', time()) . ' ' . $ip . " " . $request_uri; $params = ""; $request_uri = substr($request_uri, 0, strpos($request_uri, '.html')); $action = str_replace('index.php/', '', $request_uri); $action = str_replace('/index/', '', $action); $action = str_replace('/', '', $action); if (!$request->get && !$request->post) { $dbPool->put($db); $response->end('ok'); } else { switch ($action) { case 'get_wangba_config' : $msg = $this->getWangbaSet($request->get, $db, $ip); break; case 'push_client' : $msg = $this->push_client($request->post, $db, $ip); break; case 'push_log' : $msg = $this->push_log($request->post, $db, $ip); break; default : $msg = 'ok'; } $dbPool->put($db); $response->end($msg); } }); $http->start(); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 业务代理里面有对mysql的读写操作,就想知道为什么QPS才十几个为什么打开的文件那么多?
发布于3年前 · 30 次浏览 · 来自
提问
dfpopp
### 问题描述 SWOOLE HttpServer通过请求日志查看QPS才十几,看错误日志发现超过了设置的最大连接数1000,通过命令lsof -i :9505 | wc -l查看打开的文件居然有1000多,什么原因导致打开了大量文件呢? ### Swoole版本,PHP版本,以及操作系统版本信息 swoole4.6 php7.2 centos7.2(8核8G) ### 相关代码 ```php $dbPool = new PDOPool((new PDOConfig) ->withHost('localhost') ->withPort(3306) // ->withUnixSocket('/tmp/mysql.sock') ->withDbName('aaa') ->withCharset('utf8') ->withUsername('root') ->withPassword('root') ); $http = new \Swoole\Http\Server("0.0.0.0", 9505); $http->set(['enable_coroutine' => true, 'worker_num' => 16, 'reactor_num' => 16, 'max_connection' => 1000, 'dispatch_mode' => 3, 'daemonize' => 1, 'log_file' => '/data/aaa/log/error/api.txt', 'log_level' => SWOOLE_LOG_INFO, 'backlog' => 128]); $http->on('request', function ($request, $response) use ($dbPool) { $db = $dbPool->get(); $ip = $request->server['remote_addr']; if ($ip == '127.0.0.1') { $ip = $request->header['x-real-ip']; } $request_uri = str_replace('/index.php?s=/', '', $request->server['request_uri']); $str = date('Y-m-d H:i:s', time()) . ' ' . $ip . " " . $request_uri; $params = ""; $request_uri = substr($request_uri, 0, strpos($request_uri, '.html')); $action = str_replace('index.php/', '', $request_uri); $action = str_replace('/index/', '', $action); $action = str_replace('/', '', $action); if (!$request->get && !$request->post) { $dbPool->put($db); $response->end('ok'); } else { switch ($action) { case 'get_wangba_config' : $msg = $this->getWangbaSet($request->get, $db, $ip); break; case 'push_client' : $msg = $this->push_client($request->post, $db, $ip); break; case 'push_log' : $msg = $this->push_log($request->post, $db, $ip); break; default : $msg = 'ok'; } $dbPool->put($db); $response->end($msg); } }); $http->start(); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 业务代理里面有对mysql的读写操作,就想知道为什么QPS才十几个为什么打开的文件那么多?
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2021-07-24
MARiA
worker进程和master进程之间的通信有文件描述符。 服务读写MySQL也有文件描述符。 服务端和客户端之间的通信也有文件描述符。 而且日志说的是超过最大连接数,有可能你的服务端已经维持了1000的tcp请求,把其他请求拒绝了,所以有这个警告。 可以试试ulimit -n 看看系统允许打开的最大文件描述符数量。
赞
0
回复
2021-07-29
R
Ray
仔细阅读这篇文章:https://wiki.swoole.com/#/other/sysctl
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。