OutOfMemoryError creates a clover-snapshot in Ant launched from QuickBuild

I have a QuickBuild server (5.0.14). This is done by the build step using ant.

The Ant target is as follows:

<target name="clover-snapshot" depends="with-clover">
  <clover-snapshot file="${clover.snapshot.file}"/>
</target>

We are using Clover Version 3.1.5.

This step does not work with the following stacktrace command: -

java.lang.OutOfMemoryError: Java heap space
    at com.cenqua.clover.util.CloverBitSet.read(CloverBitSet.java:71)
    at com.cenqua.clover.PerTestRecordingTranscript.read(PerTestRecordingTranscript.java:45)
    at com.cenqua.clover.RecordingTranscripts.readSliceFromDisk(RecordingTranscripts.java:124)
    at com.cenqua.clover.RecordingTranscripts$FileRef.read(RecordingTranscripts.java:354)
    at com.cenqua.clover.CoverageDataCollator.collatePerTestRecordings(CoverageDataCollator.java:156)
    at com.cenqua.clover.CoverageDataCollator.loadCoverageData(CoverageDataCollator.java:68)
    at com.cenqua.clover.CloverDatabase.loadCoverageData(CloverDatabase.java:164)
    at com.cenqua.clover.CloverDatabase.loadCoverageData(CloverDatabase.java:159)
    at com.cenqua.clover.CloverDatabase.loadWithCoverage(CloverDatabase.java:283)
    at com.cenqua.clover.tasks.CloverSnapshotTask.cloverExecute(CloverSnapshotTask.java:51)
    at com.cenqua.clover.tasks.AbstractCloverTask.execute(AbstractCloverTask.java:55)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:392)
    at org.apache.tools.ant.Target.performTasks(Target.java:413)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.Main.runBuild(Main.java:811)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

I take this from a call invoke()in the above that Clover calls reflexively inside the JVM used by ant.

So I tried to allocate more heap space for Ant JVM. I did this by editing the build step in QuickBuild and specifying the following environment variable: -

ANT_OPTS set on -Xmx1024m -Xms512m

This did not solve the problem. (I pulled these numbers out of the air, the maximum size was not calculated in any way.)

, Clover, . , , , ?

+4
3

, . ANT_OPTS - . . 64- JVM? , ?

, :

enter image description here

VisualVM JVM .

+2

ant:

  • ANT_OPTS var. :
    set ANT_OPTS=-Xms256m -Xmx1024m -XX:MaxPermSize=120m

  • maxmeory ant Java. :

<target name="MergingHugeJars"> 
    <echo message="Merging jars ${InputJars} into ${OutputJar}"/>
    <java jvm="${JVM}" classname="com.krishna.test.MergeHugeJars" fork="true" failonerror="true" maxmemory="512m" > 
        <arg line="${OutputJar} ${InputJars}"/>
    </java>
</target> 

maxmemory="512m" .

+1

jstat java- , :

$ jstat -gccapacity 19726
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC 
 42560.0 681984.0  42560.0 5312.0 5312.0  31936.0    85248.0  1363968.0    85248.0    85248.0  21248.0 169984.0  21248.0  21248.0      0     0

Xmx - NGCMX OGCMX. , -Xmx, .

script :

jcmd | grep -v JCmd | while read pid name; do echo -n "Xmx for $name "; jstat -gccapacity $pid | sed '1d' | awk '{ print $2 + $8 " MB" }'; done
Xmx for org.example.MyClass 2045952 MB
+1

All Articles