CentOS Linux上的高TCP重置和数据包丢弃计数

我有一个小型服务器场(HP Proliant和IBM x,Broadcom公司的NetXtreme II BCM5 NIC)在CentOS 6上运行Apache 2.2.15,位于Cisco ACE负载均衡器的后面,服务于一个基于PHP / JS的门户网站。 这个农场每天收到大量的请求(它服务于一个小国家)试图访问一个启动页面(从那里,到索引页面)

我一直在努力解决以下问题:

启动kallsyms db dropwatch> start启用监视…激活内核监视。 在tcp_v4_md5_hash_skb + 248(0xffffffff81471b11)下降56次(0xffffffff81471b11)在tcp_v4_md5_hash_skb上下降56次(0xffffffff81471b11)在tcp_v4_md5_hash_skb上丢弃56次(0xffffffff81471b11)在tcp_v4_md5_hash_skb上丢弃56次(0xffffffff81471b11) 0xffffffff8149fa08)在tcp_rcv_established + 926(0xffffffff814981b6 29滴)在tcp_v4_reqsk_destructor + FA(0xffffffff814a104a 4滴)51滴在tcp_v4_md5_hash_skb + 248(0xffffffff8149fa08)在tcp_rcv_established + 926(0xffffffff814981b6 32滴)在tcp_v4_reqsk_destructor + FA(0xffffffff814a104a 2滴)1滴,在ip_rcv_finish + 199(0xffffffff8147ea49)1滴,在tcp_v4_destroy_sock + 115(0xffffffff814a0cf5)在tcp_v4_reqsk_destructor + FA(0xffffffff814a104a)1滴,在tcp_rcv_established + 926(0xffffffff814981b6)22滴在tcp_v4_md5_hash_skb 36滴+ 248(0xffffffff8149fa08)2滴在tcp_v4_reqsk_destructor + FA(0xffffffff814a104a )在tcp_v4_md5_hash_skb + 248(0xffffffff8149fa08)29下降49 在tcp_rcv_established + 926(0xffffffff814981b6)处下降26在tcp_rcv_established处下降2626(0xffffffff814981b6)

我一直听从RH( 红帽企业Linuxnetworking性能调整指南 )的build议,即使我没有看到我的服务器中描述的一些症状。 简而言之:

  • 我已经将NIC环形缓冲区增加到了最大值。
  • 我已经调整(增加或改变)了几个内核参数(tcp_syncookies,netdev_budget,tcp_timestamps,tcp_window_scaling,tcp_rmem,dev_weight,tcp_tw_reuse …)
  • 我已经根据从Web提取的几个“Apache优化指南”修改了Apacheconfiguration(甚至在Apache统计中仍然有空闲的工作人员)
  • 我已经停止/禁用任何不需要的系统服务/守护进程(基本上所有剩下的就是sshd,httpd和snmpd)

以上所有都没有运气。

所有网卡的速度:1000Mb / s,CPU和磁盘使用率都很低, netstatethtool都不显示错误。

任何想法还有什么可以做的?

TCP重置是TCP连接的即时closures。 这允许为上一个连接分配的资源被释放并提供给系统。

RST代的原因

确认,重置

  1. 发送回应一个Syn。 为了响应Syn帧发送的Ack Reset被发送以确认接收到帧,但是接着让客户知道服务器不能允许该端口上的连接。 在确认的原因中,重置是:

    一个。 正在连接的节点不侦听客户端节点试图连接的端口。

    湾 有一些原因,服务器节点无法完成该端口上的连接。 例如,服务器资源不足,因此无法分配所需的资源以允许连接。

RST

  1. 如果连接处于任何非同步状态(LISTEN,SYN-SENT,SYN-RECEIVED),并且传入段确认尚未发送的内容(段带有不可接受的ACK),则发送复位。

  2. 下一次重置是在networking帧发送六次(这将是原始帧加上帧的五次重传)时发生的TCP重置,没有响应。 结果,发送节点重置连接。

和你一样,尝试使用各种内核调整参数,尝试使用内核的tcp cookies选项

启用TCP SYN cookie保护

 Edit the file /etc/sysctl.conf, run: # vi /etc/sysctl.conf Append the following entry: net.ipv4.tcp_syncookies = 1 Save and close the file. To reload the change, type: # sysctl -p 

解决scheme只能通过分析您的日志,IPtables也可以帮助