首页 > 系统相关 >物联网架构实例—解决Linux(Ubuntu)服务器最大TCP连接数限制

物联网架构实例—解决Linux(Ubuntu)服务器最大TCP连接数限制

时间:2023-12-19 17:11:57浏览次数:40  
标签:conf limits tcp TCP etc ipv4 连接数 Linux security

1.前言:
在对物联网网关进行压测的时候,发现在腾讯云部署网关程序,设备接入数量只能达到4000多个长连接,之后就再也无法接入终端了。

之前在阿里云部署的时候明明可以到达2万左右,而且腾讯云的这个服务器比阿里云的硬件配置还要高上不少,不至于那么差,随后查阅大量资料终于完美解决。

2.解决步骤:
2.1.修改/etc/security/limits.conf文件
执行脚本:

vim /etc/security/limits.conf
在文件中添加如下行(*指代系统用户名),修改Linux系统对用户的关于打开文件数的软限制和硬限制:

*soft nofile 65535
*hard nofile 65535
2.2.修改/etc/pam.d/login文件
执行脚本:

vim /etc/pam.d/login
在文件中添加如下行:

session required /lib/security/pam_limits.so
如果是64bit系统的话,应该为

session required /lib64/security/pam_limits.so
2.3.修改/etc/sysctl.conf文件
执行脚本

vim /etc/sysctl.conf
在文件中添加如下行(修改网络内核对TCP连接的有关限制):

net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_tw_buckets=55000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
fs.file-max=655350
2.4.执行行如下命令(使上述设置生效)
/sbin/sysctl -p /etc/sysctl.conf
/sbin/sysctl -w net.ipv4.route.flush=1
2.5.执行如下命令(linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发)
echo ulimit -HSn 65536 >> /etc/rc.local
echo ulimit -HSn 65536 >>/root/.bash_profile
ulimit -HSn 65536
2.6.重启电脑
执行命令:

reboot
原本以为上述操作执行万后,连接数就可以上去了,最后发现竟然没有效果,是因为有一处程序的限制没有打开,下面就着重说一下这里,这个也是让我纠结了2天的才解决的。

2.7.修改程序限制
打开我的程序日志,发现终端连接数只要一到4000多以上就会频发出现一个错误,java.io.IOException:Too many open files,所以明显程序的限制没有生效。

 

 

既然找到了问题,就朝着这个方向查询资料,为啥Linux的配置都已经生效,味道部署的程序不生效?

找到程序对应的PID,因为我这边是Java程序,所以使用命令:

ps -ef|grep -i java

 


找到自己受限制的程序PID然后使用cat 命令查看程序的限制,执行命令:

cat /proc/1484/limits #1484是我那个网关程序的PID

 


查了大量资料后才知道:在Centos7 与 ubuntu 系统中,/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。

如果是登录用户,通过/etc/security/limits.conf与/etc/security/limits.d下的文件设置即可。

但是对于systemd service的资源设置(我们部署的运行程序则属于此项),则需修改全局配置:及下面两个配置文件:

配置文件1:

vim /etc/systemd/system.conf

 


配置文件2:

vim /etc/systemd/user.conf

 


在这两个配置内增加下面两行:

DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
其中:system.conf是系统实例使用的;user.conf是用户实例使用的。

修改之后重启系统,可以使用脚本(reboot),但是有的Shell工具貌似对此脚本有限制,我这边使用的是XShell进行操作的,是可以正常执行reboot脚本进行服务器的重启,然后执行下面的命令查看修改后的限制是否正常。

cat /proc/1513/limits #1513为程序的PID

 


最终搞明白了Linux服务器对连接数的限制原理,对于Linux服务器而已所有的TCP链路都是打开文件句柄 ,所以提升TCP连接数就是对开放对文件句柄的限制。

 

 

3.顺利进行了压力测试
通过上述操作,目前我使用单台4核8G服务器,连接数量接入到25000个,单机并发处理能力(含存储到数据库)在5500个包/秒。

 


————————————————
版权声明:本文为CSDN博主「大鱼>」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_17486399/article/details/128347986

