使用mvn插件执行工程单元测试OOM的解决办法

标签: mvn 插件 工程 | 发表时间:2012-07-12 16:39 | 作者:e5945
出处:http://blog.csdn.net

         问题:同事的一个工程最近几天使用mvn test跑单元测试回归时,每天都会报“org.apache.maven.surefire.booter.SurefireExecutionException:PermGen space; nested exception is java.lang.OutOfMemoryError: PermGen space”这个错误。

        拿到问题后,我第一想法就是让他去maven_home/bin目录下的mvn文件中增加MAVEN_OPTS参数来调整PermGen的大小,给了她这个设置:MAVEN_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128m-XX:MaxPermSize=128m。由于这个问题也是偶发,改了之后的两天,确实没有再重现了。但第三天,她又给了我一样的报错截图....

         于是纠结了......没有思路.......

         然后,无意中发现一个现象,当我执行mvn test的时候,通过ps -ef | grep java查看当前机器运行的的java进程,发现除了执行maven主程序的java进程,伴随的还有一个带了很多surefire字样的java进程,之前只见过maven有一个surefire这个名字的插件,但一点都不熟悉。这时马上有一个怀疑:单元测试类不是在maven的主进程中执行的,所以我加了MAVEN_OPTS之后执行测试时PermGen还是内存不足。于是去搜了一下,看到了这个帖子: http://www.cnblogs.com/discuss/archive/2010/10/27/1862225.html,有了结论:在执行mvn test时,maven会启动一个fork进程来运行所有的单元测试类,所以我需要设置的是这个fork进程的jvm参数。

         这个参数配置也不好找,网上有一片surefire参数配置的文章,但是里面没有提到如何配置jvm启动参数,情急之下我还找了surefire人员的开发人员邮件组,用蹩脚英文写了封邮件,过了一会又回信,开心了一把,打开一看,是系统退信…..

         不过最终还是让我找到了 http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html这个地址,在这篇文章的最末尾,看到了<argLine>….</argLine>的配置,于是在单元测试的工程中加了插件的配置,如下所示:

这里的配置还有一个provider配置的问题,默认情况下surefire会根据工程中junit的版本来选择provider等,具体的解释可以看: http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html

问题解决了之后倒是冒出关于这个插件更丰富的配置的文章: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html,在这里甚至发现了一个forkMode的参数,原来运行mvn test也不是一定要启动另外一个fork进行的,通过forkMode可以修改这个配置,forkMode默认值是once,把forkMode参数设置成never,单元测试跑的时候就会由maven的主进程来跑了,也就是说这时候再通过MAVEN_OPTS来进行设置jvm参数也是可以行得通的了。

 

作者:e5945 发表于2012-7-12 16:39:17 原文链接
阅读:0 评论:0 查看评论

相关 [mvn 插件 工程] 推荐:

使用mvn插件执行工程单元测试OOM的解决办法

- - CSDN博客推荐文章
         问题:同事的一个工程最近几天使用mvn test跑单元测试回归时,每天都会报“org.apache.maven.surefire.booter.SurefireExecutionException:PermGen space; nested exception is java.lang.OutOfMemoryError: PermGen space”这个错误.

jquery 插件

- - JavaScript - Web前端 - ITeye博客
 jQuery插件的开发包括两种:. 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法. jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级别的插件开发,即给jQuery对象添加方法. 下面就两种函数的开发做详细的说明. 1 、类级别的插件开发.

XBMC 优酷插件

- iworm - Wow! Ubuntu
才知道,原来优酷还有 XMBC 的 Linux 版插件,这下看 Youku 视频就更加方便了,以下是安装方法. 1 安装 XBMC :XBMC 是支持跨平台的开源家庭多媒体娱乐中心软件,想安装最新版 XBMC 请查看此文. 2 解决乱码 : XBMC 在我的英文界面下中文会显示乱码,这是由字体原因引起的,所以先要解决此问题.

Menu - 菜单插件

- Xin - 博客园-首页原创精华区
    1)Lava Lamp基于JQuery 的水平滑动导航条.      2)jQuery.dropmenu这个插件能够将标准的UL元素转换成一个包含子菜单的下拉菜单. 易于使用,风格样式采用CSS控制.       3)JQuery Context Menu Plugin是一个非常轻便的jQuery右键菜单插件.

eclipse插件-easy explore

- - 博客园_首页
最近找到一个Eclipse的插件,名字是Easy Explore,是 Easy Structs 其 中的一个部分. 主要的功能就是在Eclipse里面视图的部分如果看到自己的工程,或者Package,包什么的,在安装完该插件以后点击鼠标右键,选 择"Easy Explore"就可以快速的打开该文件的windows存放文件夹,对于快速的导出源文件是一个很有用的插件.

Charts - 图表插件

- 天使羊 - 博客园-首页原创精华区
       Charts - 图表插件.        1)Highstock 可让你使用纯 JavaScript 创建股票或者通用的时间线图表.       2)Smoothie Charts是一个小型图表生成脚本,专为生成实时数据图表而设计. 比如可以用于生成CPU使用情况的图表.       3)JQuery Gantt Chart这是一款jQuery图表插件,可以实现甘特图.

redmine 插件管理

- - 研发管理 - ITeye博客
work Time_工数管理. Knowledgebase_知识库. Timesheet_时间管理. Screenshot Paste_截屏. 参考: http://wmcxy.blog.51cto.com/2509483/842296. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.

常用JQuery插件整理

- xxg - 博客园-首页原创精华区
  虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来.   jquery.HooRay(哈哈,自己写的插件是必须有的).   jquery UI(官方的UI插件,功能很多,但我只用少数几个).   artDialog(很欣赏这个插件,又强大又美观).

2010年最佳jQuery插件

- seenxu - 博客园新闻频道
在2010年,JavaScript框架继续日渐普及,这使得大量的插件被开发出来. WDL的作者从大量的优秀 jQuery插件精心筛选出一些对Web Designers有帮助的和具备非常不错的视觉效果的Best of the best. 2010年最佳jQuery插件(排名不分先后):. 一个加载设置拥有9种过度效果的超级smooth slider,它还支持如链接图像和键盘导航等内容.

最佳 Firefox SEO 插件:SearchStatus

- 翼翔 - 我爱水煮鱼
Firefox 变得越来越重,但是我一直在使用 Firefox,最大的原因是因为 Firefox 上面的插件,有些神一样的插件,真的可以提高我们的工作效率,今天可以给大家推荐的 SearchStatus,就是 Firefox 上最优秀的 SEO 插件,可以说它是 SEO 神器. 为什么把它说的这么神奇,其实从下图就可以看出:.