让Netty Linux 突破100万的连接量

让Netty Linux 突破100万的连接量,第1张

链接:https://www.jianshu.com/p/490e2981545c

实现单机的百万连接,瓶颈有以下几点:

1、如何模拟百万连接

2、突破局部文件句柄的限制

3、突破全局文件句柄的限制

在linux系统里面,单个进程打开的句柄数是非常有限的,一条TCP连接就对应一个文件句柄,而对于我们应用程序来说,一个服务端默认建立的连接数是有限制的。

下面通过优化要突破这个连接数。

优化

1、局部文件句柄限制

一个jvm进程最大能够打开的文件数.png

修改65535的这个限制

vi /etc/security/limits.conf

在文件末尾添加两行

*hard nofile 1000000

 soft nofile  1000000

soft和hard为两种限制方式,其中soft表示警告的限制,hard表示真正限制,nofile表示打开的最大文件数。整体表示任何用户一个进程能够打开1000000个文件。注意语句签名有

号 表示任何用户

shutdown -r now  重启linux

再次查看

已经修改生效了。

测试

最大连接数10万多.png

2、突破全局文件句柄的限制

cat /proc/sys/fs/file-max

file-max 表示在linux 中最终所有x线程能够打开的最大文件数

修改这个最大值:

sudo vi  /etc/sysctl.conf

在文件的末尾添加 fs.file-max=1000000

然后让文件生效 sudo sysctl -p

这个时候再查看一下全局最大文件句柄的数已经变成1000000了

测试

最大连接数36万多.png

注: 测试的服务器型号

cpu 相关配置

linux的TCP连接数量最大不能超过65535个,这种说法是错误的。

一、TCP最大连接数和端口数量没有必然联系

TCP连接是服务器IP端口和客户端IP端口组成的,对于服务器而言,一般一个服务器只监听一个端口,而客户端是可以不计其数的。一个连接由一个5元组决定(protocol,local IP,local port,remote ip,remote port),对于TCP,protocol固定是TCP,还有四个元素。对于服务器来说,local port一般是固定的,比如HTTP(80),但是remote ip和remote port没有限制。也就是说,可以有百万千万的并发。如果并发量能达到百万千万量级,那么不会只有一个服务器,一般都会是一个服务集群。

二、TCP连接数是和内存正成比的

客户端和服务器建立的每个TCP连接都会占用服务器内存,所以最大TCP连接数和内存成正比。简单估算为最大内存除以单TCP连接占用的最小内存。

三、linux对tcp数量限制是为了文件管理方便

1、Linux *** 作系统中,一切都是文件。所以每个TCP连接,都会打开一个文件。为此Linux *** 作系统限制了每个用户能打开的文件数量,通过ulimit -n 查看。当然,我们也可以对此进行修改,修改方式如下:

vi /etc/security/limits.conf文件,在文件中添加如下行(限制修改为10240):

speng soft nofile 10240

speng hard nofile 10240

2、Linux *** 作系统对所有用户最大能打开文件的限制:cat /proc/sys/fs/file-max。

3.网络核心模块对tcp连接的限制(最大不能超过65535)。

4、防火墙管理策略也会对tcp连接数量进行限制。

基于以上的原因,在Linux *** 作系统中,对TCP连接数量的限制依次有:端口数量限制,网络核心限制,最大文件数量限制(因为每建立一个连接就要打开一个文件),防火墙限制,用户打开文件限制。但并不存在65535这个数量限制。

使用起来很清晰,首先要调用epoll_create建立一个epoll对象。参数size是内核保证能够正确处理的最大句柄数,多于这个最大数时内核可不保证效果。epoll_ctl可以 *** 作上面建立的epoll,例如,将刚建立的socket加入到epoll中让其监控,或者把 epoll


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7131818.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存