最近、私たちのサーバーの1つ(Debian Squeeze)が負荷の高い期間に応答しないという問題が発生しました。カーネルログを見ると、その理由は次のとおりです。
kernel: nf_conntrack: table full, dropping packet
私が理解しているように、これは接続状態の追跡を実行し、接続の詳細を格納するために使用されるテーブルがいっぱいであることを報告するconntrackモジュールです。
私が行った研究によると、これを軽減する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
これらの複雑さが排除されます。