webman数据库连接感觉有问题,特别是多库以及多服务器应用场景下

JunH

我没有使用illuminate/database连接而是使用thinkorm连接,发现这个sleep和关闭无关。而是有多个数据库根据php进程进行创建的连接数。然而导致大量sleep

我也不知道我的理解对不对,我的配置如下:
我有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

然后我看数据库连接数也是这个
总的连接数再1700左右

这么理解是不是有问题吗?至于说关闭连接所有的我都试过了都不起作用
麻烦框架帮我看看怎么处理,而且大部分为了减少服务器压力,都转移了所有的redis以及客户端缓存话处理了

543 2 1
2个回答

walkor 打赏

用的哪个数据库组件?
think-rom还是laravel-orm?

walkor 打赏

打开 vendor/webman/think-orm/src/ThinkOrm.php ,将定时器部分注释掉。
截图

你要确保所有的数据库连接被关闭。阿里云的rds有个机制,连接不关闭超过一定时间再通过这个连接访问会超时。

  • JunH 2024-07-23

    我把这个每隔55s 活跃这个注释掉,每次创建会自动回收吗?还是必须要等待数据库配置的超时时间自动断开
    下次做项目是不是webman的框架我最好使用框架带的这个illuminate/database来连接?
    这个大佬后期可以优化下吗?类似于连接池的概念webman自己封装一个,不推荐使用其他的数据库连接,不然这玩意影响太大了。

  • JunH 2024-07-23

    现在我已经注释掉 并重启了 只是在55秒等待的时候没有重置这个活跃连接,时间一直在累加还是sleep状态,这个连接一直在,只有等数据库配置的时间超过8小时才会自动断开吗?

  • walkor 2024-07-23

    注释掉只是不让数据库重连。你需要在用完数据库手动关闭连接,比如在中间件里得到响应后关闭数据库连接。
    php数据库连接池解决不了你的这个问题。

    或者参考这个帖子采用use 数据库的方式复用连接。 https://www.workerman.net/q/13019

  • walkor 2024-07-23

    使用think-orm 和 illuminate/database 除了接口略有不同之外,其它没有区别

  • JunH 2024-07-23

    好的 我试下 现在重新关闭 行不行

  • walkor 2024-07-23

    composer require -W webman/think-orm ^1.1.2
    升级下webman/think-orm,定时器里加了判断,已经关闭的连接不发心跳了。

  • JunH 2024-07-23

    好的,我现在试了。现在连接量让我直接起飞了 哈哈哈哈
    感谢大哥
    对了,这种频繁连接会不会对性能有什么影响,感觉又走上了php-fpm,对于高并发系统来说不是很友好这种解决方案。项目不算小,不知道大佬能不能给我点建议

  • walkor 2024-07-23

    频繁连接对性能有一定影响,建议采用 https://www.workerman.net/q/13019 的方式

×
🔝