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