我们已经为我们的项目创建了自定义的测试自动化框架。这模拟了使用HTTP客户端的浏览器和服务器之间的交互(主要是GET和POST请求中的json双向数据流)。
这里很热,我们有大约1000个自动化的测试用例。测试用例的执行包括创建大量的消息,从而创建大量的字符串;重复读取大文件并验证内容,并在获得验证结果后抛出所有内容。它适用于所有的测试用例,需要15到20个小时。
问题是,我们遇到了OutOfMemory错误。有什么想法吗?;关于清理从100MB - 250MB的大文件读取和解析后消耗的内存。有许多拆分、替换、子串操作正在进行。
请问,有没有人能提供一些建议和建议?
提前使用-Thanks
发布于 2015-08-07 19:40:50
当由于内存空间不足而无法分配对象,并且垃圾收集器无法释放一些空间时,Java虚拟机(JVM)会抛出此错误。当禁用抑制和/r堆栈跟踪不可写时,OutOfMemoryError对象由JVM创建。
针对OutOfMemoryError的解决方案:JavaJava1.Java对此错误最明显的解决方案是增加虚拟机的可用内存大小。如果您的应用程序需要更多内存,则应将其授予您的应用程序。
2.验证您的应用程序没有存储不必要的信息。只存储和维护Java应用程序正确执行所需的那些信息。
3.您可以使用可用的内存分析器工具,以便仔细观察应用程序占用的内存部分。此类工具的示例有Eclipse Memory Analyzer(http://www.eclipse.org/mat/)和Java Heap Analysis Tool (jhat)(http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html)。
JVM 4.尝试配置您的使用更多的内存,如前面所示(-Xms750m -Xmx2048m -XX:MaxPermSize=1024m )。
5.启用垃圾收集日志记录(-Xloggc:/var/log/YOUR_APP/YOUR_APP-gc.log)并查看它的行为,堆是如何增长的。你可能有一个内存泄漏。
6.如果是这样的话,获取一个HeapDump,使用YourKit打开它,并查找使用最大内存量的对象。试着找出原因并解决它。
7.您可以使用以下命令调用垃圾收集器:
System.gc();在调用垃圾收集器方法时,建议Java虚拟机努力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。当控制从方法调用返回时,Java虚拟机已经尽了最大努力从所有被丢弃的对象中回收空间。
JVM决定何时执行它。通常,如果JVM将要抛出一个OutOfMemoryError,那么调用System.gc()并不能阻止它。最好调查一下为什么会泄漏这么多内存,并在此过程中将其清理干净。但这并不意味着它会立即执行。
有关如何使用JavaSE6调优垃圾收集的详细信息,请阅读有关JVM Garbage Collection Tuning SE 6 HotSpot的更多信息。
希望这能对你有所帮助。
发布于 2015-08-07 19:41:12
通常,您应该确保最大化可用于垃圾回收的对象。要做到这一点,一种方法是在尽可能窄的范围内声明变量。(例如:在try块中,使用方法局部变量)
您可能还必须使用increase Java heap size。
发布于 2015-08-07 19:41:59
您可以显式地将对象设置为null。
甚至你也可以调用System.gc();
https://stackoverflow.com/questions/31876629
复制相似问题