我注意到,执行大型的主要是 Junit 3.x 测试套件会导致 Eclipse 自行运行并锁定。即使我分配了很多堆和 perm gen(1200m 和 400m),它也会嗡嗡作响,然后只是冻结然后继续,需要相当长的时间。如果我小批量运行测试,那么事情会很快,而且几乎不会发生冻结。
我在测试运行时检查了内存使用情况,对于给定的最大堆或 perm,它们都没有接近最大值,所以这些应该不是问题......
有没有人有关于如何解决这个问题的提示。
这可能已经是您尝试过的东西,但是……如果您将单元测试作为“JUnit 插件测试”运行……那么您在 eclispe.ini 中对 Xmx 和 MaxPermSize 的设置将毫无用处。
eclipse.ini 设置允许您更改当前 Eclipse 的设置。从此 Eclipse 生成的任何 Eclipse 实例仍将具有默认设置(例如 Xms40m 和 Xmx512m)。您还必须更改这些。
打开用于测试的启动配置(“运行 > 运行配置...”,选择用于启动单元测试的配置)并转到“参数”选项卡。在那里,在“VM Arguments”文本区域中,输入您在 eclipse.ini 文件中所做的新内存设置(我-Xms256m -Xmx1536m -XX:MaxPermSize=256m
用于最昂贵的测试套件......但您可能需要更多)。
但主要问题可能是尝试修复单元测试的潜在内存泄漏。你确定你没有更多的卸载/内存释放/......在tearDown()
吗?在分析下运行您的测试可能会有所帮助(我们在我工作的地方使用 Yourkit java 分析器...但它不是免费的。JConsole 可能会帮助您,另请参阅http://java.sun.com/developer/technicalArticles /J2SE/jconsole.html )。
不允许评论,因此在此处添加它..您已检查内存,因此该选项已关闭
其他几件事可以尝试:
我不确定,如果您尝试在 junit 上使用 fork 选项。
它是一次又一次地重建目标类吗?你能看目标文件夹吗?
您是否尝试重新创建工作区?之所以提出这个建议,是因为您似乎已经涵盖了主要问题 - 内存、日志记录等。
您的程序中可能存在某种内存泄漏,只有在您运行所有测试时才会出现。如果您在外部运行测试,您没有提到是否会遇到同样的问题。
我建议在冻结时运行某种内存分析器。像 MAT http://www.eclipse.org/mat/这样的东西过去曾帮助过我。您还可以尝试运行多个 jstack 会话,以了解随着时间的推移发生了什么。