我的服务器上的 conntrack 表有超过 120 万个连接,我不断提高限制,但该表只是继续增长(但不是单调增长 - 有时它会下降)。
$ cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
1278865
尽管 netstat 非常合理,但情况仍然如此:
$ netstat -ant | wc -l
908
我运行的是内核为 2.6.32-5-amd64 的 Debian。我知道 conntrack 表保存了最近的连接信息,因此预计它会比 netstat 大,但这种行为似乎仍然相当极端!该机器主要用作 Web 服务器,Apache 中的 mod_python 用于处理连接。除这些之外不应该有其他连接。没有多余的 mod_python 线程在运行(ps -ef 看起来正常,top 看起来正常),Apache 和 mod_python 的错误日志看起来正常。(出于隐私原因,我无法发布详细的错误日志信息)。
在 ip_conntrack 中,IP 地址似乎分布合理,并且位于端口 443 上(正如人们所期望的那样,Web 服务器完全通过 HTTPS 提供服务)。我不确定是什么原因导致了失控的 IP 连接,而且我在互联网上找不到任何信息表明这是一个已知问题。是否有 Apache 配置或任何可能造成问题的因素?还有其他想法吗?非常感谢。
答案1
要回答您的问题,您可以在 sysctl.conf 中设置 net.netfilter.nf_conntrack_tcp_timeout_established 默认值为 5 天,可以大幅降低而不会影响任何可能的 443 流量。net.ipv4.netfilter.ip_conntrack_max 也可以增加。
答案2
要在较新的内核中查看跟踪,您需要安装“conntrack”包并执行conntrack -L
。您将看到 conntrack 表的列表。“/proc/net/ip_conntrack”文件已弃用。