ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《Netty深入剖析》之十一(终):Netty高并发性能调优

2019-09-06 20:37:12  阅读:311  来源: 互联网

标签:Netty 句柄 端口 并发 调优 线程 连接 服务端 客户端


11 高并发性能调优

11.1 单机百万连接调优

11.1.1 如何模拟百万连接

使用两台虚拟机,一台服务端一台客户端

如何模拟呢?

情况1:一台Client一台Server,只能有6w连接,因为Client只剩下大概6w个端口可以去连接服务端
在这里插入图片描述
优化1:可以使用多个Client去连接服务端,要开启十几台虚拟机,麻烦

优化2:服务端启动8000~8100端口,且因为TCP是一个四元组概念:源ip、源端口、目标ip、目标端口;
这样Client同一个端口可以连接Server不同端口,会被当成不同的连接,这样就有600w连接,所以此处使用这种方法:
在这里插入图片描述

11.1.2 突破局部文件句柄限制

默认情况下,单个进程打开的句柄数非常有限,而一个TCP连接对应一个句柄,这样导致了一个服务端建立的连接数收到了限制,所以我们要突破句柄总量,即一个进程能够打开的最大文件数

首先使用ulimit -n,看看Linux一个进程能够打开的最大文件数(Linux中,一个TCP连接对应一个文件数),可以看到为1024

然后使用sudo vim /etc/security/limits.conf,添加如下两行:

#当前用户、限制、打开最大文件数、能够打开的最大文件数
* hard nofile 1000000
* soft nofile 1000000

重启即可

11.1.3 突破全局文件句柄限制

即Linux下所有进程能够打开的文件数

查看全局文件句柄:cat /proc/sys/fs/file-max

修改:sudo vi /etc/sysctl.conf

fs.file-max=1000000

sudo sysctl -p生效,然后重启即可

启动服务端客户端,全部连接成功后,如果发现没有到100w,那么使用htop查看服务端性能,可以发现CPU到100%了,所以无法继续运算了,不过也差不多了,可以通过加强机器的性能

11.2 Netty应用级别性能调优:响应时间从秒级到毫秒级的优化

11.2.1 瓶颈

在服务端的ChannelHandler的channelRead0方法里面进行的业务逻辑如果耗时过多,会使响应时间越来越长,因为处理每个客户端线程都要在这里进行等待,这时候是秒级别

11.2.2 优化

1.将耗时的业务操作放到单独的业务的线程池去执行,有结果后再给到客户端

这时候是毫秒级别,当然还会像之前一样,响应时间会持续地往上升到一个稳定值:1000qps里面有10个是 > 100ms的,对应到业务线程池的线程,可能很多线程会超过100ms,因此可以将线程数调大来降低这个比例(因为qps不会变,即客户端请求个数一定),这样<100ms的会更多

增大多少呢?可以慢慢试,或者使用”最佳线程数“公式

2.Netty提供了一种方式:可以把handler放到专门的线程池去处理,不用由NioEventLoop的线程处理

添加handler的时候再传入一个线程池(EventLoopGroup)即可

这种方式会将handler的所有方法都放到线程池去处理,如果分配内存,则在业务线程池里面分配,做不到内存的共享;第一种方式则可以自由选择要放到线程池的代码,可以将内存分配放在主线程里面,业务逻辑才放到业务线程池里,可以做到内存共享;
不过第一种实现简单,对业务代码没有侵入

标签:Netty,句柄,端口,并发,调优,线程,连接,服务端,客户端
来源: https://blog.csdn.net/qq_41594698/article/details/100586099

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有