摘要: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最大连接数的配置方法的更多相关文章

  1. Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)

    linux作为服务器系统,当运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到3800左 ...

  2. Linux下解决高并发socket最大连接数限制,tcp默认1024个连接

    linux作为服务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立 ...

  3. Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  4. [转载] Linux下高并发socket最大连接数所受的各种限制

    原文: http://mp.weixin.qq.com/s?__biz=MzAwNjMxNjQzNA==&mid=207772333&idx=1&sn=cfc8aadb422f ...

  5. Linux下高并发socket最大连接数所受的各种限制

    http://blog.csdn.net/guowake/article/details/6615728 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行 ...

  6. Linux下高并发socket最大连接数

    http://soft.chinabyte.com/os/285/12349285.shtml (转载时原文内容做个修改) 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是 ...

  7. Linux下高并发socket最大连接数各种限制的调优

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  8. Linux下高并发socket最大连接数所受的各种限制(转)

    1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个 ...

  9. 教你修改Linux下高并发socket最大连接数所受的各种限制

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开 文件数量的限制(这是因为系统为 ...

随机推荐

  1. Android——对话框的全部内容。(课堂总结)

    前面的总结是写过对话框的,但是那只是冰山一角,简单的创建和使用罢了. 今天具体讲下AlertDialog. 首先对话框不需要在布局里写,在活动里new出来的. AlertDialog.Builder ...

  2. SkyWalking APM8.1.0 搭建与项目集成使用

    SkyWalking介绍 SkyWalking是什么? SkyWalking是一个可观测性分析平台和应用性能管理系统,提供分布式跟踪.服务网格遥测分析.度量聚合和可视化一体化解决方案,并支持多种开发语 ...

  3. Linux中文解决

    中文编码问题 安装中文语言包 locale -a | grep zh 查看是否有中文语言包 local 查看是否 LC_TYPE 为空 在 /etc/profile.d/ 下创建 lc_type.sh ...

  4. linux系统中SSH免密设置报错

    执行 ssh-add ~/.ssh/msi_rsa 时报下面错误 Could not open a connection to your authentication agent. 解决办法: 执行命 ...

  5. Python中ansible的使用

    #!/usr/bin/env python # -*- coding: utf8 -*- # @Author: huangmanyao from ansible import constants fr ...

  6. JavaScript基础-03

    1. 条件判断语句 若条件成立才会执行,条件不成立则语句不执行: if语句 语法一: if(条件表达式) {语句}          :true就执行,false不执行: 语法二: if(条件表达式) ...

  7. 在java中,怎样创建编写javascript的环境?

    刚开始还没有学到这一块的时候,预习的时候也是在网上搜索这一类的信息时候, 可是都是八竿子碰不到边的!在此也是呕心沥血的为读者献上最好的: 1.首先:点击空白处>右键>project: 2. ...

  8. error PRJ0003 : 生成“cmd.exe”时出错 2010-01-19 22:26

    今天用vs2005编译时代码时竟然出现了error PRJ0003 : 生成“cmd.exe”时出错这样的错误,这不是刺激我吗,我们先看msdn的解释吧. 错误消息 生成“command line”时 ...

  9. vue2和vue3的区别

    一.常用命令 vue -V 查看本地 vue 版本 二.官方文档 3.0:https://cli.vuejs.org/zh/ 三.创建文件 3.0:vue create 进入工程文件夹,创建项目. 2 ...

  10. Salesforce学习笔记之代码若干

    有几段试验性的代码因为公司要更新沙盒,删除了.在本地虽然还保存了副本,但怕以后刷新时误删,所以贴一份在这里,以便需要时拷贝. 1.用aura组件包装一个flow foo.cmp: <aura:c ...