Armadilloフォーラム

プロセスまたはOSの再起動後、ソケットのバインドに失敗する

hkawasaki1

2019年4月15日 11時33分

Armadillo-IoT G3 を用いたIoTシステムにおいて、
プロセスの終了時やshutdownコマンドによるOSの再起動時に、
そのプロセスで開いたソケットが使用しているポートが解放されず、
プロセスまたはOSの再起動後、ソケットのバインドに失敗する問題が発生しています。
(netstatコマンドで確認したところ、ソケットがオープンされたままになっていました)

運用上、サーバープロセスの再起動や、リモートからのOS再起動を行いたいのですが、
上記のようなソケットのバインド(クローズされていないように見えます)が
発生しないようにする方法についてご教示いただけないでしょうか。

以上、よろしくお願いします。


コメント

at_mizo

2019年4月15日 12時42分

溝渕です。

> 運用上、サーバープロセスの再起動や、リモートからのOS再起動を行いたいのですが、
> 上記のようなソケットのバインド(クローズされていないように見えます)が
> 発生しないようにする方法についてご教示いただけないでしょうか。

TIME_WAITの時間か、keepaliveの設定を調整すると改善するかと思います。

詳しくは、tcpのmanページをご参照ください。

[atde]$ man 7 tcp
:(省略)
/proc インターフェース
:(省略)
tcp_keepalive_time
tcp_keepalive_probes
tcp_keepalive_intvl
:(省略)
tcp_tw_recycle
tcp_fin_timeout

hkawasaki1

2019年4月16日 15時09分

溝渕さん、アドバイス有難うございます。

> 溝渕です。
>
> > 運用上、サーバープロセスの再起動や、リモートからのOS再起動を行いたいのですが、
> > 上記のようなソケットのバインド(クローズされていないように見えます)が
> > 発生しないようにする方法についてご教示いただけないでしょうか。
>
>
> TIME_WAITの時間か、keepaliveの設定を調整すると改善するかと思います。
>
> 詳しくは、tcpのmanページをご参照ください。
>
>
> [atde]$ man 7 tcp
> :(省略)
> /proc インターフェース
> :(省略)
> tcp_keepalive_time
> tcp_keepalive_probes
> tcp_keepalive_intvl
> :(省略)
> tcp_tw_recycle
> tcp_fin_timeout
>
>

at_mizo

2019年4月16日 15時55分

溝渕です。

すみません。1点訂正させてください。

> > tcp_tw_recycle

上記パラメータですが、ネットワークプロトコルの観点から安全ではないとの
理由からlinux-4.12で廃止されています。

Armadillo-IoT G3のlinux-4.9では利用自体は可能ですが、安全でない事には
変わりありません。

上記パラメータではなく、tcp_tw_reuseを調整してみてください。