「カーネル:nf_conntrack:テーブルがいっぱいでパケットが破棄されました」エラーを軽減する方法

「カーネル:nf_conntrack:テーブルがいっぱいでパケットが破棄されました」エラーを軽減する方法

最近、私たちのサーバーの1つ(Debian Squeeze)が負荷の高い期間に応答しないという問題が発生しました。カーネルログを見ると、その理由は次のとおりです。

kernel: nf_conntrack: table full, dropping packet

私が理解しているように、これは接続状態の追跡を実行し、接続の詳細を格納するために使用されるテーブルがいっぱいであることを報告するconntrackモジュールです。

私が行った研究によると、これを軽減する2つの方法があるようです。

  1. テーブルのサイズを大きくします。

  2. システムからモジュールを完全に取り外します。

ただし、このシステムには存在も/proc/sys/net/ipv4/ip_conntrack_max存在もありません/proc/sys/net/ipv4/netfilter/ip_conntrack_max(以下にipv4ディレクトリはありませんnet)。

これにより、lsmod何の結果も得られません。

だから私は少し混乱しています。誰かが状況を明確にするのに役立ちますか?

  • conntrackがインストールされていますか?では、設定はどこにありますか?なぜlsmodに表示されないのですか?
  • conntrackがインストールされていない場合、テーブルがいっぱいであるというメッセージはどのように発行されますか?

ありがとう

ベストアンサー1

Ubuntu 18.04を実行しているサーバーでも同じ問題が発生しました。起動時にモジュールがロードされなくても、nf_conntrack後でトラフィックが急増している間にメッセージが破棄されます(nf_conntrack: table full, dropping packet)。

その機能を無効にする方法はわかりませんが、テーブルサイズをオーバーライドできるようにモジュールを明示的にロードしました。

まず、nf_conntrack次の項目を含めて今すぐロードする必要があります/etc/modules

nf_conntrack

その後、サーバーのメモリサイズに応じて、次のデフォルト値を上書きしてテーブルサイズを増やします/etc/sysctl.conf

net.netfilter.nf_conntrack_max=262144
net.nf_conntrack_max=262144

確認する:

$ cat /proc/sys/net/netfilter/nf_conntrack_max 
262144

前述したように、Ubuntu 18.04でテストされていますが、Debianでも動作したいと思います。

nf_conntrack起動後に存在しない場合でも後でロードできる理由に関する追加の背景情報を表示するにはこの関連回答iptables呼び出し時にモジュールが自動的にロードされる例があります。これを追加すると、/etc/modulesこれらの複雑さが排除されます。

おすすめ記事