nf_conntrack table full ,dropping packet Fsync failed

今天遇到一个错误,

nf_conntrack table full,dropping packet

nf_conntrack 在 /proc/sys/net/netfilter/

调整 /proc/ 下面的参数
可以增大 conntrack 的条目(sessions, connection tracking entries) CONNTRACK_MAX 或者增加存储 conntrack 条目哈希表的大小 HASHSIZE
默认情况下,CONNTRACK_MAX 和 HASHSIZE 会根据系统内存大小计算出一个比较合理的值:
对于 CONNTRACK_MAX,其计算公式:
CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
比如一个 64 位 48G 的机器可以同时处理 48*1024^3/16384/2 = 1572864 条 netfilter 连接。对于大于 1G 内存的系统,默认的 CONNTRACK_MAX 是 65535。

对于 HASHSIZE,默认的有这样的转换关系:
CONNTRACK_MAX = HASHSIZE * 8
这表示每个链接列表里面平均有 8 个 conntrack 条目。其真正的计算公式如下:
HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (in bytes) / 131072 / (ARCH / 32)
比如一个 64 位 48G 的机器可以存储 48*1024^3/131072/2 = 196608 的buckets(连接列表)。对于大于 1G 内存的系统,默认的 HASHSIZE 是 8192。


但是保存的时候出问题了,Fsync failed 。内容和下面的相似:

再修改保存后,出现提示:

vim nf_conntrack_max ,把其中默认的65535改成算出来的值,出现下面的错误:
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?y
"nf_conntrack_max" E667: Fsync failed
Press ENTER or type command to continue

按下ENTER后,就重新进入编辑状态,无法保存。

分析:

首先确认该文件时是可读写的,没问题Fsync 是好像用于同步缓存与磁盘的程序,网上有人说是

磁盘空间的原因,显然我的情况不是。最后我想用其他方式写入我需要的文件,命令如下:

echo 262144 > /proc/sys/net/netfilter/nf_conntrack_max

再次vi查看结果,发现写入成功,问题解决,但目前还不知道产生这个错误的原因。


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/

你可能感兴趣的:(错误,fsync,nf_conntrack)