Armadilloフォーラム

LTE通信タイムアウト時間について

csd_mii

2023年6月22日 9時12分

大変お世話になります、三井と申します。

▼質問内容
LTE通信(ppp0)のタイムアウト判定20秒は何処で設定しているのでしょうか?
また、イーサネット接続(eth0)の場合10秒でタイムアウトになるのですが、こちらも何処で設定しているのでしょうか?

▼背景
一定時間毎にLTE通信を利用してHTTPポストを行うシステムを運用中なのですが、
運用中システムのタスクが突然止まる(待ち状態?)事象が発生しており、
まずはユーザソフトウェアかドライバ、LTEモデム等原因の切り分けを行っております。

内容としては、
まだ解析途中ではありますが、ユーザソフトウェアのネットワーク通信を行う箇所で待ち状態になっており、
具体的には、pythonのrequestsライブラリを使用したHTTPポスト処理で待ち状態になっています。
(ユーザソフトウェアでは通信のタイムアウトは設定しておりません)
topコマンド確認した時、タスク自体は終了しておらず、
通常時は常にCPU使用率50%以上なのに対して、事象発生後はCPU使用率が0%になっています。
事象発生後に「ping www.atmark-techno.com」で外部ネットワークの通信確認をした時、正常に通信できます。
armadillo本体を再起動した場合は、ユーザソフトウェアは正常に動作します。

通常は電波状況が悪い等でLTE通信できない場合は20秒でタイムアウト判定になるため、電波状況による原因ではなく、
別の場所に設置した複数基板でも同一現象が発生しているため、H/W故障による原因ではないと考えております。

事象発生時のsyslogを添付します。LTE通信不可となったタイミングは3/15 18:34頃でそれ以降ユーザソフトウェアが止まった状態です。
ログを見た限りメモリ不足やLTEモデムの再起動等は行われていないと見受けられます。

/etc/aiot-modem-control/startup.conf添付します。
ping_check等の再接続設定の設定は行っておりません。

Linuxカーネルバージョン:Linux armadillo 4.14-at48 #1 Wed Aug 24 13:40:29 JST 2022 armv7l GNU/Linux
ems31-utilsバージョン:1.3.1

ログでエラー等が確認できていないため想像にはなりますが、
ユーザソフトウェアではタイムアウト処理を行っていないため、
通信タイムアウト20秒の処理がうまく動作しなかったことが原因かと思い、
(例えば、ユーザソフトウェア側にタイムアウト通知が届いていない)
タイムアウト20秒の設定箇所から調査していこうと考えております。
pingコマンドでも上記のタイムアウト時間だったため、Linux側で設定を行うと想像しておりますが、
設定場所が分からないため質問させて頂きました。

対策としては、ユーザソフトウェアにタイムアウトを設ける、ping_checkの設定をする、等で
解決すると考えておりますが、事象発生に再現性が無いため原因の究明を思っております。

その他考えられる原因あればご教授頂ければ幸いです。

以上、お手数ですがよろしくお願い致します。

ファイル ファイルの説明
startup.conf /etc/aiot-modem-control/startup.conf
syslog.log 事象発生日syslog
コメント

at_syunya.ohshio

2023年6月23日 18時40分

大塩です。

> ▼質問内容
> LTE通信(ppp0)のタイムアウト判定20秒は何処で設定しているのでしょうか?
> また、イーサネット接続(eth0)の場合10秒でタイムアウトになるのですが、こちらも何処で設定しているのでしょうか?

上記につきまして、以下という認識でよろしいでしょうか。
・使用しているpythonアプリケーションは同一で、使用時にLTEかethernet のどちらかでテストしている
・python アプリケーション内で requests ライブラリを使用しており、requests.get のタイムアウトが使用デバイスによって違う

上記の通りである場合、python の requests に timeout は設定しているでしょうか。
設定していない場合、timeout を設定して動作に変化があるかご確認いただけますでしょうか。

以上です。

csd_mii

2023年6月26日 10時43分

大塩様

お世話になります。
ご回答ありがとうございます。

> 上記につきまして、以下という認識でよろしいでしょうか。
> ・使用しているpythonアプリケーションは同一で、使用時にLTEかethernet のどちらかでテストしている
はい、pythonアプリケーションは同一で、全てLTEを使用しております。
設置拠点はバラバラですが全て同じ契約内容のSIMを使用しております。

ethernetについては、今後LTEではなくeth0を利用する可能性があることと、
今回の原因究明の糸口にならないかと思い質問させて頂いた次第です。