标签:conf,limits,tcp,TCP,etc,ipv4,连接数,Linux,security
From: https://www.cnblogs.com/telwanggs/p/17914215.html

相关文章

  • linux root密码重置过程
    在GRUB引导菜单中,使用向下箭头键选择以"CentOSLinux"开头的行,然后按下"e"键进入编辑模式按e键盘出现下面的界面(可以下拉),需要编辑修改:ro改为rwinit=/sysroot/bin/sh按Ctrl+x,使用单用户模式启动(进入救援模式使用 chroot /sysroot命令访问系统chroot/sysrootpasswd确认......
  • linux 挂载数据盘
    输入命令fdisk-l查看硬盘,找到要挂载的数据盘,此处是/dev/vdb即红框内的image.png第一次使用数据盘,挂载之前用命令mkfs.xfs/dev/vdb格式化数据盘,此处用xfs格式,需要换其他文件系统格式的话(如ext4等),改成对应格式即可,如用ext4,则是mkfs.ext4/dev/vdb。格式化时请将盘符改成你服务器......
  • 在Linux上安装Anaconda
    要在Linux上安装Anaconda,请按照以下步骤进行操作:1、首先,前往Anaconda官方网站(https://www.anaconda.com)下载适用于Linux的Anaconda安装程序。根据您的操作系统选择正确的版本(Python 2.x或Python3.x)和适用于您的系统架构(32位或64位)的安装程序。2、打开终端或命令行界面。3、在......
  • C语言实现TCP CS模型代码,客户端服务器
    服务端将接受客户端发送的数据并将其转换成大写形式,然后再发送给客户端,客户端将发送一个字符串给服务器,并显示来自服务器的响应内容。服务器点击查看代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include<netinet/in.h>#......
  • 视频监控汇聚平台/算法中台/视频集中存储EasyCVR在Linux中开启硬件探测配置后,无法启动
    智能视频监控/视频云存储/集中存储/视频汇聚平台EasyCVR具备视频融合汇聚能力,作为安防视频监控综合管理平台,它支持多协议接入、多格式视频流分发,视频监控综合管理平台EasyCVR支持海量视频汇聚管理,可应用在多样化的场景上,包括城市网统管”建设、智慧工地风险预警、智慧工厂安全生产......
  • 11个linux命令
    1.sudo!!命令没有特定输入sudo命令而运行,将给出没有权限的错误。那么,你不需要重写整个命令,仅仅输入’!!‘就可以抓取最后的命令。$ apt-get updateE: Could not openlock file /var/lib/apt/lists/lock - open (13: Permission denied)E: Unable to lock direct......
  • Linux系统下kafka集群安装部署
    Linux系统下kafka集群安装部署 Linux系统下kafka集群安装部署|系统运维(osyunwei.com)2023年05月01日 ⁄ kafka ⁄ 暂无评论 ⁄被围观1,254次+Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。操作系统:CentOS-7.xkafka版本:kafka_2.12-3......
  • Linux系统扩容数据盘时,如何扩展未分区磁盘文件系统
    1.操作场景当数据盘没有创建分区,只在设备上创建了文件系统,您可以参考本节直接扩展文件系统。[root@ecs-test~]#df-THFilesystemTypeSizeUsedAvailUse%Mountedon/dev/vda1ext443G1.9G39G5%/tmpfstmpfs2.0G02......
  • archlinux xfce 修改用户主目录名称
    操作有风险,修改用户主目录名称后一些链接了旧主目录的的链接可能仍未修改。导致链接用不了,需要手动指定链接1.删除指定用户保存的会话,未删除应该会导致修改用户主目录名称后进不去会话2.切换到其它用户桌面3.使用命令usermod-d-m/home/directory_nameuser_name-d:这个......
  • linux 下安装.net 8环境
    1.从官网下载对应的运行时环境压缩包。下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/8.02.安装SDK下载完成后,打开终端并运行以下命令以提取SDK并使这些命令在终端上可用。TerminalCopymkdir-p$HOME/dotnet&&tarzxfdotnet-sdk-8.0.100-linux-x6......