请选择 进入手机版 | 继续访问电脑版

默认
发表评论 11
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
分享几个我的Netty长连接压力测试性能优化实践
搜索了好多都没有一个全面的Netty压测的报告以及可以探讨的地方,因此希望跟大家分享各自使用Netty的压测情况以及调优方法和踩过的坑。

最近公司在重构长连接服务,也算再一次重新学习了一次Netty吧,最后4c8g服务,心跳10分钟下长连接可维持50w,开启单聊重试队列 读写qps可以达到5000左右。

自己踩过的坑:

1)Netty内存泄漏 自己创建的ByteBuf或channelRead里的msg没有释放,除非调用writeAndFlush、flush、ctx.fireChannelRead(msg)让最后的Pipline进行释放、继承SimpleChannelInboundHandler

解决:出现这个问题大概率因为对整个消息在ChannelHandler中运转流程不熟,最快定位就是开启netty自带的内存泄漏检测
io.netty.leakDetectionLevel  PARANOID
参考含义:

  • DISABLED - 完成禁止检测内存泄漏,这个是不推荐。
  • SIMPLE - 如果buffer中出现1%的内存泄漏,打印错误日志,就是上面那样。但是日志是看不到详细在什么位置出现了内存泄漏。鉴于性能考虑,这个是在生产环境中默认使用。
  • ADVANCED - 如果buffer的1%出现内存泄漏,打印错误,并且输出详细的内存泄漏信息。
  • PARANOID - 这个和ADVANCED输出的内容是一样的,但它会对每一次请求的buffer做检查。很适用于调试和单元测试。

2)当server端单机到达6w+的时候client无法连入会提示:java.net.SocketException: Too many open files。

解决:需要修改系统最大文件句柄数 fs.file-max=1000000 以及 单进程打开最大句柄数 open file

3)io.netty.channel.ConnectTimeoutException: connection timed out: /xx.xx.xx.xx:8080

解决:今天的连接超时问题在于我使用日常环境的机器去连预发机器,首先怀疑是机器网络有问题用本地去连日常和预发都是可以正常连接,于是就想到了用日常机器去ping预发机器,发现没有任何回包,于是找到运维得到的答复是他们有做网络隔离,日常和预发网段是隔离的

4)用Netty去编写WebSocket的客户端时需要注意,如果是一个服务只连接一个客户端那么正常连接就好,一个服务要通过客户端向服务端发起多个connect的时候需要注意,Netty在通过Http协议升级到WebSocket之后,会将原来的 HttpClientCodec/HttpObjectAggregator 替换为WebSocekt协议的Handler



即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:请教下IM的聊天记录的设计问题下一篇:[已回复] 求教MobileIMSDK服务端高可用的问题
推荐方案
评论 11
听老员工说他们原来4c8g单机压测下行50w,自己慌得一批,赶忙跑来找报告,发现大佬是用48核32G的服务器消息发送qps到达4w,因此不知道怎么跟老板汇报 MobileIMSDK的性能测试:http://www.52im.net/thread-57-1-1.html
引用:云飞落灯花 发表于 2022-05-30 17:26
听老员工说他们原来4c8g单机压测下行50w,自己慌得一批,赶忙跑来找报告,发现大佬是用48核32G的服务器消息 ...

这台48核32G是10年前的硬件了,跟现在的硬件性能差不少。
另外,cpu和内存都没有跑满,最多用到了10%资源而已。

4c8g单机压测下行50w,指的是什么50万,连接数还是吞吐量
签名: 《由浅入深,从根上理解Protobuf的编解码原理》http://www.52im.net/thread-4088-1-1.html
引用:JackJiang 发表于 2022-05-30 22:24
这台48核32G是10年前的硬件了,跟现在的硬件性能差不少。
另外,cpu和内存都没有跑满,最多用到了10%资 ...

是每秒下推的qps,因为没参与当时压测 所以我现在感觉差距很大 自己也打个问号
对于上面提到的第三个坑,日常和预发在网络上是隔离 有小伙伴知道是怎么做到的嘛?欢迎一起讨论
引用:云飞落灯花 发表于 2022-06-02 22:19
对于上面提到的第三个坑,日常和预发在网络上是隔离 有小伙伴知道是怎么做到的嘛?欢迎一起讨论

运维应该是可以在三层交换机上实现,这类硬件比较高级,比如华为、Junifer的三层交换机,便宜的几千几万,贵的几十万
签名: 《由浅入深,从根上理解Protobuf的编解码原理》http://www.52im.net/thread-4088-1-1.html
好文章,写得好
签名: 今天很666
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部