LinuCレベル3 プラットフォームスペシャリスト プラットフォームの最適化 問12
プラットフォームの最適化/カーネルパラメータによるネットワーク最適化iptablesのステートフルなルールを使っている高負荷のサーバーで、新規の接続が断続的に失敗し、カーネルログに「nf_conntrack: table full, dropping packet」と出力されていた。調整すべきカーネルパラメータとして適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「プラットフォームの最適化」に対応。実際の試験問題ではありません)
- Anet.netfilter.nf_conntrack_max
- Bnet.ipv4.tcp_max_tw_buckets
- Cnet.core.netdev_max_backlog
- Dnet.ipv4.tcp_max_syn_backlog
正解:A
解説
netfilterのコネクション追跡(conntrack)は、追跡中の接続をテーブルに記録しており、その最大エントリ数が net.netfilter.nf_conntrack_max です。テーブルが満杯になると新しい接続を追跡できず、「nf_conntrack: table full, dropping packet」というメッセージとともにパケットが破棄されます。対処として上限を引き上げるほか、現在のエントリ数を net.netfilter.nf_conntrack_count で確認したり、不要な追跡を減らしたりします。上限を上げるとエントリの分だけカーネルのメモリを消費する点にも注意します。
選択肢ごとの解説
- A正しい。conntrackテーブルの最大エントリ数を決めるパラメータで、満杯になるとこのメッセージとともにパケットが破棄されます。
- B誤り。tcp_max_tw_bucketsはシステムが同時に保持するTIME_WAIT状態のソケット数の上限で、conntrackのテーブルとは別です。
- C誤り。netdev_max_backlogはNICから受け取ったパケットをカーネルが処理するまでのキューの長さで、conntrackのテーブルとは別です。
- D誤り。tcp_max_syn_backlogはSYNを受けてハンドシェイクが完了していない接続を保持するキューの長さです。