关闭

优化Linux 的内核参数来提高服务器并发处理能力

发表于:2013-3-07 09:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  PS:在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题。要提高Linux 系统下的负载能力,可以使用nginx 等原生并发处理能力就很强的web 服务器,如果使用Apache 的可以启用其Worker 模式,来提高其并发处理能力。除此之外,在考虑节省成本的情况下,可以修改Linux 的内核相关TCP 参数,来最大的提高服务器性能。

  当然,最基础的提高负载问题,还是升级服务器硬件了,这是最根本的。

  Linux 系统下,TCP 连接断开后,会以TIME_WAIT 状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT 状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP 的内核参数,来及时将TIME_WAIT 状态的端口清理掉。

  本文介绍的方法只对拥有大量TIME_WAIT 状态的连接导致系统资源消耗有效,如果不是这种情况下,效果可能不明显。可以使用netstat 命令去查TIME_WAIT 状态的连接状态,输入下面的组合命令,查看当前TCP 连接的状态和对应的连接数量:

  netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

  这个命令会输出类似下面的结果:

  LAST_ACK 16
  SYN_RECV 348
  ESTABLISHED 70
  FIN_WAIT1 229
  FIN_WAIT2 30
  CLOSING 33
  TIME_WAIT 18098

  我们只用关心TIME_WAIT 的个数,在这里可以看到,有18000多个TIME_WAIT,这样就占用了18000多个端口。要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新连接。这种情况下,我们就有必要调整下Linux 的TCP 内核参数,让系统更快的释放TIME_WAIT 连接。

  用vim 打开配置文件:vim /etc/sysctl.conf

  在这个文件中,加入下面的几行内容:

  net.ipv4.tcp_syncookies = 1
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.tcp_fin_timeout = 30

  输入下面的命令,让内核参数生效:

  sysctl -p

  简单的说明上面的参数的含义:

  net.ipv4.tcp_syncookies = 1

  #表示开启SYN Cookies。当出现SYN 等待队列溢出时,启用cookies 来处理,可防范少量SYN 攻击,默认为0,表示关闭;

  net.ipv4.tcp_tw_reuse = 1

  #表示开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接,默认为0,表示关闭;

  net.ipv4.tcp_tw_recycle = 1

  #表示开启TCP 连接中TIME-WAIT sockets 的快速回收,默认为0,表示关闭;

  net.ipv4.tcp_fin_timeout

  #修改系統默认的TIMEOUT 时间。

  在经过这样的调整之后,除了会进一步提升服务器的负载能力之外,还能够防御小流量程度的DoS、CC 和SYN 攻击。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号