问题描述

连接ECS实例中的应用时偶尔出现丢包现象。经排查,ECS实例的外围网络正常,但内核日志(dmesg)中存在“kernel: nf_conntrack: table full, dropping packet”的错误信息。存在此问题的ECS实例符合如下条件。

  • 镜像:aliyun-2.1903-x64-20G-alibase-20190327.vhd及之后的所有镜像版本。
  • 内核:kernel-4.19.24-9.al7及以后的所有内核版本。

问题原因

nf_conntrack是Linux系统内NAT的一个跟踪连接条目的模块。nf_conntrack模块会使用一个哈希表记录TCP协议“established connection”记录,当这个哈希表满之后,新的连接会引发“nf_conntrack: table full, dropping packet”错误。关于nf_conntrack模块中的重要参数,可参考如下信息。

  • nf_conntrack_buckets:哈希表的大小,可在模块加载时指定参数,也可以通过sysctl命令修改。当系统内存大于等于4GB时,它的默认值是“65536”。
  • nf_conntrack_max:哈希表的最大节点个数,即nf_conntrack模块支持的最大连接数。当系统内存大于等于4G时,它的默认值是“262144”。对于处理大量连接的服务器来说,该默认值相对较小。
  • nf_conntrack_tcp_timeout_time_wait:nf_conntrack模块中保存time_wait状态的TCP连接时间,默认值为“120s”。

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

请您结合现场实际情况,从如下两种解决方案中选择最适合您业务场景的方法。

方案一:通过sysctl接口调整nf_conntrack模块中的参数值

业务侧应提前自行确认应用程序可能使用的nf_conntrack最大连接数,并参考如下命令,通过sysctl接口调整nf_conntrack模块中的参数值。

注:如果您的业务本身符合“并发连接数较高,其中主要是短连接”的特性。建议增大nf_conntrack_maxnf_conntrack_buckets的参数值,以确保不会由于连接数过多导致nf_conntrack的哈希表满。一般建议nf_conntrack_max参数值为nf_conntrack_buckets参数值的4倍 。

 
sudo sysctl -w net.netfilter.nf_conntrack_max=1503232
sudo sysctl -w net.netfilter.nf_conntrack_buckets=375808 # 如果使用非4.19内核,该选项可能无法在运行时修改
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=60

注:

  • 命令中的参数值仅供参考,现场请结合实际业务情况进行调整。在调整前,建议提前创建快照或备份重要文件,确保数据安全。
  • 建议一起调整nf_conntrack_bucketsnf_conntrack_max参数。如果只改动nf_conntrack_max参数值,可能会导致哈希表上的链表过长,查询效率低。如果只改动nf_conntrack_buckets参数值,不能解决该问题。

方案二:通过iptables过滤不需要追踪的连接

参考如下命令,在iptables规则中增加“-j notrack”的动作 ,即过滤不需要追踪(track)的连接。该方式的好处是治本,可以将不需要追踪的连接直接进行notrack处理,将不会占用哈希表的空间,也就不会引发报错。

 
sudo iptables -t raw -A PREROUTING -p udp -j NOTRACK
sudo iptables -t raw -A PREROUTING -p tcp --dport 22 -j NOTRACK

注:此处的命令表示不追踪UDP和22端口的TCP连接,仅供参考。现场以实际情况为准。

相关文档

适用于

  • 云服务器 ECS

    注:

    • 镜像:aliyun-2.1903-x64-20G-alibase-20190327.vhd及之后的所有镜像版本。
    • 内核:kernel-4.19.24-9.al7及以后的所有内核版本。

转载于:https://help.aliyun.com/knowledge_detail/154095.html?spm=5176.11065259.1996646101.searchclickresult.38ad3530iVe68L

