我也不知道我的理解对不对,我的配置如下:
我有2台服务器用来承受服务器端压力,轮询请求权重为1:1。
然后使用阿里云rds mysql数据库,数据库采用分库模式,一个商户一个库,现在总的已达到54个商户库,代码是同一套在两台服务器上面。
webman状态打印单台服务器为
----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:4.1.13 PHP version:7.4.33
start time:2024-07-07 13:28:49 run 15 days 11 hours
load average: 2.19, 2.39, 2.56 event-loop:\Workerman\Events\Select
3 workers 18 processes
worker_name exit_status exit_count
webman 0 2145
webman 64000 6166
webman 65280 3
webman 9 16
monitor 0 0
plugin.webman.push.server 0 0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
24472 64.15M http://0.0.0.0:8787 webman 0 2 4 17011 0 [idle]
24474 69.54M http://0.0.0.0:8787 webman 0 0 4 15485 0 [idle]
24476 63.27M http://0.0.0.0:8787 webman 0 1 4 14819 0 [idle]
24478 68.2M http://0.0.0.0:8787 webman 0 0 4 15288 0 [idle]
24480 63.9M http://0.0.0.0:8787 webman 0 1 4 16659 0 [idle]
24482 81.2M http://0.0.0.0:8787 webman 1 0 4 14864 0 [idle]
24484 68.71M http://0.0.0.0:8787 webman 0 1 4 15891 0 [idle]
24485 68.21M http://0.0.0.0:8787 webman 0 1 4 15149 0 [idle]
24488 63.13M http://0.0.0.0:8787 webman 0 0 4 15916 0 [idle]
24490 67.84M http://0.0.0.0:8787 webman 0 0 4 12995 0 [idle]
24492 63.31M http://0.0.0.0:8787 webman 0 1 4 14420 0 [idle]
24494 69.39M http://0.0.0.0:8787 webman 0 2 4 15413 0 [idle]
24496 70.37M http://0.0.0.0:8787 webman 0 1 4 13976 0 [idle]
24497 62.32M http://0.0.0.0:8787 webman 0 1 4 13608 0 [idle]
24500 N/A http://0.0.0.0:8787 webman N/A N/A N/A N/A N/A [busy]
24501 69.09M http://0.0.0.0:8787 webman 0 0 4 14269 0 [idle]
26311 4.35M none monitor 0 0 3 0 0 [idle]
26312 7.28M websocket://0.0.0.0:3131 plugin.webman.push.server 180 2323 4 70963892 0 [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 1018M - - 181 2334 67 71189655 0 [Summary]
我理解如下:
单台服务器php进程数为16个php进程,那么2台服务器为32。数据库为54,那么连接数为54*32=1728
然后我看数据库连接数也是这个
这么理解是不是有问题吗?至于说关闭连接所有的我都试过了都不起作用
麻烦框架帮我看看怎么处理,而且大部分为了减少服务器压力,都转移了所有的redis以及客户端缓存话处理了
用的哪个数据库组件?
think-rom还是laravel-orm?
think-orm
打开 vendor/webman/think-orm/src/ThinkOrm.php ,将定时器部分注释掉。
你要确保所有的数据库连接被关闭。阿里云的rds有个机制,连接不关闭超过一定时间再通过这个连接访问会超时。
我把这个每隔55s 活跃这个注释掉,每次创建会自动回收吗?还是必须要等待数据库配置的超时时间自动断开
下次做项目是不是webman的框架我最好使用框架带的这个illuminate/database来连接?
这个大佬后期可以优化下吗?类似于连接池的概念webman自己封装一个,不推荐使用其他的数据库连接,不然这玩意影响太大了。
现在我已经注释掉 并重启了 只是在55秒等待的时候没有重置这个活跃连接,时间一直在累加还是sleep状态,这个连接一直在,只有等数据库配置的时间超过8小时才会自动断开吗?
注释掉只是不让数据库重连。你需要在用完数据库手动关闭连接,比如在中间件里得到响应后关闭数据库连接。
php数据库连接池解决不了你的这个问题。
或者参考这个帖子采用use 数据库的方式复用连接。 https://www.workerman.net/q/13019
使用think-orm 和 illuminate/database 除了接口略有不同之外,其它没有区别
好的 我试下 现在重新关闭 行不行
composer require -W webman/think-orm ^1.1.2
升级下webman/think-orm,定时器里加了判断,已经关闭的连接不发心跳了。
好的,我现在试了。现在连接量让我直接起飞了 哈哈哈哈
感谢大哥
对了,这种频繁连接会不会对性能有什么影响,感觉又走上了php-fpm,对于高并发系统来说不是很友好这种解决方案。项目不算小,不知道大佬能不能给我点建议
频繁连接对性能有一定影响,建议采用 https://www.workerman.net/q/13019 的方式