作者:s_j_x
链接:https://www.jianshu.com/p/490e2981545c
实现单机的百万连接,瓶颈有以下几点:
1、如何模拟百万连接
2、突破局部文件句柄的限制
3、突破全局文件句柄的限制
在linux系统里面,单个进程打开的句柄数是非常有限的,一条TCP连接就对应一个文件句柄,而对于我们应用程序来说,一个服务端默认建立的连接数是有限制的。
下面通过优化要突破这个连接数。
优化
1、局部文件句柄限制
![](https://img.haomeiwen.com/i13624274/54921882dda8a164.png)
一个jvm进程最大能够打开的文件数.png
修改65535的这个限制
vi /etc/security/limits.conf
在文件末尾添加两行
*hard nofile 1000000
soft nofile 1000000
soft和hard为两种限制方式,其中soft表示警告的限制,hard表示真正限制,nofile表示打开的最大文件数。整体表示任何用户一个进程能够打开1000000个文件。注意语句签名有
号 表示任何用户
![](https://img.haomeiwen.com/i13624274/9e7592bf4057ae73.png)
shutdown -r now 重启linux
再次查看
![](https://img.haomeiwen.com/i13624274/afe18b5b26290098.png)
已经修改生效了。
测试
![](https://img.haomeiwen.com/i13624274/07ee6077d068db86.png)
最大连接数10万多.png
2、突破全局文件句柄的限制
cat /proc/sys/fs/file-max
file-max 表示在linux 中最终所有x线程能够打开的最大文件数
![](https://img.haomeiwen.com/i13624274/01d43ba5d34bf93a.png)
image.png
修改这个最大值:
sudo vi /etc/sysctl.conf
在文件的末尾添加 fs.file-max=1000000
然后让文件生效 sudo sysctl -p
这个时候再查看一下全局最大文件句柄的数已经变成1000000了
![](https://img.haomeiwen.com/i13624274/1f43043b3585da73.png)
测试
![](https://img.haomeiwen.com/i13624274/d77cc04ce5934466.png)
最大连接数36万多.png
注: 测试的服务器型号
![](https://img.haomeiwen.com/i13624274/9ea4b4b0c9ad094e.png)
image.png
cpu 相关配置
![](https://img.haomeiwen.com/i13624274/7d9e344e96357abf.png)
网友评论