【问题标题】:Dojo 1.7 Build: Out of Memory ErrorsDojo 1.7 构建:内存不足错误
【发布时间】:2012-06-22 01:02:49
【问题描述】:

升级到 Dojo 1.7.3 后,我们在以前版本的 Dojo 上运行多年的 ant 构建由于内存不足错误现在完全无法运行:

[java] starting writing resources...
[java] java.lang.OutOfMemoryError: GC overhead limit exceeded
[java]     at org.mozilla.javascript.Interpreter.getArgsArray(Interpreter.java:4623)
[java]     at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3335)
[java]     at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2484)
[java]     at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
[java]     at org.mozilla.javascript.NativeArray.iterativeMethod(NativeArray.java:1565)
[java]     at org.mozilla.javascript.NativeArray.execIdCall(NativeArray.java:313)
[java]     at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127)
[java]     at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3335)
[java]     at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2484)
[java]     at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
[java]     at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2347)
[java]     at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:272)
[java]     at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76)
[java]     at org.mozilla.javascript.gen.c1._c62(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
[java]     at org.mozilla.javascript.gen.c1._c69(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
[java]     at org.mozilla.javascript.gen.c1._c40(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
[java]     at org.mozilla.javascript.gen.c1._c42(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3335)
[java]     at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2484)
[java]     at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
[java]     at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2347)
[java]     at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:272)
[java]     at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76)
[java] js: exception from uncaught JavaScript throw: java.lang.OutOfMemoryError: GC overhead limit exceeded

我已经详细记录了我们的麻烦here

我特别指出:

如果我直接从 CL 作为 Java 命令运行我的构建,使用 ' --optimize shrinksafe" 开关,它会失败,但没有它会成功。(单独使用 internStrings 运行它似乎会导致其他错误)。

不知道该怎么做,因为我相信优化默认值 收缩安全,但我已经确定了以下内容:

作品:

c:\temp\dojo-release-1.7.3rc1-src\util\buildscripts>java -Xms256m -Xmx256m -cp ../shrinksafe/js.jar;../closureCompiler/compiler.jar;../shrinksafe/shrinksafe.jar org.mozilla.javascript.tools.shell.Main ../../dojo/dojo.js baseUrl=../../dojo load=build -p C:\company\builds\head\build\generated\general\comComplete.profile.js --action release --releaseDir C:\company\builds\head\build\generated\general\htdocs\company\javascript\1420

BROKEN(内存不足错误):

c:\temp\dojo-release-1.7.3rc1-src\util\buildscripts>java -Xms256m -Xmx256m -cp ../shrinksafe/js.jar;../closureCompiler/compiler.jar;../shrinksafe/shrinksafe.jar org.mozilla.javascript.tools.shell.Main ../../dojo/dojo.js baseUrl=../../dojo load=build -p C:\company\builds\head\build\generated\general\comComplete.profile.js --action release --releaseDir C:\company\builds\head\build\generated\general\htdocs\company\javascript\1420 --optimize shrinksafe --internStrings true

不幸的是,以下 ant 脚本目标继续失败 内存错误:

构建编号:${buildNum}

  <path id="js.path">             <pathelement location="${basedir}"/>
  </path>

  <pathconvert targetos="unix" property="js.path.unix" refid="js.path"

/> js.path.unix: ${js.path.unix}

  <!-- clean unpack and output dirs -->       <delete

dir="${outputDir}/htdocs/company/javascript/src/" />

  <copy file="${externalDir}/dojo/companyComplete.profile.js"

tofile="${outputDir}/companyComplete.profile.js" 过滤="yes" 覆盖=“是”>

  <java fork="true"
      dir="${outputDir}/htdocs/company/javascript/src/util/buildscripts"
      classname="org.mozilla.javascript.tools.shell.Main"

failonerror="true"> --> --> --> -->


更新 1

我也试过了:

<jvmarg value="-Xms5120m"/>
<jvmarg value="-Xmx5120m"/>

并且还使用 ant java 任务本身的maxmemory 设置。

【问题讨论】:

  • 我认为仅仅增加可用内存不是一种选择? 256m 对于构建来说似乎很小。 1g能成功吗?
  • 我已经尝试过使用多达 5 GB 的堆空间。没爱。 (感谢观看)
  • 来自singztechmusings.wordpress.com/2011/01/05/… 也许尝试禁用该错误?我猜这不会有帮助,但值得一试。添加此标志以禁用该特定异常 -XX:-UseGCOverheadLimit
  • @jjathman 在这种情况下我得到js: exception from uncaught JavaScript throw: java.lang.OutOfMemoryError: Java heap space

标签: java javascript ant build dojo


【解决方案1】:

终于找到问题了,releaseDir开关值里面有windows和unix文件分隔符。过去在 Dojo

releaseDir 在解决问题中的 ant 标记后,混合了 unix 和 windows 文件分隔符:

<arg value="releaseDir=${output.dir}/path/foo/bar" /> 
-> Became -> 
releaseDir=blah\blah\blah/path/foo/bar

这足以导致构建在“写入资源”时锁定,然后因“堆空间不足”而崩溃。 (这是 Java 通常可以毫无问题地处理的事情)。

修复很简单:

<path id="dojo.output.tmp">
    <pathelement location=" ${output.dir}/path/foo/bar "/>
</path>

<pathconvert targetos="unix" property="dojo.output.dir" refid="dojo.output.tmp" />
...
<arg value="releaseDir=${dojo.output.dir}" />

【讨论】:

  • 我在没有 ant 的情况下遇到了同样的问题,只是尝试使用 Windows 使用 1.8.2 下的批处理文件进行构建。如果在定义 releaseDir 时不使用 Unix 样式的“/”,似乎会出现问题。如果您使用 Windows 样式的“\”,您会在 writeResources 处得到内存错误,如所述。
猜你喜欢
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2012-07-09
  • 2015-09-20
相关资源
最近更新 更多