iptables导致数据包过多时连接失败

  前几天做服务器压力测试,本地10个线程不停的去向服务器建立连接,然后请求数据,然后连接再关闭,程序每运行几万次之后就会发现客户端程序没办法connect服务器,connect超时。

  一开始怀疑是自己服务器的处理有问题,导致socket数过多没办法创建新的连接,现将系统中用户可以打开的最大文件数调成10w,继续进行压力测试,发现问题依然存在。

  经过一些时间的检查之后,确定应该不是自己服务本身的问题,这时候想将iptables关闭试试,iptables里面是没有配置连接数限制的。

  在关闭iptables时之后,发现问题确实没有了,不过还是不知道是什么原因导致的。不过已经可以确定是和iptables相关的了。

  这时候看来一下iptables的日志(/var/log/message)中有很多:

  Sep 3 14:34:07 xxx kernel: nf_conntrack: table full, dropping packet.
  Sep 3 14:34:08 xxx kernel: nf_conntrack: table full, dropping packet.
  Sep 3 14:34:15 xxx kernel: nf_conntrack: table full, dropping packet.
  这种类似的日志,网上搜索到的解释是内核处理的连接数达到上限

  [[email protected] /]# echo 65535000 > /proc/sys/net/netfilter/nf_conntrack_max 

  [[email protected] /]# echo 10800 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

  修改上限之后,重启iptables,然后再次压力测试,发现可以正常工作了

  有资深的运维人士认为这种方法存在缺陷,会导致系统消耗增加,治标不治本,建议直接关掉iptables,链接:http://jaseywang.me/2012/08/16/%E8%A7%A3%E5%86%B3-nf_conntrack-table-full-dropping-packet-%E7%9A%84%E5%87%A0%E7%A7%8D%E6%80%9D%E8%B7%AF/

时间: 2024-07-31 01:46:06

iptables导致数据包过多时连接失败的相关文章

通过iptables 修改数据包TTL,来隐藏traceroute 时的路由跳数

原理 程序利用增加存活时间(TTL)值来实现其功能的.每当数据包经过一个路由器,其存活时间就会减1.当其存活时间是0时,主机便取消数据包,并发送一个ICMP TTL数据包给原数据包的发出者. 程序发出的首3个数据包TTL值是1,之后3个是2,如此类推,它便得到一连串数据包路径.注意IP不保证每个数据包走的路径都一样. 实现 主叫方首先发出 TTL=1 的 UDP 数据包,第一个路由器将 TTL 减1得0后就不再继续转发此数据包,而是返回一个 ICMP 超时报文,主叫方从超时报文中即可提取出数据包

redhat6.4 数据包无法到达

由于redhat在初始化的时候,防火墙设置为icmp-host-prohibited,导致数据包无法到达. 具体iptables(所在目录/etc/sysconfig)如下: # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:

《WireShark数据包分析实战》二、让网络不再卡

TCP的错误恢复我是我们定位.诊断.并最终修复网络高延迟的最好工具. 1.TCP重传 重传数据包是TCP最基本的错误恢复特性之一,它被设计用来对付数据包丢失. 数据包丢失可能有很多原因,包括出故障的应用程序.流量负载沉重的路由器,或者临时性的服务中断.数据包层次上的移动速度非常快,而且数据包丢失通常是暂时的,因此TCP能否检测到数据包丢失并从中恢复显得至关重要. 决定是否有必要重传数据包的主要机制叫做重传计时器.这个计时器负责维护一个叫重传超时(Retransmission timeout RT

发送tcp的时候,数据包是如何拷贝的

发送数据包的时候,用户态的数据包是如何拷贝到内核的kiovec msghd 结构体 icmp是走sock吗? 每一个skb_buffer的大小都是固定的吗?所以有skb_available这样的函数 1883 /** 1884 * skb_availroom - bytes at buffer end 1885 * @skb: buffer to check 1886 * 1887 * Return the number of bytes of free space at the tail of

发送和接收数据包

发送和接收数据包 原文:Game Networking系列,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 概述 在之前的网游中的网络编程系列1:UDP vs. TCP中(推荐先看前面那篇),我们经过讨论得出:网游中传输数据应该使用UDP而不是TCP.我们选择UDP是为了不需要等待重发数据包,从而达到数据的实时性. 注意,因为接下来英文原文中所有的代码是C++写的,而我是个pythoner,我的计划是:通过理解文章,我用python实现UDP收发数据包.虚拟连接(原文后两章的

Android手机出现"已安装了存在签名冲突的同名数据包"的原因及解决办法

http://blog.csdn.net/dyllove98/article/details/8830264 如果你不是开发者:如果你在android上更新一个已经安装过较早版本软件时,安装到最后一步提示你:已安装了存在签名冲突的同名数据包,然后安装失败.这是因为旧版软件的签名信息与新版不一致造成的.你可以卸载这个软件,然后安装新版软件. 如果无法卸载,可能手机(pad)在发售前将该软件内置在手机中无法卸载.如果是这个原因的话,你可以尝试“root”系统,然后卸载掉该软件的旧版本,然后安装. 如

使用Fiddler抓取手机APP数据包--360WIFI

使用Fiddler抓取手机APP流量--360WIFI 操作步骤:1.打开Fiddler,Tools-Fiddler Options-Connections,勾选Allow remote computers to connect,端口为8888:2.防火墙开放端口8888:2.在电脑上查看360wifi无线网卡IP地址,运行命令ipconfig /all,查看无线局域网适配器的IP信息192.168.1.100:3.手机wifi中设置代理为步骤2中的IP地址192.168.1.100,端口为步骤

sharepoint 2013 打开rdl报表,报表服务器数据库内出错。此错误可能是因连接失败、超时或数据库中磁盘空间不足而导致的

 最近在做reporting services报表的时候,部署到sharepoint后,打开rdl报表,经常遇到一个问题: 报表服务器数据库内出错.此错误可能是因连接失败.超时或数据库中磁盘空间不足而导致的. ---> Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: 报表服务器数据库内出错.此错误可能是因连接失败.超时或数据库中磁盘空间不足而导致的. ---> System.Da

Linux数据包路由原理、Iptables/netfilter入门学习

相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wikipedia.org/wiki/Netfilter http://www.netfilter.org/projects/iptables/ http://linux.vbird.org/linux_server/0250simple_firewall.php http://linux.vbird.o