嵌入式Java应用程序崩溃,没有例外也没有明显的原因

时间:2012-04-13 15:57:13

标签: java embedded busybox

我有一个在嵌入式Linux上运行的Java应用程序(BusyBox v1.12.4)。我使用的是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;
}

添加此功能后,应用程序开始崩溃!日志没有包含任何内存错误或异常,并且它运行的系统缺少正确的配置,因此系统日志也没有显示任何内容(设备制造商告诉我它将可用)在即将推出的版本中)。我甚至无法在调试模式下启动VM!

我必须补充说,应用程序在压缩过程中不会崩溃,它只会在执行过程中随机崩溃。问题是它只在启用压缩时崩溃!

以前有人见过这个吗?有没有人知道如何调试/解决这个问题?

2 个答案:

答案 0 :(得分:0)

我怀疑的第一件事是由gzip压缩引擎的执行引起的内存不足情况。尝试在shell中调用dmesg以查看kernel OOM killer是否牺牲了任何进程。

其他一些尝试:

  • 删除v的{​​{1}}标记:您似乎不需要额外的输出,可能会导致某种问题,具体取决于在你确切的环境。

  • 在没有tar选项的情况下使用tar:如果在禁用压缩的情况下崩溃消失,则可能是内存问题。

  • 尝试z,这是您可以开始的最简单的外部流程之一,而不是cat,看看会发生什么。

  • 对硬件进行压力测试:使用压缩可能只会暴露通常不可见的潜在过热或数据损坏问题。

答案 1 :(得分:0)

我首先看看JVM的退出代码 - 它会告诉你它是否死于信号,如果是,那么。