ECS实例中的应用偶尔出现丢包现象并且内核日志(dmesg)存在“kernel: nf_conntrack: table full, dropping packet”的报错信息的更多相关文章

  1. [转]nf_conntrack: table full, dropping packet 连接跟踪表已满,开始丢包 的解决办法

      nf_conntrack: table full, dropping packet  连接跟踪表已满,开始丢包 的解决办法 中午业务说机器不能登录,我通过USM管理界面登录单板的时候发现机器没有僵 ...

  2. 【转载】访问IIS中网站出现 403.14 - Forbidden报错信息

    将网站发布后部署到IIS后,配置完应用程序池以及相关设置项后,在浏览器中访问设置好的网站,出现403.14 - Forbidden的错误信息,从错误信息的提示来看,应该是IIS服务器此网站目录的内容被 ...

  3. python中如何通过报错信息定位问题(异常传播轨迹)

    class SelfException(Exception): pass def main(): firstMethod() def firstMethod(): secondMethod() def ...

  4. python中常见的报错信息

    python中常见的报错信息 在运行程序时常会遇到报错提示,报错的信息会提示是哪个方向错的,从而帮助你定位问题: 搜集了一些python最重要的内建异常类名: AttributeError:属性错误, ...

  5. java中DatagramSocket连续发送多个数据报包时产生丢包现象解决方案

    try { //向指定的ip和端口发送数据~! //先说明一下数据是谁发送过来的! byte[] ip = InetAddress.getLocalHost().getHostAddress().ge ...

  6. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  7. selenium报错信息-- Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案

    本以为是缺少utf-8造成的错误,但是加完这个还是报错,于是在网上百度了一下是因为上传的路劲粗无偶导致的 正确的写法是把路劲中“\”变为“\\”,或者在路劲的开头加上“r”,或者在路劲的开头加上“r” ...

  8. SqlServer中提示和报错信息的翻译

    有时候遇到SqlServer一些报错需要上网查找解决方法,一些比较生僻的问题汉语搜索往往得不到想要的,就要使用英文在外网搜索.之前都是自己尝试翻译,或者使用错误码,或者找个英文版的数据库重现问题.有时 ...

  9. eclipse中去掉Js/javsscript报错信息

    1.首先在problem>errors中删除所有js错误: 如下图 2.然后再勾选掉javascript Validator: 3.clean下项目吧,你会发现再也不出现js红叉叉了,哈哈.

随机推荐

  1. Windows10 添加 新的输入法

    Windows10系统 控制面板 区域 语言首选项 设置 添加 陈桥输入法

  2. 分布式存储ceph---ceph常用命令(3)

    1.查看ceph集群配置信息 ceph daemon /var/run/ceph/ceph-mon.$(hostname -s).asok config show 2.在部署节点修改了ceph.con ...

  3. IDEA 全局搜索 Jar 包中源码内容

    引言 项目开发过程中,经常遇到需要在依赖的 Jar 包查看源码,查找类方法和属性,介绍两种在 IDEA 中搜索 Jar 包内容的方式 方式一:双击 SHIFT 快捷键 输入需要查询的类名或方法名 方式 ...

  4. Go语言安装配置

    一.Go语言下载 官方下载地址:https://golang.google.cn/dl/ 选择自己需要的版本下载即可. 二.Go语言安装 下载完成之后,双击go1.16.4.windows-amd64 ...

  5. .Net RabbitMQ实战指南——客户端开发

    开发中关键的Class和Interface有Channel.Connection.ConnectionFactory.Consumer等,与RabbitMQ相关的开发工作,基本上是围绕Connecti ...

  6. Linux 文件不能被root修改与编辑原因

    近段时间公司的一台服务器被恶意添加了一些定时器任务到crond的配置文件"/var/spool/cron/root"里,本想着只要简单使用crontab -e命令把该恶意的任务去除 ...

  7. 多边形游戏——区间dp

    题目描述 多边形(Polygon)游戏是单人玩的游戏,开始的时候给定一个由N个顶点构成的多边形(图1所示的例子中,N=4),每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘 ...

  8. windows使用attrib来简单隐藏文件

    效果如下: 详细命令说明: ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [+O | -O] [+I | -I] [+X | -X] [+P | -P] ...

  9. YOLO、SSD、FPN、Mask-RCNN检测模型对比

    YOLO.SSD.FPN.Mask-RCNN检测模型对比 一.YOLO(you only look once) YOLO 属于回归系列的目标检测方法,与滑窗和后续区域划分的检测方法不同,他把检测任务当 ...

  10. 模型压缩95%:Lite Transformer,MIT韩松等人

    模型压缩95%:Lite Transformer,MIT韩松等人 Lite Transformer with Long-Short Range Attention Zhanghao Wu, Zhiji ...