4

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

私はここで私たちの問題を広範囲に文書化しました。

特に、私が注意するところ:

CLからJavaコマンドとしてビルドを直接実行すると、「-optimizeshrinksafe」スイッチを使用して失敗しますが、成功しません(internStringsのみを使用して実行すると、他のエラーが発生するようです)。

opttimizeのデフォルトはshrinksafeであると私は信じているので、これをどうすればよいかわかりませんが、私は次のことを決定しました。

作品:

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 \ generate \ general \ comComplete.profile.js --action release --releaseDir C:\ company \ builds \ head \ build \generated \ general \ htdocs \ company \ javascript \ 1420

壊れた(メモリ不足エラー):

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 \ generate \ general \ comComplete.profile.js --action release --releaseDir C:\ company \ builds \ head \ build \generated \ general \ htdocs \ company \ javascript \ 1420 --optimizeshrinksafe --internStrings true

残念ながら、次のantスクリプトターゲットは引き続きメモリエラーで失敗します。

BuildNum:$ {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" Filtering = "yes"overwrite ="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"/>

またmaxmemory、antjavaタスク自体の設定を使用します。

4

1 に答える 1

3

最終的に問題が見つかりました。 releaseDir スイッチ値には、Windows と UNIX の両方のファイル区切り文字が含まれていました。Dojo < 1.6 では問題なく動作していましたが、通常 Java では問題ありません。その場合、なんらかの理由で Dojo 1.7 ビルド・システムでメモリーの問題が発生します。

質問から ant トークンを解決した後、releaseDir には、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}" />
于 2012-06-24T22:29:52.697 に答える