zoukankan      html  css  js  c++  java
  • 关于centos压测的问题

    修改文件句柄数

    临时修改

    ulimit -n和-u可以查看linux的最大进程数和最大文件打开数。
    为了优化linux性能,可能需要修改这个最大值。
    临时修改的话ulimit -n 204800就可以了,重启后失效。

    被压测服务器需要保持100W长连接,客户和服务器端是通过socket通讯的,每个连接需要建立一个socket,程序需要保持100W长连接就需要单个程序能打开100W个文件句柄

    //查看系统默认的值
    ulimit -n
    //设置最大打开文件数
    ulimit -n 1040000
    这里设置的要超过100W,程序除了有100W连接还有其它资源连接(数据库、资源等连接),这里设置为 104W

    永久修改

    centOS 7.6 上述设置不生效,需要手动修改配置文件
    vim /etc/security/limits.conf
    这里需要把硬限制和软限制、
    root用户和所有用户都设置为 1040000
    core 是限制内核文件的大小,这里设置为 unlimited

    vim /etc/security/limits.conf
    //在文件末尾添加如下行
    root soft nofile 1040000
    root hard nofile 1040000
    
    root soft nofile 1040000
    root hard nproc 1040000
    
    root soft core unlimited
    root hard core unlimited
    
    * soft nofile 1040000
    * hard nofile 1040000
    
    * soft nofile 1040000
    * hard nproc 1040000
    
    * soft core unlimited
    * hard core unlimited
    

    /proc/sys/fs/file-max 表示系统级别的能够打开的文件句柄的数量,不能小于limits中设置的值

    如果file-max的值小于limits设置的值会导致系统重启以后无法登录
    //file-max 设置的值参考
    cat /proc/sys/fs/file-max
    12553500
    修改以后重启服务器,ulimit -n 查看配置是否生效

    客户端配置Cannot assign requested address

    如果客户端提示“Cannot assign requested address”
    是由于linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放。

    解决方法1

    --调低time_wait状态端口等待时间:

    1. 调低端口释放后的等待时间,默认为60s,修改为15~30s
      sysctl -w net.ipv4.tcp_fin_timeout=30
    2. 修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue,
      默认为0,修改为1,释放TIME_WAIT端口给新连接使用
      sysctl -w net.ipv4.tcp_timestamps=1
    3. 修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1
      sysctl -w net.ipv4.tcp_tw_recycle=1

    解决办法2

    增加可用端口:
    由于linux端口的范围是 0~65535(2^16-1)这个和操作系统无关,不管linux是32位的还是64位的

    这个数字是由于tcp协议决定的,tcp协议头部表示端口只有16位,所以最大值只有65535(如果每台机器多几个虚拟ip就能突破这个限制)

    1024以下是系统保留端口,所以能使用的1024到65535

    如果需要100W长连接,每台机器有 65535-1024 个端口, 100W / (65535-1024) ≈ 15.5,所以这里需要16台服务器

    vim /etc/sysctl.conf 在文件末尾添加
    net.ipv4.ip_local_port_range = 1024 65000
    net.ipv4.tcp_mem = 786432 2097152 3145728
    net.ipv4.tcp_rmem = 4096 4096 16777216
    net.ipv4.tcp_wmem = 4096 4096 16777216
    sysctl -p 修改配置以后使得配置生效命令
    

    配置解释:

    ip_local_port_range 表示TCP/UDP协议允许使用的本地端口号 范围:1024~65000
    tcp_mem 确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP可以增大这些值(注意,其单位是内存页而不是字节)
    tcp_rmem 为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数;第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)。
    tcp_wmem 为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数;第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)。

  • 相关阅读:
    解构赋值好处
    react中给state赋予初始值(使用dva)
    popover/ToolTip设置在root标签外面,如何设置样式-antd
    判断对象为空的情况
    HTML、XHTML、XML和HTML5之间的联系与区别
    innerHTML、innerText、outerHTML和value的区别
    JS面向对象经典题目(一)
    js中apply、call和bind的区别
    react的TodoList增删改
    JS原生addClass、removeClass实现
  • 原文地址:https://www.cnblogs.com/werben/p/14415880.html
Copyright © 2011-2022 走看看