WEB 服务总是达到 5000 左右的连接上限

2022-04-28 12:12:08 +08:00
 ghostheaven

在阿里云监控上看到 ECS 主机的 TCP 总连接数只能到达 4900~5000 左右,到达这个数值之后就拉平了,几乎不再波动。大部分连接处于 TIME_WAIT 的状态,相关的文章看过好几篇,不过都是使用违反 TCP 协议,复用连接的方式,减少 TIME_WAIT 数量。

这个连接数随着业务低谷也会降低到几百个,但是峰值只能达到 5000 。WEB 日志监控也看到白天的并发连接峰值大约 200 ,平均也就 30~40 ,平均延迟一般在 100ms 。

哪位大佬知道这个 5000 左右的连接上限正常吗,可能跟什么有关,能不能提升。

1331 次点击
所在节点    问与答
11 条回复
ghostheaven
2022-04-28 12:12:43 +08:00
补充:

负载是 NGINX 加 PHP-FPM ,其中:

* NGINX 默认启动了 8 个 worker process ,`worker_connections`设置为 2048
* NGINX 与 PHP-FPM 是通过 unix socket 连接
* PHP-FPM 的 pool 配置为
```
pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.max_spare_servers = 15
pm.max_requests = 0 # 默认值
```
* ECS 主机的日常 CPU 负载也不高,白天峰值 60%,夜间低谷 2-3%,内存占用一般 15%左右,几乎无变化
elechi
2022-04-28 14:35:02 +08:00
内核配置?瞎猜
ghostheaven
2022-04-28 14:51:59 +08:00
@elechi ulimit 那边看打开文件限制是 65535 。有什么内核设置会影响这个数量?系统是 Ubuntu 18 server
datocp
2022-04-28 19:00:03 +08:00
这个不应该是跟访问的用户数有关?
其它能解决的估计是修改 tcp/udp timeout 控制,多少时间建立的连接消亡,默认没记错的话 openwrt 可能高达 1 天。目前最高的 10 分钟,最短的几秒。

#/proc/sys/net/netfilter/nf_conntrack_*
net.netfilter.nf_conntrack_generic_timeout=600
net.netfilter.nf_conntrack_tcp_timeout_syn_sent=120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
net.netfilter.nf_conntrack_tcp_timeout_close=10
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
net.netfilter.nf_conntrack_tcp_timeout_last_ack=30
hahahahahahahah
2022-04-29 08:03:50 +08:00
看看可用端口
ghostheaven
2022-04-29 09:04:13 +08:00
@hahahahahahahah 去哪里看,我看分配的端口号是从 3 万多到 6 万多,应该高于 5000
hahahahahahahah
2022-04-29 10:55:41 +08:00
@ghostheaven nginx 没报错吗,看看 ngunx 日志,还有系统日志。可以的话先自己压测下,看看会不会有报错
xzysaber
2022-04-29 14:17:02 +08:00
FPM 是用 systemd 管理的吗?如果是的话,可以使用 "systemctl show {UNITNAME}|grep LimitNOFILE" 查看下。

systemd 管理的应用的打开的文件数上限好像是不受 limit 约束。
xzysaber
2022-04-29 14:21:47 +08:00
或者你可以直接查出涉及到的各个进程 PID 到 /proc 下去查看下现在对应的数量:cat /proc/{PID}/limits
MidGap
2022-04-29 14:58:22 +08:00
跟分配的端口数没太大关系,别人连你不都是连同一个端口么; 看下 close 连接的地方有没有问题吧。
ghostheaven
2022-04-29 20:54:15 +08:00
@xzysaber 果然被限制到 4800 了,我把 nginx 和 php-fpm 改成 10000 了,等峰值到了再看下监控。

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

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

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

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

© 2021 V2EX