zoukankan      html  css  js  c++  java
  • 限制连接数上涨的几个关键因素

    系统端口限制

    Linux系统端口为short类型表示,数值上限为65535。假设分配压测业务可用端口范围为1024 - 65535(1024以下系统预留),不考虑可能还运行着其它对外连接的服务,真正可用端口也就是64000左右(实际上,一般为了方便计算,一般直接设定为50000)。换言之,即在一台机器上一个IP,可用同时对外建立64000网络连接。

    若是N个可用IP,理论上 64000*N,实际上还需要满足:

    • 充足内存支持
    1. tcp接收/发送缓冲区不要设置太大,tsung默认分配32K(可以修改成16K,一般够用了)
    2. 一个粗略估算假设一个用户占用内存50k1w用户占用500M内存,假设需要100w

    100w/6w = 17IP地址 500m * 100w/1024 = 50G内存 服务器单一IP 承载100万用户1台主机+17台从机 若单机64G内存+17IP可用IP地址 就一台就能搞定

    • 为多IP的压测端分配适合的权重,以便承担更多的终端连接

    Linux系统打开文件句柄限制

    系统打开文件句柄,直接决定了可以同时打开的网络连接数量,这个需要设置大一些,否则,你可能会在tsung_controller@IP.log文件中看到error_connect_emfile类似文件句柄不够使用的警告,建议此值要大于 > N * 64000

    修改linux系统参数。vi /etc/security/limits.conf 添加

    *       soft    nofile  655350

    *       hard    nofile  655350

    *       soft    nproc  655350

    *       hard    nproc  655350

    修改以后保存,注销当前用户,重新登录,执行ulimit -a ,ok ,参数生效了:

    注:nofile是代表最大文件打开数,nproc是操作系统级别对每个用户创建的进程数的限制

    内存的影响:

    一个网络Socket连接占用不多,但上万个或数十万等就不容小觑了,设置不当会导致内存直接成为屏障。

    TCP接收、发送缓存

    Tsung默认设置的网络Socket发送接收缓冲区为16KB,一般够用了。

    [root@bogon ~]# cat /proc/sys/net/ipv4/tcp_rmem
    
    4096 87380 4194304

    此值会覆盖Linux系统设置接收、发送缓冲大小。

    粗略的默认值计算,一个网络连接发送缓冲区 + 接收缓冲区,再加上进程处理连接堆栈占用,约40K内存,为即计算方便,设定建立一个网络连接消费50K内存。

    先不考虑其它因素,若我们想要从机模拟10W个用户,那么当前可用内存至少要剩余:50K * 100000 / 1000K = 5000M = 5G内存。针对一般服务器来讲,完全可满足要求(剩下事情就是要有两个可用IP了)。

     

    服务器查看TCP连接数

    命令:

    ss  -tan|awk 'NR>1{++S[$1]}END{for (a in S) print a,S[a]}’
    

    通过上述命令可以统计出TCP连接中处于各个状态的连接数,在经过Ng代理之后需要真实的连接数需要除以2,因为Client——Nginx——Mqtt其实算是两个TCP连接。

     

  • 相关阅读:
    Retrofit源码分析
    Android异步消息机制
    崩溃bug日志总结3
    单例模式
    总结(第一段)
    mysql日期类型比较
    mysql记录(一)
    JSONObject/JSONArray的区别
    java 正则表达式(Pattern ,Matcher)的使用
    javaweb开发中的权限管理的方法
  • 原文地址:https://www.cnblogs.com/saryli/p/9821088.html
Copyright © 2011-2022 走看看