java.lang.OutOfMemoryError:Java 堆空间 - Appium - TestNG 套件

Posted

技术标签:

【中文标题】java.lang.OutOfMemoryError:Java 堆空间 - Appium - TestNG 套件【英文标题】:java.lang.OutOfMemoryError: Java heap space - Appium - TestNG Suite 【发布时间】:2015-05-28 14:29:08 【问题描述】:

我们在 Windows 机器上运行 Appium android 测试脚本执行时看到 Java 堆空间异常。我们使用 Apache POI 读取测试数据表。直到第 11 个脚本套件运行良好,从第 12 个脚本开始看到 Java 堆空间异常。

我在系统环境变量中增加了堆和预置空间enter code here,并在 Eclipse 中增加了 TestNG 运行配置。有时没有问题,有时会遇到 Java 堆空间异常。

根据以下消息,我怀疑使用 fileinputstream 读取测试数据表,根据其他论坛,尽管测试数据没有大量数据,但加载时需要更多内存。

我使用的代码是:

File strExecutionConfigFile = new File(
            strImportedExecutionConfigFilePath);

try 
        strInputExecutionConfigFile = new FileInputStream(
                strExecutionConfigFile);
     catch (FileNotFoundException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    

    try 
        objExecutionConfigWKB = new XSSFWorkbook(
                strInputExecutionConfigFile);
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    

我看到 XSSF 阅读器格式会消耗低内存。可以提供这方面的代码。

您可以访问以下链接了解 Java 堆空间异常

https://app.box.com/s/9t3or72lk44liolz8x22n9s0pk2klrna

【问题讨论】:

【参考方案1】:

您需要检查堆转储。添加以下虚拟机参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/location

下次获得 OOME 时,这将转储类似以下内容

java_pid27643.hprof

然后使用 jvisualvm 来加载 heapdump。 linux中的命令是:

$ jvisualvm &

您将需要加载并检查转储文件并尝试找出导致 OOME 的原因。文档here

【讨论】:

以上是关于java.lang.OutOfMemoryError:Java 堆空间 - Appium - TestNG 套件的主要内容,如果未能解决你的问题,请参考以下文章