2

組み込み Linux (BusyBox v1.12.4) で Java アプリケーションを実行しています。CDC 1.1 を使用しており、VM (cvm) のバージョンは CDC HI phoneme_advanced-Core-1.1.2-b111 です。

アプリケーションの主な目的は、いくつかのデータを収集し、GPRS 経由で送信することです (Apache コモンズ ライブラリの FTPClient を使用)。

アプリケーションは正常に動作していましたが、最近、ファイルを送信する前に圧縮する機能を追加しました。以下は、ファイルを圧縮するコードです。

public static boolean compressFile(String file, String fileCompressed)
{
   boolean result = false;

   try
    {
       Process process = Runtime.getRuntime().exec("tar -czvf " + fileCompressed + " " + file);
       System.err.println("Compression in progress");
       int returnValue = process.waitFor();
       System.err.println("Finished compression");
       BufferedReader stderror = new BufferedReader(new InputStreamReader(process.getErrorStream()));

       String s;

       s = stderror.readLine();
       if (s == null)
       {
          result = true;
       } else
       {
          result = false;
       System.err.println(s);
       }
     } catch (IOException e)
     {
          result = false;
          Log.getInstance().newMessage(e.getMessage(), Log.ERROR);

    } catch (InterruptedException e)
    {
          result = false;
          Log.getInstance().newMessage(e.getMessage(), Log.ERROR);
    }

    return result;
}

この機能を追加した後、アプリケーションがクラッシュし始めました! ログにはメモリエラーや例外は含まれておらず、実行されているシステムには正しい構成が欠けているため、syslog にも何も表示されません (機器メーカーは、次のバージョンで利用できるようになると私に言いました)。VM をデバッグ モードで起動することさえできません。

圧縮中にアプリケーションがクラッシュすることはなく、実行中にランダムにクラッシュするだけであることを付け加えておきます。問題は、圧縮が有効になっている場合にのみクラッシュすることです!

誰もこれを見たことがありますか?これをデバッグ/解決する方法について誰か考えがありますか?

4

2 に答える 2

0

まず、JVMの終了コードを確認します。これにより、JVMがシグナルで停止したかどうか、停止した場合はどちらであるかがわかります。

于 2012-04-15T01:57:33.297 に答える
0

私が最初に疑うのは、gzip圧縮エンジンの実行によって引き起こされたメモリ不足の状態です。dmesgシェルで呼び出して、カーネル OOM キラーがプロセスを犠牲にしているかどうかを確認してください。

他にもいくつか試してみてください。

  • vのフラグを削除しtarます。余分な出力は必要ないようです。正確な環境によっては、将来的に何らかの問題が発生する可能性があります。

  • オプションtarなしで使用: 圧縮を無効にしてクラッシュが発生しない場合は、メモリの問題である可能性があります。z

  • catではなく、開始できる最も単純な外部プロセスの 1 つである を試して、tar何が起こるかを確認してください。

  • ハードウェアのストレス テスト: 圧縮を使用すると、通常は見えない根本的な過熱やデータ破損の問題が明らかになる可能性があります。

于 2012-04-13T17:07:02.770 に答える