chosan
2016年7月8日 11時38分
こんにちは
Armadillo IoT G2を10数台運用しているのですが、夜中に1回再起動かけた後に通信ができなくなる現象が時々出てます。
3Gの問題かと考え、色々対応したのですが、それでも発生してしまい困っています。
再起動実験をしていると、下記のようにプログラムの一部が化けている場合があるようです。
ファイル名:/usr/lib/ruby/2.2.0/openssl/digest.rb
通常: superのあたり klass = Class.new(self) { define_method(:initialize, ->(data = nil) {super(name, data)}) } NGケースその1 klass = Class.new(self) { define_method(:initialize, ->(data = nil) {sHp?^@(name, data)}) } NGケースその2 klass = Class.new(self) { define_method(:initialize, ->(data = nil) {s^L^@^@^@(name, data)}) }
再起動後におかしくなった後に、デバッグケーブルを繋いで発生箇所をコピーしました。
プログラムはRubyのOpenSSLの中のファイルでして、そこが壊れると通信がまともに動かないので話になりません。
他にも化けているかもしれませんが、特定てきていません。
不思議なのがいつも化けるのが同じファイルのsuperの部分なのですが・・・
ユーザーランドは開発ドキュメント通りにコンパイルし、下記のように書き込んでいます。
netflash -b -k -n -u -s -r /dev/flash/userland http://弊社のサーバー/romfs.img.gz
再現性:
調子がいい時は20回再起動しても発生しませんが、悪い時は5回、8回で発生しています。
特定1台だけで発生するわけではなく、複数台で発生します。
質問:
・こういったプログラムの化けは発生するのが普通ですか?
・文字化けしないようにするには、どう対処するのがよいのでしょうか?
・再起動するしかありませんかね?
以上
コメント
chosan
at_takashi.sasayama
chosan
そうですか、普通ではないですか。
問題が発生するArmadillo IoTは遠方に設置しているのと、発生時には3G経由でログインできない状態になってしまうので、状態の確認ができないのですよ。
今回、プログラム化けが発見できたのは、手元にある1台だけです。
複数台で発生していると記載したのは、3Gが通信できなくなってしまう症状が似ているので、推測です。
3Gが通信できなくなってしまう現象は、PINGしてダメだったらifdown,ifupしてみて、どうにもダメだったら再起動する処理を入れて、解決できたかなと思っていたのです。それでも発生するので、調査してみたら、プログラム化けだったというわけです。
手元にIoTが複数台手に入ったら再調査してみます。
chosan
2016年7月8日 11時45分
ちなみにカーネルまわりはlinux-3.14-at3とatmark-dist-20150918です。