xinjiang 发表于 2018-11-23 13:49:11

解决WEB(apache)服务器time_wait过高的性能优化过程

  目录
  1.网站的硬件环境
  2.修改Httpd.conf
  3.修改sysctl.conf文件
  一、网站环境LAMP硬件环境
  # dmidecode -s processor-version
  Intel(R) Xeon(R) CPU E3-1270 V2 @ 3.50GHz
  四核八线程
  内存32G
  # free -m
  total       used       free   shared    buffers   cached
  Mem:         32080      14406      17674          0      189       1905
  -/+ buffers/cache:      12310      19769
  Swap:         1023          0       1023
  硬盘为SSD raid10 大小 256G
  问题环境如下time_wait 9K多,而且一直很稳定,不轮是高峰期,还是平时。都一直停在9K多
  #netstat -n |awk '/^tcp/{++S[$NF]}END{for (i in S ) print i,S}'
  TIME_WAIT 9142
  FIN_WAIT1 80
  FIN_WAIT2 19
  ESTABLISHED 89
  SYN_RECV 88
  CLOSING 10
  LAST_ACK 3
  下面是一步一步的配置
  二、修改Httpd.conf文件
  1)谷歌了一些配置
  参考了下,然后查看了下服务器现在的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
  然后执行 /sbin/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 = 30修改系?默认的 TIMEOUT 时间
  这些参数跟原来系统上现有的参数差不多,应该也是从网上cp下来的
  重新sysctl -p 了下,发现没什么效果。
  2)看了下后端的apache配置参数
  # apache conf conf/httpd-wdl.conf
  # Created by 51cto.com
  # Last Updated 2010.06.01
  Timeout 10
  KeepAlive Off
  MaxKeepAliveRequests 512
  KeepAliveTimeout 5
  UseCanonicalName Off
  ServerTokens Prod
  ServerSignature Off
  HostnameLookups Off
  TraceEnable off
  AddType application/x-httpd-php .php
  DirectoryIndex index.html index.php index.htm
  这是原来的配置,
  下面是修改后的配置
  Timeout 10   与客户端连接超时的时间,这个暂时没改变
  KeepAlive On 这个给关闭了,在HTTP1.1中,一次连接可以多次传输,使的一次连接中可以传递多个HTTP请求,然后我给开启了
  MaxKeepAliveRequests 100 设置一次连接内,可以进行多少次请求,原来是512 修改了 100
  KeepAliveTimeout 15 如果服务器已经完成了一次请求,多长时间一直没有接受到下一次请求就会断开连接,这个设置为了15
  UseCanonicalName Off
  ServerTokens Prod
  ServerSignature Off
  HostnameLookups Off
  TraceEnable off
  AddType application/x-httpd-php .php
  DirectoryIndex index.html index.php index.htm
  修改完这几个参数后然后apachectl graceful了下,有了一点效果
  # netstat -n |awk '/^tcp/{++S[$NF]}END{for (i in S ) print i,S}'
  TIME_WAIT 7594
  FIN_WAIT1 84
  FIN_WAIT2 55
  ESTABLISHED 848
  SYN_RECV 21
  CLOSING 2
  LAST_ACK 12
  # netstat -n |awk '/^tcp/{++S[$NF]}END{for (i in S ) print i,S}'
  TIME_WAIT 3659
  FIN_WAIT1 33
  FIN_WAIT2 101
  ESTABLISHED 754
  SYN_RECV 23
  CLOSING 3
  LAST_ACK 8
  经过上面的修改后,有一些改变,time_wait已经降到了 3000多
  三、老大帮忙又修改了几个参数sysctl.conf
  后面老大又给了两条建议,修改了下
  net.ipv4.tcp_keepalive_time = 120   改成了30保持连接的时间,由120改到了30
  net.ipv4.tcp_max_tw_buckets = 10000改成100 这个是设置服务器同时保持的time_wait的数目
  重新设置下Ulimit参数
  cat >>/etc/security/limits.conf
页: [1]
查看完整版本: 解决WEB(apache)服务器time_wait过高的性能优化过程