アプリケーションがOSレベルで設定されるタイムアウトにより異常終了することがあります。タイムアウトが発生するということは、何かしらの原因が考えられます。まずはなぜタイムアウトが発生しているのか(ネットワーク障害、帯域不足など)を明らかにして、その障害を取り除く努力をすべきです。しかし根本障害荷対応できない場合には他の方法を考えなければなりません。今回はどのような方法が考えられるかを考えてみます。
HP特有のパラメータでtcp_fin_wait_2_timeoutがあります。
[参照]FIN_WAIT_2 の状態のポートを解放する方法
この設定が問題になっている場合には以下のような対応方法が考えられます。
・タイムアウトを設定できないか( アプリケーション/OS )
アプリケーションでパラメータの変更が可能であれば、用意されているGUIなどを使って簡単に変更できるでしょう。またOSレベルでの変更となれば、管理者権限などが必要になると考えられますが、必要な手順を踏むことでパラメータの変更はできます。OSレベルのパラメータを変更する際には一度に一つずつ変更し問題が発生した場合にはすぐに元に戻せる体制をとっておきます。
・ソケットをクリアするコマンドはないか( OS )
タイムアウトの設定で実行されるのはソケットのクリアです。タイムアウトを待たずにタイムアウト発生時の動作を引き起こします。タイムアウトが発生したときの処理の流れが分かれば、提供されているシステムコールを利用してユーザ側でメンテナンスプログラムを作ることができます。
・クライアント側でTCPの流れを変えるパラメータはないのか。
タイムアウトが発生させるような状態にならないようにします。例えばTCPの場合にはソケットの状態が変化していくことでFIN_WAIT_2に移行しますが、パラメータなどを設定することによりFIN_WAIT_2に移行しないようにします。