请教一个 nginx 的 upstream 跟 cpu 数量的问题

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

upstream 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 数量的问题了。
再就是这种模式还有救么。。
3030 次点击
所在节点    NGINX
12 条回复
rrfeng
2018-06-11 11:27:12 +08:00
这个是 nodejs 控制的...
torment5524
2018-06-11 11:29:42 +08:00
@rrfeng 感谢答复,node.js 没用过,被折腾的不轻。
a7a2
2018-06-11 11:46:58 +08:00
nodejs 又不是 python 为何一份代码要开 n 多端口做相同的服务???对开发者能力表示疑问?
D3EP
2018-06-11 12:26:40 +08:00
@a7a2 node 只能多进程吧,只能这样做
suconghou
2018-06-11 12:42:42 +08:00
node 单个进程就能应对高并发了 但是单个进程不能充分利用多核, node 的运行模型更不适用于 cpu 密集型计算,这些场景下多进程是有必要的 。 猜测是你服务器上有什么管理 node 进程的东西 始终开启和 cpu 核数相同的进程端口号递增 导致的问题
a7a2
2018-06-11 13:11:08 +08:00
@suconghou 还是写代码那个不行 ,查了一下,nodejs 自从出了多线程支持 cluster 后就能充分利用 cpu 每个核
ryd994
2018-06-11 14:40:34 +08:00
@D3EP 多进程又不用多端口。Nginx 还不是多个进程。要效率高的话可以用 reuseport
janxin
2018-06-11 14:43:37 +08:00
@a7a2 本质上还是起子进程啊...
suconghou
2018-06-11 14:48:00 +08:00
@a7a2 cluster node 0.6 版本就有了,cluster 就是多进程,node 就没有用户代码的多线程,用 cluster 和启多个进程是一样的,只不多 cluster 也负责了负载均衡,而这里使用了 nginx 负责负载均衡.
inflationaaron
2018-06-12 03:14:08 +08:00
V8 就是单线程引擎,怎么 node.js 就能用上多线程了?除了 async call 是系统用 thread pool 实现的,用户没法自己写多线程的。
torment5524
2018-06-12 08:45:56 +08:00
@suconghou 用的 pm2 做的管理,我有个小疑问,既然是通过 nginx 启动的多个 node.js 进程,这几个在 js 文件里都是同一个端口,这样没有冲突么,再就是老的业务是访问 17 个端口的,这还少了一个,怎么让 pm2 出啊过 cpu 多开个进程出来。。
suconghou
2018-06-12 10:08:10 +08:00
@torment5524 首先,node 进程是 pm2 启动的,不是 nginx; 其次 ,你指出 node 进程是有多少进程就有多少个端口号,那 pm2 就不是以 cluster 模式启动的,应该是 fork 模式,端口号的使用规则要看你的代码或者相关配置,增加进程和减少进程可以参考 pm2 的命令行用法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX