過去問ドリル

LinuCレベル3 プラットフォームスペシャリスト プラットフォームの最適化 問12

プラットフォームの最適化/カーネルパラメータによるネットワーク最適化

iptablesのステートフルなルールを使っている高負荷のサーバーで、新規の接続が断続的に失敗し、カーネルログに「nf_conntrack: table full, dropping packet」と出力されていた。調整すべきカーネルパラメータとして適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「プラットフォームの最適化」に対応。実際の試験問題ではありません)

正解: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を受けてハンドシェイクが完了していない接続を保持するキューの長さです。
LinuCレベル3 プラットフォームスペシャリストの問題を演習モードで解く