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

2023-05-16

 linux获取TCP连接数

方法一:
[admin@zabbix ~]$ ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}'
ESTAB 535
TIME-WAIT 80
LISTEN 13

方法二:
[admin@zabbix ~]$ netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}'
TIME_WAIT 91
SYN_SENT 7
ESTABLISHED 535
LISTEN 13

方法三:
[admin@zabbix ~]$ cat /proc/net/snmp
Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates
Ip: 1 64 12503948767 0 0 0 0 0 12503948767 12822437575 0 0 0 0 0 0 0 0 0
Icmp: InMsgs InErrors InDestUnreachs InTimeExcds InParmProbs InSrcQuenchs InRedirects InEchos InEchoReps InTimestamps InTimestampReps InAddrMasks InAddrMaskReps OutMsgs OutErrors OutDestUnreachs OutTimeExcds OutParmProbs OutSrcQuenchs OutRedirects OutEchos OutEchoReps OutTimestamps OutTimestampReps OutAddrMasks OutAddrMaskReps
Icmp: 985733 389 3779 69 0 0 0 490950 490935 0 0 0 0 984433 0 2548 0 0 0 0 490935 490950 0 0 0 0
IcmpMsg: InType0 InType3 InType8 InType11 OutType0 OutType3 OutType8
IcmpMsg: 490935 3779 490950 69 490950 2548 490935
Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts
Tcp: 1 200 120000 -1 1585243925 55029885 290059 15370 535 12500488405 12818246605 731883 25103 3821760
Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors
Udp: 2546210 3436 0 2657997 0 0
UdpLite: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors
UdpLite: 0 0 0 0 0 0

注:通过CurrEstab获取tcp连接数
[admin@zabbix ~]$ cat /proc/net/snmp | grep Tcp | tail -1 | awk '{print $10}'
535

扩展:如何获取每秒新增的TCP连接呢?
通过cat /proc/net/snmp得到最近240秒内PassiveOpens的增量,除以240可以得到每秒的tcp连接增量。

详情参考我的另一篇文章:https://blog.csdn.net/m0_37814112/article/details/80774935

如果想知道cat /proc/net/snmp输出选项各个参数的意义,可以参考
http://perthcharles.github.io/2015/11/10/wiki-netstat-proc/
Linux下 查看tcp连接数及状态
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    LISTEN: 侦听来自远方的TCP端口的连接请求
    SYN-SENT: 再发送连接请求后等待匹配的连接请求
    SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
    ESTABLISHED: 代表一个打开的连接
    FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
    FIN-WAIT-2: 从远程TCP等待连接中断请求
    CLOSE-WAIT: 等待从本地用户发来的连接中断请求
    CLOSING: 等待远程TCP对连接中断的确认
    LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
    TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
    CLOSED: 没有任何连接状态
 

linux作为服务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况

  本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到1000左右时,再也不能建立tcp连接,最总上网搜索,linux系统默认ulimit为1024个访问 用户最多可开启的程序数目。一般一个端口的最高连接为2的16次方65535

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

  • 第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
  •     session required /lib/security/pam_limits.so

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

  • 第三步,修改/etc/sysctl.conf文件,在文件中(清楚文件原始内容)添加如下行(修改网络内核对TCP连接的有关限制):
  • 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_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

  • 第四步,执行如下命令(使上述设置生效):
  • /sbin/sysctl -p /etc/sysctl.conf
    
    /sbin/sysctl -w net.ipv4.route.flush=1

  • 第五步,执行如下命令(linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的):

echo ulimit -HSn 65536 >> /etc/rc.local

 echo ulimit -HSn 65536 >>/root/.bash_profile

 ulimit -HSn 65536
  • 第六步,重启机器。

通过修改,tcp可以达到20000个连接完全没有问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下解决高并发socket最大连接数限制,tcp默认1024个连接 的相关文章

  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • Linux 上的 Pervasive ODBC 错误 [01000][unixODBC][驱动程序管理器]无法打开 lib '/usr/local/psql/lib/odbcci.so':找不到文件

    我正在尝试让 Pervasive v10 客户端 ODBC 在 Centos 6 上运行 据我所知 没有 64 位 ODBC 客户端 因此我必须使用 32 位客户端 我终于成功安装了它 但尝试使用时出现以下错误 isql v mydsn 0
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • Mac OS X 上的 /proc/self/cmdline / GetCommandLine 等效项是什么?

    如何在不使用 argc argv 的情况下访问 Mac OS X 上的命令行 在 Linux 上 我会简单地阅读 proc self cmdline or use GetCommandLine在 Windows 上 但我找不到 Mac OS
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 如何让 Node.js 作为后台进程运行并且永不死掉?

    我通过 putty SSH 连接到 linux 服务器 我尝试将其作为后台进程运行 如下所示 node server js 然而 2 5 小时后 终端变得不活动 进程终止 即使终端断开连接 我是否也可以使进程保持活动状态 Edit 1 事实
  • 可以访问每个套接字的 TCP 统计数据/信息吗? (C/C++)

    我需要一些信息 例如我创建的特定 TCP 套接字发生的重新发送包 数据包丢失的数量 有人知道如何直接从我的 C C 程序访问或请求此类信息吗 也许是 Linux 特有的东西 或者我是否需要 作为解决方法 捕获和分析我自己的流量 提前致谢 通