> ・python アプリケーション内で requests ライブラリを使用しており、requests.get のタイムアウトが使用デバイスによって違う
はい、requestsライブラリを使用しております。
但し、requests.postのタイムアウトは全使用デバイス共通の約20秒で、デバイス毎にばらつきはありません。

> 上記の通りである場合、python の requests に timeout は設定しているでしょうか。
> 設定していない場合、timeout を設定して動作に変化があるかご確認いただけますでしょうか。
事象発生時はtimeoutを設定しておりません。
まだ長期期間でのテストができておりませんが、timeout設定をしたプロジェクトでは現状事象発生しておりません。
但し、事象の発生に再現性がなく不定期で発生するため、timeout設定により解消されたのか、
原因は解消されてなく事象が偶然発生していないのか判断ができておらず、原因を究明したいと思っております。

また、原因究明が難しい場合は、
100%事象を再現できる状況でtimeout設定の有効により事象は発生しなくなる、を以て解決という着地にしようと考えております。
そして、事象の再現はタイムアウト20秒を無効後LTE通信途絶をすれば100%再現できるのでは、と思い今回の質問をさせて頂いた次第です。

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

at_syunya.ohshio

2023年6月30日 15時44分

大塩です。

> 事象発生時はtimeoutを設定しておりません。
> まだ長期期間でのテストができておりませんが、timeout設定をしたプロジェクトでは現状事象発生しておりません。
> 但し、事象の発生に再現性がなく不定期で発生するため、timeout設定により解消されたのか、
> 原因は解消されてなく事象が偶然発生していないのか判断ができておらず、原因を究明したいと思っております。
>
> また、原因究明が難しい場合は、
> 100%事象を再現できる状況でtimeout設定の有効により事象は発生しなくなる、を以て解決という着地にしようと考えております。
> そして、事象の再現はタイムアウト20秒を無効後LTE通信途絶をすれば100%再現できるのでは、と思い今回の質問をさせて頂いた次第です。

推測ですが、python の requests.post を使用しているときにのみこの現象が発生と思われます。
以下 python requests のドキュメントを見ると、timeout は必ず設定するようべきとのような記載があるため、不明な動作になっている可能性はあります。
https://docs.python-requests.org/en/latest/user/quickstart/#timeouts

python requests が原因であるか否かを調べる場合は、この方法以外(shell の cron 等)で動作テストを行い、同じ現象が出るかどうかを見ることで切り分けが出来るかと思われます。

以上です。

csd_mii

2023年7月3日 11時28分

大塩様

お世話になります、ご回答ありがとうございます。

> 推測ですが、python の requests.post を使用しているときにのみこの現象が発生と思われます。
> 以下 python requests のドキュメントを見ると、timeout は必ず設定するようべきとのような記載があるため、不明な動作になっている可能性はあります。
> https://docs.python-requests.org/en/latest/user/quickstart/#timeouts
> python requests が原因であるか否かを調べる場合は、この方法以外(shell の cron 等)で動作テストを行い、同じ現象が出るかどうかを見ることで切り分けが出来るかと思われます。

かしこまりました、まずはcurlコマンド等を利用して、pythonのrequestsを利用しない方法で現象発生するか確認しようと思います。
ちなみに当初の質問内容であるLTE通信/イーサネット通信のタイムアウト時間設定はどこで行っているのでしょうか?
もしくはOS側で設定を行わない内容でしょうか?

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

takanori_shimizu

2023年6月28日 14時07分

