技术解析

请教一个 nginx 的 upstream 跟 cpu 数量的问题
0
2021-05-19 16:33:27
idczone
最近帮一个朋友维护一个网站,建在阿里云上,查看了下负载的峰值都是 3 左右,cpu 和内存使用都不超过 5%,于是给降了配置,从 16c 降到了 8c,结果部分客户端出现了访问服务器失败的情况。
然后去排查原因,发现服务器就一个 node.js 服务,通过 nginx 做代理,配置大概如下:

ups美国服务器tream io_nodes {
ip_hash;
server 127.0.0.1:69;
server 127.0.0.1:70;
server 127.0.0.1:71;
server 127.0.0.1:72;

一共 10 多个端口,都是对应本机的同一个 node.js 服务,我是没大搞懂意义何在,但是,降到 8c 之后,查了下,端口就只剩下了 8 个,把服务器改成了 16c 之后又全都出现了。
本来以为是 worker_processes 参数的问题,但是经过测试,woker 确实根据设定的值来了,但是打开的端口还是跟 cpu 数量一致。
请教下,这个是由什么配置控制的?
================
刚好在群里问到了,说是 node.js 的进程数和 cpu 有关,是这个开不起来了,现在变成 node.js 的进程数和 cpu 数量的问题了。
再就是这种模式还有救么。。
这个是 nodejs 控制的...

感谢答复,node.js 没用过,被折腾的不轻。

nodejs 又不是 python 为何一份代码要开 n 多端口做相同的服务???对开发者能力表示疑问?

node 只能多进程吧,只能这样做

node 单个进程就能应对高并发了 但是单个进程不能充分利用多核, node 的运行模型更不适用于 cpu 密集型计算,这些场景下多进程是有必要的 。 猜测是你服务器上有什么管理 node 进程的东西 始终开启和 cpu 核数相同的进程端口号递增 导致的问题

还是写代码那个不行 ,查了一下,nodejs 自从出了多线程支持 cluster 后就能充分利用 cpu 每个核

多进程又不用多端口。Nginx 还不是多个进程。要效率高的话可以用 reuseport

本质上还是起子进程啊...

cluster node 0.6 版本就有了,cluster 就是多进程,node 就没有用户代码的多线程,用 cluster 和启多个进程是一样的,只不多 cluster 也负责了负载均衡,而这里使用了 nginx 负责负载均衡.

V8 就是单线程引擎,怎么 node.js 就能用上多线程了?除了 async call 是系统用 thread pool 实现的,用户没法自己写多线程的。

用的 pm2 做的管理,我有个小疑问,既然是通过 nginx 启动的多个 node.js 进程,这几个在 js 文件里都是同一个端口,这样没有冲突么,再就是老的业务是访问 17 个端口的,这还少了一个,怎么让 pm2 出啊过 cpu 多开个进程出来。。

首先,node 进程是 pm2 启动的,不是 nginx; 其次 ,你指出 node 进程是有多少进程就有多少个端口号,那 pm2 就不是以 cluster 模式启动的,应该是 fork 模式,端口号的使用规则要看你的代码或者相关配置,增加进程和减少进程可以参考 pm2 的命令行用法。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服