随机推荐

  • torch中Tensor和numpy相互转化

    Numpy转为Tensor 使用torch from numpy 如 import torch B 61 torch from numpy A Tensor转为Numpy 使用data numpy 如 import torch C 61 B
  • LXD/LXC raw.idmap 使用方法和作用

    官方文档 xff1a https github com lxc lxd blob master doc userns idmap md 设置和取消设置 raw idmap xff0c 都需要重启容器才能应用 并且在重启容器时 xff0c 会
  • LXD/LXC 奇怪的重启断网问题解决。

    2023 4 10 日更新 搞 Debian 系统的 LXD 时 xff0c 发现了 Debian 对 lxd 的已知问题跟踪 似乎是 Docker 的原因 已知问题 跟踪链接 xff1a https wiki debian org LXD
  • SSH连接问题:连不上&不能免密登录

    一 连不上 ssh username 64 ip 报错 xff1a ssh connect to host lt ip4地址 gt port 22 Connection timed out 首先排查 xff0c 排查步骤 xff1a 1 p
  • Java经典面试题总结

    本文分为十九个模块 xff0c 分别是 xff1a Java 基础 容器 多线程 反射 对象拷贝 Java Web 异常 网络 设计模式 Spring Spring MVC Spring Boot Spring Cloud Hibernat
  • 单例模式常见场景

    单例模式 Singleton 也叫单态模式 xff0c 是设计模式中最为简单的一种模式 xff0c 甚至有些模式大师都不称其为模式 xff0c 称其为一种实现技巧 xff0c 因为设计模式讲究对象之间的关系的抽象 xff0c 而单例模式只有
  • Java 基础系列(十) --- 什么是向上转型和向下转型

    1 向上转型 1 1 为何叫向上转型 在面向对象程序设计中 针对一些复杂的场景 我们通常画一个UML图来表示各个类之间的关系 通常父类画在子类的上方 因此我们就称之为 34 向上转型 34 表示往父类的方向转 向上转型发生的时机 直接赋值
  • Python函数式编程——map()、reduce()

    原文链接 提起map和reduce想必大家并不陌生 xff0c Google公司2003年提出了一个名为MapReduce的编程模型 1 xff0c 用于处理大规模海量数据 xff0c 并在之后广泛的应用于Google的各项应用中 xff0
  • [Linux] CentOS8 升级

    A CentOS8 0升级到8 5的方法 由于CentOS8已经仅仅维护Stream xff0c 8 Linux都已经不在维护 对应仓库都清空了 不过有时候 xff0c 我们依然需要安装对应小版本 xff0c 比如8 5 这里摸索了一个更新
  • word 插入公式附加右侧编号方法

    主要添加编号的方法就是在公式后面 xff0c 添加 编号 xff0c 输入光标在公式的最后 xff0c 然后回车 效果如下 xff1a 需要注意的有两点 xff1a 1 必须要保证 不属于公式内部 xff08 如果不清楚如何保证 键属不属于
  • iscsiadm命令用法

    启动iscsi守护进程 span class token function service span iscsi start 发现目标 iscsiadm m discovery t sendtargets p 192 168 1 1 326
  • centOS7关闭防火墙

    查看防火墙状态 xff1a systemctl status firewalld service 如图 绿的running表示防火墙开启 执行关闭命令 xff1a systemctl stop firewalld service 再次执行查
  • Linux 包管理基础:apt、yum、dnf 和 pkg常用命令

    介绍 大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件 软件通常都是存放在存储库中 xff0c 并通过包的形式进行分发 处理包的工作被称为包管理 包提供了操作系统的基本组件 xff0c 以及共享的库 应用程序 服
  • opensd开源啦 !这套自动化部署OpenStack工具你值得拥有

    2022年8月 xff0c 经openEuler开源社区技术委员会审议通过 xff0c 联通数科正式将opensd开源至openEuler开源社区 opensd是联通数科为解决OpenStack企业级部署的复杂性 xff0c 针对自身Ope
  • 边缘计算的解决方案大集合

    自今年2月的巴塞罗那世界移动通信大会召开以来 xff0c 边缘计算无疑是C位出道 xff0c 爆发释放在人们的视野中 xff0c 成为今年业界最热门的领域之一 顺着5G的东风 xff0c 边缘计算的诞生成为历史必然 xff0c 整个行业都在
  • 计网(笔记版)---外部网络路由协议之BGP协议

  • js中?. 、?? 、??=的用法及含义

    1 可选链运算符 是不是经常遇到这样的错误 TypeError Cannot read properties of null reading 39 xxx 39 引入可选链就是为了解决这个问题 const person 61 id 1 na
  • LXC与Docker介绍

    文章目录 LXCLUX是什么LXC常用命令LXC的使用 Docker容器虚拟化和传统虚拟化的区别Linux NamespacesCGroupsdoeker基本概念docker容器编排 LXC LUX是什么 LXC xff08 LinuX C
  • 树莓派使用CLASH的代理安装软件

    为什么要使用代理 github系列域名不能访问 xff0c curl一键安装用不了 打开CLASH允许局域网功能 树莓派终端登陆 方法一 xff1a 1 编辑 etc profile文件 sudo nano etc profile 2 在最
  • Linux下解决高并发socket最大连接数限制,tcp默认1024个连接

    linux获取TCP连接数 方法一 xff1a admin 64 zabbix ss ant awk 39 NR gt 1 a 1 43 43 END for b in a print b a b 39 ESTAB 535 TIME WAI