Armadilloフォーラム

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

hkawasaki1

2019年4月15日 11時33分

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

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

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

コメント

溝渕です。

> 運用上、サーバープロセスの再起動や、リモートからの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

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

> 溝渕です。
>
> > 運用上、サーバープロセスの再起動や、リモートからの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
>
>

溝渕です。

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

> > tcp_tw_recycle

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

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

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