When the customer changes their GC configuration, they start seeing one of two "unexpected Signal" crashes, shown below. This only happens so far on their production system under load - all attempts to build a reproduction has so far failed.
The customers initial description:
JVM crashes / core dumps under load after tuning garbage collection parameters. Original parameters were causing frequent Full GCs (even with lots of memory available), revised parameters had the desired effect of only doing Full GCs when the heap was full, however the JVM consistently dies under load.
Original parameters (currently running - changes rolled back):
JAVA_OPTS="-Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFFF -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFFF -server -XX:SoftRefLRUPolicyMSPerMB=20000 -Xconcurrentio -Xms1536m -Xmx1536m -XX:PermSize=32m -XX:MaxPermSize=128m -XX:+UseParallelGC -Xverify:none -XX:NewSize=256m -XX:MaxNewSize=256m -XX:SurvivorRatio=20000 -XX:MaxTenuringThreshold=0 -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCTimeStamps -Xloggc:/opt/prod/jboss/server/bridges/log/jboss4_gclog.log"
New parameters (that cause JVM crash):
JAVA_OPTS="-server -Xconcurrentio -Xms1536m -Xmx1536m -XX:PermSize=32m -XX:MaxPermSize=128m -XX:+UseParallelGC -XX:-UseAdaptiveSizePolicy -Xverify:none -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/prod/jboss/server/bridges/log/jboss4_gclog.log"
Platform information:
2 * Sun Fire 880, dual 750MHz CPUs, 4GB RAM.
Solaris 9
Java 2 SE 1.4.2_04 (product list above only has up to 1.4.1_02???)
JBoss 3.2.3 / Tomcat 4.1.29
Clustered web applications
DESCRIPTIONEND
TESTCASEBEGIN
Have been unable to create a reproducible test case. Two dumps below (one from each node in the cluster). The failures occured while performing the same operation (dynamically rending a chart - code has been in product for 18mths unchanged)
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : 10 occurred at PC=0x8E3478C0
Function=Java_sun_dc_pr_PathStroker_reset+0x54
Library=/apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libdcpr.so
Current Java thread:
at sun.dc.pr.PathStroker.reset(Native Method)
at sun.dc.pr.Rasterizer.reset(Rasterizer.java:711)
at sun.java2d.pipe.DuctusRenderer.dropRasterizer(DuctusRenderer.java:55)
- locked <0xf374e3e0> (a java.lang.Class)
at sun.java2d.pipe.DuctusShapeRenderer.renderPath(DuctusShapeRenderer.java:109)
at sun.java2d.pipe.DuctusShapeRenderer.fill(DuctusShapeRenderer.java:49)
at sun.java2d.pipe.ValidatePipe.fill(ValidatePipe.java:119)
at sun.java2d.SunGraphics2D.fill(SunGraphics2D.java:2157)
at org.jfree.chart.renderer.BarRenderer.drawHorizontalItem(Unknown Source)
at org.jfree.chart.renderer.BarRenderer.drawItem(Unknown Source)
at org.jfree.chart.plot.CategoryPlot.render(Unknown Source)
at org.jfree.chart.plot.CategoryPlot.draw(Unknown Source)
at org.jfree.chart.JFreeChart.draw(Unknown Source)
at org.jfree.chart.JFreeChart.createBufferedImage(Unknown Source)
at org.jfree.chart.JFreeChart.createBufferedImage(Unknown Source)
at bridges.cx04.presentation.action.GetChartAction.writeImage(GetChartAction.java:243)
at bridges.cx04.presentation.action.GetChartAction.execute(GetChartAction.java:104)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
Dynamic libraries:
0x10000 /opt/prod/j2sdk1.4.2_04/bin/java
0xff380000 /usr/lib/libthread.so.1
0xff3b0000 /usr/lib/libdl.so.1
0xff280000 /usr/lib/libc.so.1
0xff370000 /usr/platform/SUNW,Sun-Fire-880/lib/libc_psr.so.1
0xfec00000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/server/libjvm.so
0xff240000 /usr/lib/libCrun.so.1
0xff220000 /usr/lib/libsocket.so.1
0xfeb00000 /usr/lib/libnsl.so.1
0xfeab0000 /usr/lib/libm.so.1
0xff200000 /usr/lib/libsched.so.1
0xff270000 /usr/lib/libw.so.1
0xfebe0000 /usr/lib/libmp.so.2
0xfea80000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/native_threads/libhpi.so
0xfea60000 /usr/lib/nss_files.so.1
0xfea20000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libverify.so
0xfe9e0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libjava.so
0xfe9c0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libzip.so
0xfc7a0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libnet.so
0x916d0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/librmi.so
0x8fd90000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libioser12.so
0x8e9c0000 /usr/lib/nss_dns.so.1
0x8e620000 /usr/lib/libresolv.so.2
0x83800000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libawt.so
0x89900000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libmlib_image.so
0x8e440000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/headless/libmawt.so
0x83700000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libfontmanager.so
0x8e340000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libdcpr.so
0x8e230000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libjpeg.so
Heap at VM Abort:
Heap
PSYoungGen total 229376K, used 112846K [0x91800000, 0xa1800000, 0xa1800000)
eden space 196608K, 40% used [0x91800000,0x96637098,0x9d800000)
from space 32768K, 99% used [0x9d800000,0x9f7fc7f0,0x9f800000)
to space 32768K, 0% used [0x9f800000,0x9f800000,0xa1800000)
PSOldGen total 1310720K, used 1126174K [0xa1800000, 0xf1800000, 0xf1800000)
object space 1310720K, 85% used [0xa1800000,0xe63c7ab8,0xf1800000)
PSPermGen total 77312K, used 51200K [0xf1800000, 0xf6380000, 0xf9800000)
object space 77312K, 66% used [0xf1800000,0xf4a00198,0xf6380000)
Local Time = Thu Sep 30 09:47:02 2004
Elapsed Time = 42828
#
# The exception above was detected in native code outside the VM
#
# Java VM: Java HotSpot(TM) Server VM (1.4.2_04-b05 mixed mode)
#
Abort - core dumped
Thu Sep 30 09:52:58 EDT 2004
================================================================================
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : 11 occurred at PC=0x8E9AFB5C
Function=[Unknown. Nearest: Java_sun_dc_pr_PathStroker_cInitialize+0x7B14]
Library=/apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libdcpr.so
Current Java thread:
at sun.dc.pr.PathDasher.setDash(Native Method)
at sun.dc.pr.Rasterizer.setDash(Rasterizer.java:334)
at sun.java2d.pipe.DuctusRenderer.createShapeRasterizer(DuctusRenderer.java:269)
at sun.java2d.pipe.DuctusShapeRenderer.renderPath(DuctusShapeRenderer.java:57)
at sun.java2d.pipe.DuctusShapeRenderer.draw(DuctusShapeRenderer.java:45)
at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2129)
at org.jfree.chart.renderer.AbstractCategoryItemRenderer.drawRangeGridline(Unknown Source)
at org.jfree.chart.plot.CategoryPlot.drawGridlines(Unknown Source)
at org.jfree.chart.plot.CategoryPlot.draw(Unknown Source)
at org.jfree.chart.JFreeChart.draw(Unknown Source)
at org.jfree.chart.JFreeChart.createBufferedImage(Unknown Source)
at org.jfree.chart.JFreeChart.createBufferedImage(Unknown Source)
at bridges.cx04.presentation.action.GetChartAction.writeImage(GetChartAction.java:243)
at bridges.cx04.presentation.action.GetChartAction.execute(GetChartAction.java:104)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at bridges.authPortal.presentation.filters.AuthFilter.doFilter(AuthFilter.java:238)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at bridges.cx04.presentation.filter.AttackDetectFilter.doFilter(AttackDetectFilter.java:163)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at bridges.cx04.presentation.filter.PreviewHostFilter.doFilter(PreviewHostFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:220)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.jboss.web.tomcat.tc4.statistics.ContainerStatsValve.invoke(ContainerStatsValve.java:76)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.jboss.web.tomcat.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:78)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:197)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
at java.lang.Thread.run(Thread.java:534)
Dynamic libraries:
0x10000 /opt/prod/j2sdk1.4.2_04/bin/java
0xff380000 /usr/lib/libthread.so.1
0xff3b0000 /usr/lib/libdl.so.1
0xff280000 /usr/lib/libc.so.1
0xff370000 /usr/platform/SUNW,Sun-Fire-880/lib/libc_psr.so.1
0xfec00000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/server/libjvm.so
0xff230000 /usr/lib/libCrun.so.1
0xff210000 /usr/lib/libsocket.so.1
0xfeb00000 /usr/lib/libnsl.so.1
0xfeab0000 /usr/lib/libm.so.1
0xff1f0000 /usr/lib/libsched.so.1
0xff260000 /usr/lib/libw.so.1
0xfebd0000 /usr/lib/libmp.so.2
0xfea80000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/native_threads/libhpi.so
0xfea60000 /usr/lib/nss_files.so.1
0xfea10000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libverify.so
0xfe9d0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libjava.so
0xfe9b0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libzip.so
0xfc7a0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libnet.so
0x916b0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/librmi.so
0x8fa60000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libioser12.so
0x8eea0000 /usr/lib/nss_dns.so.1
0x8eca0000 /usr/lib/libresolv.so.2
0x83c80000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libawt.so
0x89080000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libmlib_image.so
0x8e9e0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/headless/libmawt.so
0x83580000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libfontmanager.so
0x8e9a0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libdcpr.so
0x8e7b0000 /apps/prod/j2sdk1.4.2_04/jre/lib/sparc/libjpeg.so
Heap at VM Abort:
Heap
PSYoungGen total 229376K, used 175978K [0x91800000, 0xa1800000, 0xa1800000)
eden space 196608K, 89% used [0x91800000,0x9c3daa18,0x9d800000)
from space 32768K, 0% used [0x9d800000,0x9d800000,0x9f800000)
to space 32768K, 0% used [0x9f800000,0x9f800000,0xa1800000)
PSOldGen total 1310720K, used 412969K [0xa1800000, 0xf1800000, 0xf1800000)
object space 1310720K, 31% used [0xa1800000,0xbab4a5d0,0xf1800000)
PSPermGen total 88832K, used 52698K [0xf1800000, 0xf6ec0000, 0xf9800000)
object space 88832K, 59% used [0xf1800000,0xf4b76b98,0xf6ec0000)
Local Time = Thu Sep 30 08:41:59 2004
Elapsed Time = 39438
#
# The exception above was detected in native code outside the VM
#
# Java VM: Java HotSpot(TM) Server VM (1.4.2_04-b05 mixed mode)
#
space 196608K, 89% used space 32768K, 0% used space 32768K, 0% used space 1310720K, 31% used space 88832K, 59% used# An error report file has been saved as
hs_err_pid1150.log.
# Please refer to the file for further information.
#
Abort - core dumped
Thu Sep 30 09:53:55 EDT 2004
================================================================================
I've got too stack traces off them, which are tarballed up and attached. Further investigation has suggested a connection to 4587651, in that this is happening in Java2D in a way similar to the Double.NaN problem seen there but as yet not fixed. But that doesn't explain why it only happens under load with these GC arguments. Even so, last night they upgraded their hardware and tonight they will change to non anti-aliased, both to see if it helps solve the problem.
The customer Describes their product as:
Bridges products are subscribed to primarily by high-schools throughout
the US and Canada. Our clients use these products as a core part of
their curriculum, and depend heavily on the products being highly
available and performant in a classroom situation, where time is very
prescious.
###@###.### 10/6/04 09:36 GMT