> 大変お世話になります、三井と申します。
>
> ▼質問内容
> LTE通信(ppp0)のタイムアウト判定20秒は何処で設定しているのでしょうか?
> また、イーサネット接続(eth0)の場合10秒でタイムアウトになるのですが、こちらも何処で設定しているのでしょうか?
>
> ▼背景
> 一定時間毎にLTE通信を利用してHTTPポストを行うシステムを運用中なのですが、
> 運用中システムのタスクが突然止まる(待ち状態?)事象が発生しており、
> まずはユーザソフトウェアかドライバ、LTEモデム等原因の切り分けを行っております。
>
> 内容としては、
> まだ解析途中ではありますが、ユーザソフトウェアのネットワーク通信を行う箇所で待ち状態になっており、
> 具体的には、pythonのrequestsライブラリを使用したHTTPポスト処理で待ち状態になっています。
> (ユーザソフトウェアでは通信のタイムアウトは設定しておりません)
> topコマンド確認した時、タスク自体は終了しておらず、
> 通常時は常にCPU使用率50%以上なのに対して、事象発生後はCPU使用率が0%になっています。
> 事象発生後に「ping www.atmark-techno.com」で外部ネットワークの通信確認をした時、正常に通信できます。
> armadillo本体を再起動した場合は、ユーザソフトウェアは正常に動作します。
>
> 通常は電波状況が悪い等でLTE通信できない場合は20秒でタイムアウト判定になるため、電波状況による原因ではなく、
> 別の場所に設置した複数基板でも同一現象が発生しているため、H/W故障による原因ではないと考えております。
>
> 事象発生時のsyslogを添付します。LTE通信不可となったタイミングは3/15 18:34頃でそれ以降ユーザソフトウェアが止まった状態です。
> ログを見た限りメモリ不足やLTEモデムの再起動等は行われていないと見受けられます。
>
> /etc/aiot-modem-control/startup.conf添付します。
> ping_check等の再接続設定の設定は行っておりません。
>
> Linuxカーネルバージョン:Linux armadillo 4.14-at48 #1 Wed Aug 24 13:40:29 JST 2022 armv7l GNU/Linux
> ems31-utilsバージョン:1.3.1
>
>
> ログでエラー等が確認できていないため想像にはなりますが、
> ユーザソフトウェアではタイムアウト処理を行っていないため、
> 通信タイムアウト20秒の処理がうまく動作しなかったことが原因かと思い、
> (例えば、ユーザソフトウェア側にタイムアウト通知が届いていない)
> タイムアウト20秒の設定箇所から調査していこうと考えております。
> pingコマンドでも上記のタイムアウト時間だったため、Linux側で設定を行うと想像しておりますが、
> 設定場所が分からないため質問させて頂きました。
>
> 対策としては、ユーザソフトウェアにタイムアウトを設ける、ping_checkの設定をする、等で
> 解決すると考えておりますが、事象発生に再現性が無いため原因の究明を思っております。
>
> その他考えられる原因あればご教授頂ければ幸いです。
>
> 以上、お手数ですがよろしくお願い致します。

清水と申します。
弊社でも同じような現象が発生しました。
pythonのrequestsライブラリは、タイムアウトを設定しない場合、
responseを待ち続けて、止まってしまうようです。
そのため、timeout設定は必要です。
弊社では、timeout設定を追加することで、タスクが停止することはなくなりましたが
10秒周期でAWSへ収集データを送信すると、4時間ほどでarmdilloのLTE接続が切断される
現象が発生しております。
自社(池袋)付近の事務所でロングランしている分には、事象が発生しませんでした(3日間連続動作)
現場(大阪)付近では、上記事象が発生し、LTE再接続サービスを有効にすることで、LTE通信切断時に
armdillo再起動をすることで、回避しています。
再起動したあとのデバッグログを採取するようにアドバイスを受け、フォーラムで解析を依頼しています。
再起動後もSIMカードの認識やLTE通信のリトライが繰り返されているように見受けられ、armdilloのNetworkManagerの動きが気になっています。

at_syunya.ohshio

2023年6月30日 16時04分

大塩です。

> 弊社では、timeout設定を追加することで、タスクが停止することはなくなりましたが
> 10秒周期でAWSへ収集データを送信すると、4時間ほどでarmdilloのLTE接続が切断される
> 現象が発生しております。
> 自社(池袋)付近の事務所でロングランしている分には、事象が発生しませんでした(3日間連続動作)
> 現場(大阪)付近では、上記事象が発生し、LTE再接続サービスを有効にすることで、LTE通信切断時に
> armdillo再起動をすることで、回避しています。
> 再起動したあとのデバッグログを採取するようにアドバイスを受け、フォーラムで解析を依頼しています。
> 再起動後もSIMカードの認識やLTE通信のリトライが繰り返されているように見受けられ、armdilloのNetworkManagerの動きが気になっています。

LTEは設置場所によって通信状況が大きく変化しますので、LTEを使用する場合はLTE再接続機能を有効にすると動作は安定します。
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…

「SIMカードの認識やLTE通信のリトライが繰り返されている」とのことであるため、LTE再接続機能は有効でこれが実行されているのではと思います。
恐らく現場は、事務所に比べ通信状況が良くなくLTEの通信が安定せず、LTE再接続機能であるEMS31-Jの再起動が実行されているためにこのような状態になっているのではないでしょうか。

以上です。