JVM crash triggered by libtcnative

Solution Verified - Updated -

Issue

  • The JVM appears to be crashing when using the native connectors. The fatal error log shows the following:
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (16.3-b01 mixed mode linux-amd64 )
    # Problematic frame:
    # C  [libtcnative-1.so+0x12a9a]  Java_org_apache_tomcat_jni_Socket_sendbb+0x5a
    
    ---------------  T H R E A D  ---------------
    
    Current thread (0x000000004de56000):  JavaThread "Finalizer" daemon [_thread_in_native, id=29043, stack(0x000000004157e000,0x000000004159f000)]
    
    siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000040
    
    Registers:
    RAX=0x0000000000000000, RBX=0x0000000000000000, RCX=0x0000000000000000, RDX=0x000000004159cfe8
    RSP=0x000000004159cfe0, RBP=0x00002aab5851cf68, RSI=0x0000000000000000, RDI=0x0000000000000000
    R8 =0x000000000000000e, R9 =0x00002b7fd92f2c38, R10=0x00002aaaaea28959, R11=0x00002b7fd9014220
    R12=0x000000000000000e, R13=0x0000000000000000, R14=0x000000004159cfe8, R15=0x000000004de56000
    RIP=0x00002aab4fd50a9a, EFL=0x0000000000010246, CSGSFS=0x0000000000000033, ERR=0x0000000000000004
      TRAPNO=0x000000000000000e
    
    Top of Stack: (sp=0x000000004159cfe0)
    0x000000004159cfe0:   00002aaadaf1fb48 000000000000000e
    0x000000004159cff0:   00002aaab51e3e48 000000004159d088
    Stack: [0x000000004157e000,0x000000004159f000],  sp=0x000000004159cfe0,  free space=7b0000000000000018k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [libtcnative-1.so+0x12a9a]  Java_org_apache_tomcat_jni_Socket_sendbb+0x5a
    
    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    j  org.apache.tomcat.jni.Socket.sendbb(JII)I+0
    J  org.apache.coyote.ajp.AjpAprProcessor.action(Lorg/apache/coyote/ActionCode;Ljava/lang/Object;)V
    J  org.apache.coyote.Response.action(Lorg/apache/coyote/ActionCode;Ljava/lang/Object;)V
    j  org.apache.catalina.connector.OutputBuffer.doFlush(Z)V+86
    j  org.apache.catalina.connector.OutputBuffer.flush()V+2
    j  org.apache.catalina.connector.CoyoteOutputStream.flush()V+4
    j  javax.imageio.stream.MemoryCacheImageOutputStream.flushBefore(J)V+47
    j  javax.imageio.stream.MemoryCacheImageOutputStream.close()V+15
    j  javax.imageio.stream.ImageInputStreamImpl.finalize()V+8
    v  ~StubRoutines::call_stub
    J  java.lang.ref.Finalizer.invokeFinalizeMethod(Ljava/lang/Object;)V
    J  java.lang.ref.Finalizer.access$100(Ljava/lang/ref/Finalizer;)V
    J  java.lang.ref.Finalizer$FinalizerThread.run()V
    v  ~StubRoutines::call_stub
    
  • Our application is the google implementation for the Comet protocol. This is just a technique for allowing a web server to push data to a browser (also known as Ajax Push). JVM crashed on startup with the following when using tcnative

    >Stack: [0x000000004d485000,0x000000004d586000],  sp=0x000000004d582200,  free space=3f40000000000000018k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [libtcnative-1.so+0x1459a]  Java_org_apache_tomcat_jni_Socket_sendbb+0x5a
    
    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    j  org.apache.tomcat.jni.Socket.sendbb(JII)I+0
    j  org.apache.coyote.ajp.AjpAprProcessor.flush()V+22
    j  org.apache.coyote.ajp.AjpAprProcessor.action(Lorg/apache/coyote/ActionCode;Ljava/lang/Object;)V+66
    j  org.apache.coyote.Response.action(Lorg/apache/coyote/ActionCode;Ljava/lang/Object;)V+31
    j  org.apache.catalina.connector.OutputBuffer.doFlush(Z)V+94
    j  org.apache.catalina.connector.OutputBuffer.flush()V+2
    j  org.apache.catalina.connector.CoyoteOutputStream.flush()V+4
    j  net.myapp.gwt.comet.server.deflate.DeflaterOutputStream.flush()V+15
    j  net.myapp.gwt.comet.server.impl.CountOutputStream.flush()V+11
    j  sun.nio.cs.StreamEncoder.implFlush()V+15
    j  sun.nio.cs.StreamEncoder.flush()V+12
    j  java.io.OutputStreamWriter.flush()V+4
    j  net.myapp.gwt.comet.server.impl.CometServletResponseImpl.flush()V+25
    j  net.myapp.gwt.comet.server.impl.CometServletResponseImpl.terminate()V+12
    j  net.myapp.gwt.comet.server.impl.CometServletResponseImpl.tryTerminate()V+1
    j  net.myapp.gwt.comet.server.impl.CometServletResponseImpl.initiate()V+143
    j  net.myapp.gwt.comet.server.impl.IEHTMLFileCometServletResponse.initiate()V+1
    j  net.myapp.gwt.comet.server.CometServlet.doCometImpl(Lnet/zschech/gwt/comet/server/impl/CometServletResponseImpl;)V+1
    j  net.myapp.gwt.comet.server.CometServlet.doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+90
    j  javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+35
    
  • Tomcat native crashes destroying an APR connection when using java imaging:
