作者:Eddy  历史版本:1  最后编辑:Eddy  更新时间:2024-06-19 18:08

编写版本:v3.3.7
适用版本:所有版本

操作系统优化

  1. linux系统修改open files参数

    1. ulimit -a查看open files的值是多少
    2. vi /etc/security/limits.conf
      添加以下内容
       * soft nofile 65535
       * hard nofile 524288
    3. 重新登陆会话即可使其生效
  2. linux系统内核优化CentOS为例完整

    vi /etc/sysctl.conf

      # 其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
      net.ipv4.ip_forward = 0 #如何值为0出现ip无法连接,则改为1
      net.ipv4.conf.all.send_redirects = 0
      net.ipv4.conf.default.send_redirects = 0
      # 确保无人能修改路由表
      net.ipv4.conf.all.accept_redirects = 0
      net.ipv4.conf.default.accept_redirects = 0
      net.ipv4.conf.all.secure_redirects = 0
      net.ipv4.conf.default.secure_redirects = 0
      #处理无源路由的包
      net.ipv4.conf.all.accept_source_route = 0
      net.ipv4.conf.default.accept_source_route = 0
      # 启用源路由核查功能/反向路径过滤
      net.ipv4.conf.all.rp_filter = 1
      net.ipv4.conf.default.rp_filter = 1
      # 关闭组合键了解系统运行状态功能
      kernel.sysrq = 0
      # 控制core文件的文件名是否添加pid作为扩展
      kernel.core_uses_pid = 1
      #开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
      net.ipv4.tcp_syncookies = 1
      #每个消息队列的大小(单位:字节)限制
      kernel.msgmnb = 65536
      #整个系统最大消息队列数量限制
      kernel.msgmax = 65536
      #单个共享内存段的大小(单位:字节)限制,计算公式64G*1024*1024*1024(字节)
      kernel.shmmax = 68719476736
      #所有内存大小(单位:页,1页 = 4Kb),计算公式16G*1024*1024*1024/4KB(页)
      kernel.shmall = 4294967296
      #timewait的数量,默认是180000
      net.ipv4.tcp_max_tw_buckets = 6000
      #开启有选择的应答
      net.ipv4.tcp_sack = 1
      #支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
      net.ipv4.tcp_window_scaling = 1
      #TCP读buffer
      net.ipv4.tcp_rmem = 4096        87380   4194304
      #TCP写buffer
      net.ipv4.tcp_wmem = 4096        16384   4194304
      #为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
      net.core.wmem_default = 8388608
      #为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
      net.core.wmem_max = 16777216
      #为TCP socket预留用于接收缓冲的内存默认值(单位:字节)  
      net.core.rmem_default = 8388608
      #为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
      net.core.rmem_max = 16777216
      #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
      net.core.netdev_max_backlog = 262144
      #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
      net.core.somaxconn = 262144
      #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
      net.ipv4.tcp_max_orphans = 3276800
      #记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
      net.ipv4.tcp_max_syn_backlog = 262144
      #时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
      net.ipv4.tcp_timestamps = 0
      #为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
      net.ipv4.tcp_synack_retries = 1
      #在内核放弃建立连接之前发送SYN包的数量
      net.ipv4.tcp_syn_retries = 1
      #开启TCP连接中time_wait sockets的快速回收
      net.ipv4.tcp_tw_recycle = 1
      #开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
      net.ipv4.tcp_tw_reuse = 1
      #1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
      net.ipv4.tcp_mem = 94500000 915000000 927000000
      #如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
      net.ipv4.tcp_fin_timeout = 1
      #表示当keepalive起用的时候,TCP发送keepalive消息的频度(单位:秒)
      net.ipv4.tcp_keepalive_time = 30
      #对外连接端口范围
      net.ipv4.ip_local_port_range = 1024    65000
      #表示文件句柄的最大数量
      fs.file-max = 102400
      # 允许更多的PIDs (减少滚动翻转问题); may break some programs 32768
      kernel.pid_max = 1000000
      # 最大监听文件数
      fs.inotify.max_user_watches = 524288
      #修改防火墙表大小,默认65536
      net.netfilter.nf_conntrack_max = 655350
      net.netfilter.nf_conntrack_tcp_timeout_established = 1200

    执行命令 sysctl -p 使其生效