【高并发】三、高并发 之 合理配置来支持百万级并发连接

一、为什么要进行配置

1、即使采用了最先进的模型,如果不进行合理的配置,也没有办法支撑百万级的网络连接并发。

2、Linux操作系统中文件句柄数的限制。顺便说下,在生产环境中,大家都使用Linux系统,所以,后续文字中假想的生产操作系统,都是Linux系统。另外,由于大多数同学使用Windows进行学习和工作,因此,后续文字中假想的开发所用的操作系统都是Windows系统。

3、在生产环境Linux系统中,基本上都需要解除文件句柄数的限制。原因是,Linux的系统默认值为1024,也就是说,一个进程最多可以接受1024个socket连接。这是远远不够的。

二、文件句柄

1、文件句柄,也叫文件描述符。在Linux系统中,文件可分为:普通文件、目录文件、链接文件和设备文件。

  1. 文件描述符(File Descriptor)是内核为了高效管理已被打开的文件所创建的索引,它是一个非负整数(通常是小整数),用于指代被打开的文件。
  1. 所有的IO系统调用,包括socket的读写调用,都是通过文件描述符完成的。

2、ulimit命令:是用来显示和修改当前用户进程一些基础限制的命令,-n命令选项用于引用或设置当前的文件句柄数量的限制值。Linux的系统默认值为1024。

ulimit只能作为临时修改,系统重启后,句柄数量又会恢复为默认值。

3、一个高并发的应用,面临的并发连接数往往是十万级、百万级、千万级、甚至像腾讯QQ一样的上亿级。

文件句柄数不够,会导致什么后果呢?当单个进程打开的文件句柄数量,超过了系统配置的上限值时,就会发出“Socket/File:Can’t open so many files”的错误提示。

查看单个进程能够打开的最大文件句柄数量
# ulimit -n

设置文件句柄数 n的设置值越大,打开的文件句柄数量就越大。以root用户来执行此命令。
# ulimit -n  number(大小)
# ulimit -n 10000

4、永久地把设置值保存下来,编辑/etc/rc.local开机启动文件,在文件中添加:

ulimit -SHn 10000
  1. 增加-S和-H两个命令选项。

-S表示软性极限值,-H表示硬性极限值。

  1. 硬性极限是实际的限制,就是最大可以是100万,不能再多了。软性极限是系统警告(Warning)的极限值,超过这个极限值,内核会发出警告。

5、终极解除Linux系统的最大文件打开数量的限制,编辑Linux的极限配置文件/etc/security/limits.conf来解决,修改此文件:

soft nofile 100000
hard nofile 100000

soft nofile表示软性极限,hard nofile表示硬性极限。

在使用和安装目前非常火的分布式搜索引擎——ElasticSearch,就必须去修改这个文件,增加最大的文件句柄数的极限值。

在服务器运行Netty时,也需要去解除文件句柄数量的限制,修改/etc/security/limits.conf文件即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值