ワークステーションのクラッシュまたは停電のために突然に停止したクライアントホストを、OES Linuxサーバが検出できないことがあります。しかし、接続はアクティブのままで、デフォルトのタイムアウト時間(12~15分間ほど)が経過してから切断されます。同時接続数を1に設定している場合は、接続を手動で終了するか、またはタイムアウトまでの時間を予測して待ってから再びログインすることをお勧めします。この状況は、ウォッチドッグプロセスが接続を正常に閉じることができなかったときに発生します。そのため、同時接続数が1に設定されていて、接続がウォッチドッグによって正常に閉じられていないと、ユーザはログインすることができません。Linuxカーネルには、keepaliveプローブのサーバ側動作を変更するための3つのパラメータが提供されています。TCPレベルで対処方法を実行するには、これらのパラメータを使用します。
これらのパラメータは/proc/sys/net/ipv4/ディレクトリにあります。
tcp_keepalive_time: 接続が使用されていない場合に、接続を生かしておくためにTCP keepaliveパケットを送信する頻度を指定します。この値はkeepaliveが有効である場合にのみ使用します。
tcp_keepalive_timeには、秒数を整数で指定します。デフォルト値は7200秒すなわち2時間です。この値はたいていのホストに適しており、多くのネットワークリソースを必要としません。この値を低く設定すると、不要なトラフィックのためにネットワークリソースを使用することになります。
tcp_keepalive_probes: 接続が切断されたと判断するまでにTCP keepaliveプローブを送信する頻度を指定します。
tcp_keepalive_probesには整数値を指定します。推奨値は50未満で、tcp_keepalive_time値とtcp_keepalive_interval値によって決まります。デフォルトは、9プローブ送信後に接続が切断されているとアプリケーションに通知するよう設定されています。
tcp_keepalive_intvl: 各keepaliveプローブの応答の持続期間を指定します。この値は、接続のkeepaliveが停止するまでの時間を計算するために重要です。
tcp_keepalive_intvlには整数値を指定します。デフォルトは75秒です。1プローブが75秒だとすると、9プローブは約11分となります。tcp_keepalive_probes変数およびtcp_keepalive_intvl変数のデフォルト値を使用して、keepaliveによって接続が時間切れになるまでのデフォルト時間を評価できます。
余分なネットワークトラフィックが大量に発生せずかつ問題は解決されるように、これら3つのパラメータを変更します。一例として、次のように変更できます(検出時間は3分)。
tcp_keepalive_time set -120
tcp_keepalive_probes - 3
tcp_keepalive_intvl - 20
メモ:パラメータ設定値に注意し、すでに有効である接続の設定をしないようにします。
設定はファイルが変更された直後に有効になります。どのサービスも再起動する必要はありません。ただし、設定は現行のセッションにのみ有効です。サーバを再起動すると、設定はデフォルト設定に戻ります。
設定を(再起動後も)永続的なものにするには、以下の手順を行います。
次のエントリを/etc/sysctl.confに追加します。
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_keepalive_intvl=20
すべてのクライアントおよびサーバはLAN経由で接続されている場合にのみ、上記の設定を推奨します。