Soracom LTEでクラウドにBLEセンサーのデータ送信してたGWが止まってしまった件の原因と解決方法

BLEデバイスのゲートウェイとして利用しているRaspberry Pi4がデータを送信しなくなる不具合が発生。電源を再度オフ&オンしても数日すると再発という状況。

原因はラズパイのLxPanelのメモリーリークだったので原因特定にいたった過程と対処方法をご紹介します。

機器構成

使用機材は下記の通り。

  • サーバー:Raspberry Pi4G(2G)
  • LTEモデム:Soracom Onyx – LTE™ USB ドングル (SC-QGLC4-C1)
  • SIM:Soracom Plan-D300
  • BLEセンサー:温湿度計を10台程度

ラズパイにLTE USBドングルを差し込みSoracomのPlan-D300を使ってクラウドに送っております。

Soracomコンソール セッション詳細

Soracomコンソールからセッション詳細を確認。

イベントとして、Deletedが発生しており、その後、接続が復活することなく、再度、ラズパイをリセットしないと復帰できない状況でした。

ラズパイの状況をGrafanaで記録

ゲートウェイでは、 node-red-contrib-cpu node-red-contrib-os を使ってゲートウェイの状態を取得することができます。

Grafanaで推移を確認すると、CPUメモリ使用率(赤)が100%になり、その後、データが落ちていることが確認できました。

SSHで接続 TOPコマンドで確認

sshでゲートウェイに接続し、topコマンドで確認したところ、lxpanelというプロセスが他よりも多くのVIRT(仮想メモリサイズ Virtual Memory Size)を消費しているのが確認できました。

つまり、このVIRTが100%になることでゲートウエイがフリーズして、通信が切断されている可能性が高いことがわかりました。

もともとlxpanelは毎日3時に再起動するcronを動かしていたのですが、その頻度を上げることにしました。

1時間に1回 lxpanelを再起動するcronを設定

corntabを編集します。

今は毎日3時に再起動しているので

0 * * * * export DISPLAY=":0.0" && lxpanelctl restart

このように、1時間に1回、再起動するように設定しました。

結果

結果、データ送信がされない不具合は再発しなくなりました。

GrafanaでCPUメモリ使用率(赤)を確認すると、

ー 昼間になると使用率が上がる

ー 平日の昼間は上がるが、土日は上がらない

ということから、設置した空間の使用人数が増えるとCPUメモリ使用率が上がることがわかり、おそらく、BLEデバイスが増えたことで、BLE Scan自体のメモリ負担が増えてくるのではないかと考えました。

まとめ

以上、弊社が経験したSoracomのLTE通信で現場BLEデバイスのデータを送るゲートウェイがデータ送信できなくなる問題について、原因の解明プロセスと解決方法をご紹介しました。