[eggjs/egg]egg start下,worker 24个 导致访问接口经常非常慢 经常ETIMEOUT

2025-10-27 314 views
2

因为服务器是24核的,所以默认开启的24workers,但是会导致接口经常非常慢,甚至ETIMEOUT;我后面试了一下设置workers<5个的时候,速度就明显提升了,1个的时候最稳定,dev模式下也稳定;求助

数据库已经测试过了,基本是50ms内响应,用的阿里云的RDS,ETIMEOUT报错也是在egg报错的

另外:就算不访问数据库,返回死数据,也是这种情况;

这个是24个workers: QQ图片20210722111417

这个是单workers: QQ图片20210722111721

5workers速度为单workers速度的2倍,很少情况ETIMEOUT,最慢7S以内;

ETIMEOUT报错: err

回答

7

测试过个最简单的接口,比如直接返回 Hello world 这种呢?看看是不是也会是 4 worker 耗时远小于 24 worker 耗时

2

测试过个最简单的接口,比如直接返回 Hello world 这种呢?看看是不是也会是 4 worker 耗时远小于 24 worker 耗时

不行老哥,试了一下,依然是这个问题……

8

你可以直接用 http server fork 25 个看看如何,另外你确认服务器没有超卖?

5

测试过个最简单的接口,比如直接返回 Hello world 这种呢?看看是不是也会是 4 worker 耗时远小于 24 worker 耗时 不行老哥,试了一下,依然是这个问题……

我看了下 nodejs cluster 的逻辑,本质上就是 master 监听端口,有 connection 来的话,master 按照 round-robin 的策略挑选 cluster.fork 出来的 worker,用 ipc 直接将监听到的 socket 发送给对应的 worker 直接处理。

因此实际上 socket 逻辑处理全都是在 worker 进行的,也不存在 master 负载会和 worker 数量有特别大的关系,从这个逻辑上来看,24 worker 做 round-robin 和 4 worker 做 round-robin 是没有区别的

1

另外你的 nodejs 版本是啥,我看看本地能不能复现

8

测试过个最简单的接口,比如直接返回 Hello world 这种呢?看看是不是也会是 4 worker 耗时远小于 24 worker 耗时 不行老哥,试了一下,依然是这个问题……

我看了下 nodejs cluster 的逻辑,本质上就是 master 监听端口,有 connection 来的话,master 按照 round-robin 的策略挑选 cluster.fork 出来的 worker,用 ipc 直接将监听到的 socket 发送给对应的 worker 直接处理。

因此实际上 socket 逻辑处理全都是在 worker 进行的,也不存在 master 负载会和 worker 数量有特别大的关系,从这个逻辑上来看,24 worker 做 round-robin 和 4 worker 做 round-robin 是没有区别的

我感觉确实是也没区别的,但是确实是这样,24个worker基本就根本没法用,目前一直开的2个workers,但是估计性能不强吧? node版本是14.17.3

1

你可以直接用 http server fork 25 个看看如何,另外你确认服务器没有超卖?

没有的 老哥,是实体服务器,不是云服务器

1

直接试下 Node 裸 HTTP Server 看看怎么样咯

9

ETIMEOUT 是 mysql 的报错么?是否是 mysql 存在连接数限制问题

1

直接试下 Node 裸 HTTP Server 看看怎么样咯

试下这个,没有进一步消息先关闭了