Stack: [0x00007f5261f6d000,0x00007f526206e000],  sp=0x00007f526206c580,  free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libapr-1.so.0+0x188d0]  signed char+0x20

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.apache.tomcat.jni.Pool.destroy(J)V+0
j  org.apache.tomcat.util.net.AprEndpoint$Sendfile.add(Lorg/apache/tomcat/util/net/AprEndpoint$SendfileData;)Z+92
J  org.apache.coyote.http11.Http11AprProcessor.process(J)Lorg/apache/tomcat/util/net/AprEndpoint$Handler$SocketState;
j  org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(J)Lorg/apache/tomcat/util/net/AprEndpoint$Handler$SocketState;+39
j  org.apache.tomcat.util.net.AprEndpoint$Worker.run()V+155
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub
  • Or
Stack: [0x00007f239c2a7000,0x00007f239c3a8000],  sp=0x00007f239c3a65d0,  free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libapr-1.so.0.3.9+0x188bd]  signed char+0xd

[error occurred during error reporting (printing native stack), id 0xb]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.apache.tomcat.jni.Socket.destroy(J)V+0
j  org.apache.tomcat.util.net.AprEndpoint$Worker.run()V+128
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub
  • Tomcat native crashes setting timeouts on a socket when used in conjunection with AWT:
Stack: [0x00007fd9ff9fa000,0x00007fd9ffafb000],  sp=0x00007fd9ffaf9750,  free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libtcnative-1.so+0x12a5b]  Java_org_apache_tomcat_jni_Socket_timeoutSet+0x2b
j  org.apache.tomcat.util.net.AprEndpoint.setSocketOptions(J)Z+63
j  org.apache.tomcat.util.net.AprEndpoint$Worker.run()V+153
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub
V  [libjvm.so+0x4e14a0]  JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1e0
V  [libjvm.so+0x711a39]  os::os_exception_wrapper(void (*)(JavaValue*, methodHandle*, JavaCallArguments*, Thread*), JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x19
V  [libjvm.so+0x4e0de6]  JavaCalls::call_virtual(JavaValue*, KlassHandle, symbolHandle, symbolHandle, JavaCallArguments*, Thread*)+0x126
V  [libjvm.so+0x4e0e97]  JavaCalls::call_virtual(JavaValue*, Handle, KlassHandle, symbolHandle, symbolHandle, Thread*)+0x47
V  [libjvm.so+0x574c00]  thread_entry(JavaThread*, Thread*)+0xa0
V  [libjvm.so+0x81c491]  JavaThread::run()+0x121
V  [libjvm.so+0x712eef]  java_start(Thread*)+0x13f

Environment

  • JBoss Enterprise Application Platform (EAP) 5
  • JBoss Enterprise Web Server (EWS)
    • Tomcat
  • JBoss Native

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content