翼度科技»论坛 云主机 LINUX 查看内容

如何解决系统报错:nf_conntrack: table full, dropping packets

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
问题

在系统日志中(/var/log/messages),有时会看到大面积的下面的报错:
  1. nf_conntrack: table full, dropping packet
复制代码
这说明系统接到了大量的连接请求,但是系统的连接跟踪表已经满了,无法再记录新的连接了。这时候,系统会丢弃新的连接请求。
在 CentOS 下,默认的连接跟踪表大小是 65536,可以通过下面的命令查看:
  1. cat /proc/sys/net/netfilter/nf_conntrack_max
复制代码
如果流量比较小,这个值是没问题的,但如果流量巨大,这个值可能就有点太小了。
解决方法

显然,调大最大值的限制就可以了。不过更大的限制意味着可以承接更多连接,意味着要耗费更多资源,这点要注意。
查看当前有多少活跃连接:
  1. cat /proc/sys/net/netfilter/nf_conntrack_count
复制代码
如果这个值跟上面介绍的 nf_conntrack_max 已经很接近了,就说明快满了,需要调大 nf_conntrack_max。可以使用下面的命令临时调大:
  1. echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max
复制代码
如果不想每次重启都要重新设置,可以修改 /etc/sysctl.conf,加入下面的配置:
  1. net.netfilter.nf_conntrack_max = 524288
复制代码
为了缓解大量连接的问题,您可能还需要考虑减少服务器等待连接关闭/超时的时间。在 /etc/sysctl.conf 中加入下面的配置:
  1. net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
  2. net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 60
  3. net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60
复制代码
如何监控

平时使用 categraf(https://github.com/flashcatcloud/categraf) 监控就可以了,categraf 提供了 input.conntrack 采集插件,可以采集 conntrack 的信息,建议采集配置如下:
conf/input.conntrack/conntrack.toml:
  1. files = [
  2.     "ip_conntrack_count",
  3.     "ip_conntrack_max",
  4.     "nf_conntrack_count",
  5.     "nf_conntrack_max"
  6. ]
  7. dirs = [
  8.     "/proc/sys/net/ipv4/netfilter",
  9.     "/proc/sys/net/netfilter"
  10. ]
  11. # ignore errors
  12. quiet = true
复制代码
完事配置一个类似下面的监控规则即可:
  1. conntrack_ip_conntrack_count / ip_conntrack_max > 0.8
复制代码
另一个监控方案,是直接监控系统日志,算是一个兜底监控方案,可以采用 catpaw 来监控,catpaw 提供了 journaltail 采集插件,可以读取近期系统日志,grep 关键字,如果出现异常关键字就告警,配置如下:
conf.d/p.journaltail/journaltail.toml:
  1. [[instances]]
  2. # journalctl -S -${time_span}
  3. time_span = "1m"
  4. # relationship: or
  5. keywords = ["Out of memory", "nf_conntrack: table full, dropping packets"]
  6. # check rule name
  7. check = "Critical System Errors"
  8. # # gather interval
  9. interval = "30s"
  10. [instances.alerting]
  11. ## Enable alerting or not
  12. enabled = true
  13. ## Same functionality as Prometheus keyword 'for'
  14. for_duration = 0
  15. ## Minimum interval duration between notifications
  16. repeat_interval = "5m"
  17. ## Maximum number of notifications
  18. repeat_number = 3
  19. ## Whether notify recovery event
  20. recovery_notification = true
  21. ## Choice: Critical, Warning, Info
  22. default_severity = "Warning"
复制代码
catpaw 的入门使用,可以参考文章:《太卷了,史上最简单的监控系统 catpaw 简介

来源:https://www.cnblogs.com/ulricqin/p/17476210.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具