美文网首页程序员
实战解读丨Linux下实现高并发socket最大连接数的配置方法

实战解读丨Linux下实现高并发socket最大连接数的配置方法

作者: 华为云开发者联盟 | 来源:发表于2020-09-07 14:34 被阅读0次

摘要:Linux操作系统,无论是编写客户端程序还是服务端程序,在高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制。

【诉求场景】

Linux操作系统,无论是编写客户端程序还是服务端程序,在高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

本文档主要是对文件数量并发限制做修改。

【配置方法】

1、修改用户进程可打开文件数限制,如图所示:

说明:

ulimit –n :查看当前系统允许当前用户进程打开的文件数限制。

默认为1024:表示当前用户的每个进程最多允许同时打开1024个文件。

这1024个文件中还得去除每个进程打开的标准输入、标准输出、标准错误、服务器监听socket等等,剩下的可用于客户端socket连接的文件数就只有

1024-10=1014个左右,也就是基于Linux的程序最多允许同时1014个TCP并发连接。

(1)修改Linux系统对用户打开软限制和硬限制,如图所示:

vim /etc/security/limits.conf

添加 root soft nofile 1921

root hard nofile 1921

说明:root代表修改了root用户打开文件的数的限制,可以用“*”代表所有用户soft和hard指定要修改的软限制还是硬限制。1921指定修改的新限制值,也就是最大打开的文件数(软限制一定要小于或等于硬限制)

(2)修改 /etc/pam.d/login文件,如图所示:

添加:session required /lib/security/pam_limits.so

说明:Linux在用户登录系统后应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),

pam_limits.so模块就会从/etc/security/limits.conf文件中来读取这个这些限制值

(3)查看linux系统级最大打开文件数限制cat /proc/sys/fs/file-max,如图所示:

说明:这表示linux系统最多同时允许打开(包括所有用户打开文件数的总和)96854个文件,是linux系统级的硬限制,所有用户打开的文件数都不得超过这个数值, 一般不修改这个值,如果想修改,命令为vim /etc/rc.local。

(4)添加:echo 数值 > /proc/sys/fs/file-max,修改完重启系统,重启后执行ulimit –n查看一下,如图所示:

(5)如果重启后执行ulimit –n查看的值还是小于上面修改后的最大值,可能是用户登录脚本/etc/profile中使用ulimit –n命令,已将用户同时打开的文件数做了限制,只能在/etc/profile找到ulimit –n限制用户同时打开的最大文件数,可以删除也可以修改值,重启系统即可。

(6)上面操作可以解决高并发TCP连接处理打开文件数量的系统限制。

有时尽管解开了系统对用户同时打开文件数的限制,但仍会出现并发TCP连接数增加到一定数量时,再也无法创建新的TCP连接的现象。

2、linux网络内核对本地端口号范围有限制,例如当前系统内核限制本地端口号的范围为 1024-32768,当系统同一时间存在大量的TCP客户端连接时,由于每个TCP客户端都要占据一个唯一的本地端口号,如果TCP端口号的范围不够用,就会提示 :can't assign requested address ,这就是由于内核编译时默认设置的本地端口号范围太小。

修改:/etc/sysctl.conf

添加:net.ipv4.ip_local_port_range = 1024 65535(最大值要小于或等于65535)

执行:sysctl –p,如果没有报错,说明设置成功,显示内容包含图中的内容:

以上是单独一个进程最大同时可以打开63000多个TCP客户端连接的设置。

点击关注,第一时间了解华为云新鲜技术~

相关文章

  • 实战解读丨Linux下实现高并发socket最大连接数的配置方法

    摘要:Linux操作系统,无论是编写客户端程序还是服务端程序,在高并发TCP连接处理时,最高的并发数量都要受到系统...

  • linux系统最大TCP连接数限制

    web服务器和cache服务器,高并发下,socket最大连接数限制调整: 1、修改用户进程可打开最大文件数限制。...

  • Nginx文章集

    查看当前 nginx 连接数 Nginx优化配置,轻松搞定十万并发 LVS+KeepAlived+Nginx高可用...

  • 【ulimit】Centos 7 中的ulimit -HSn 6

    linux下用ulimit设置连接数最大值,默认是1024,在高负载下要设置为更高。 ulimit只能做临时修改,...

  • Nginx基础

    为什么要用Nginx? -跨平台、配置简单-非阻塞、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发-内...

  • docker nofile 配置说明

    Linux通过nofile配置来限制进程能够打开的文件句柄。Linux默认nofile配置为1024,在高并发场景...

  • Nginx 知识

    1.为什么要用Nginx? 跨平台、配置简单、方向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发...

  • 2019-05-15 [转] 查看apache连接数

    Linux下查看apache连接数 1、查看apache当前并发访问数: #对比httpd.conf中MaxCli...

  • 报open files too many

    linux下用ulimit设置连接数最大值,默认是1024. 在高负载下要设置为更高,但最高只能为65535. u...

  • MySQL配置优化

    一、全局配置 (1)max_connections 最大连接数。默认值是151,最多2000。如果服务器的并发连接...

网友评论

    本文标题:实战解读丨Linux下实现高并发socket最大连接数的配置方法

    本文链接:https://www.haomeiwen.com/subject/pdzkektx.html