你确定服务器最大TCP连接数是IP端口决定的?

Nginx最大连接数是多少#如何实现一个1亿用户量的IM#如何实现一次1亿条实时消息推送

哪个后端程序猿没有经历过上述面试题?面试答得天花乱坠,实践过的人又有多少呢?本人最近心血来潮想压压看自己写的mqtt服务端,刚好能从实践中找找答案。接下来部署一台服务器测一测吧!

## 实验

硬件:

24核CPU,64G内存,1T固态盘

软件:

PVE8.1.4+Rocky Linux9+JDK11+Mysql+Redis+Minio+prometheus+grafana

实验一:

mqtt服务端运行在1个2C4G的虚拟机上。

用1个1C4G的虚拟机,去模拟1万个客户端,连接一个mqtt服务端。因为只想看看最大连接是多少,所以客户端只用了10个线程创建mqtt连接,并没有压测并发。结果,正常连接。

连接数成功到达10k:

客户端CPU内存都爆了

服务端CPU没什么影响,内存高水位(后面测试结果看,这次应该是其它因素干扰了内存数据)。

 

实验二:

由于首次测试没有意识到客户端会崩,只看了服务端的资源监控以为10k连接是成功的,于是加大剂量到50k,结果到16k时客户端就崩了。

实验三:

既然是16k崩的,那4G是不是能支撑10k连接?

客户端加资源到3C12G,服务端加资源到2C8G。

发起30k连接,是不是应该可能也许hold住?

客户端CPU在死亡边缘徘徊,内存又爆了。

服务端却稳如老狗。。。

连接数没有按比例达到预期,说明什么?测试程序有BUG?经过调试,发现测试程序写的有点问题。测开也不是这么好干的呢。

实验四:

经过修修补补后,睡了一觉继续开干。这次换个思路,3个1C4G客户端对1个3C12G服务端。

还是发起30k连接。

上午发起的测试请求,晚上下班回家看了监控还蛮欣慰,连接数稳定在30k,心跳数也稳定在30k/min(客户端心跳设置的1次/min,说明所有客户端心跳都正常)。

3台客户端的CPU算是稳定了,但是内存压力还是非常大,持续在90%以上水位。

服务端因为加了配置,CPU资源过剩,1C不需要加,内存剩余2.5G还算稳定。

 

监控数据虽然还行,但是分析了本次的日志,发现了一点问题。在修复了若干BUG,加上新的日志后,继续实验。

实验五:

服务端降配到2C8G,客户端还是3台1C4G。

继续30k连接。看看这次修复BUG后能不能保持连接同时降低客户端的内存占用。

客户端还是老样子,压力山大。

服务端CPU无压力,内存60%水位不高。

受限于机器的资源有限,目前只能测到30k的量级。本次实验验证了2C8G服务端实现30k连接稳定运行是可靠数据。不加报文的前提下,连接数的提升主要依赖内存的提升。一台服务器一般是256G内存配置,实现100万连接是可能的。另外,我是拿自研MQTT服务端测试,性能上没法与优秀商业产品相比。商业产品能做到单机500万连接。4

虽然但是,从技术学习的角度,收获还是不小的。

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/79834.html

(0)
速盾高防cdn's avatar速盾高防cdn
上一篇 2024年5月31日 上午1:34
下一篇 2024年5月31日 上午1:34

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注