Hi,

We encountered an issue where Tomcat suddenly and randomly stops responding
to HTTP requests.

Tomcat startup logs:
INFO: Server version:
Mar 15, 2019 7:59:35 AM org.apache.catalina.startup.VersionLoggerListener
log
INFO: Server built:          unknown
Mar 15, 2019 7:59:35 AM org.apache.catalina.startup.VersionLoggerListener
log
INFO: Server number:         8.5.x
Mar 15, 2019 7:59:35 AM org.apache.catalina.startup.VersionLoggerListener
log
INFO: OS Name:               Linux
Mar 15, 2019 7:59:35 AM org.apache.catalina.startup.VersionLoggerListener
log
INFO: OS Version:            3.10.0-693.17.1.el7.x86_64
Mar 15, 2019 7:59:35 AM org.apache.catalina.startup.VersionLoggerListener
log
INFO: Architecture:          amd64
Mar 15, 2019 7:59:35 AM org.apache.catalina.startup.VersionLoggerListener
log
INFO: Java Home:
 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre
Mar 15, 2019 7:59:35 AM org.apache.catalina.startup.VersionLoggerListener
log
INFO: JVM Version:           1.8.0_161-b14

Tomcat is configured to use APRConnector
Mar 15, 2019 7:59:35 AM org.apache.catalina.core.AprLifecycleListener
lifecycleEvent
INFO: Loaded APR based Apache Tomcat Native library [1.2.14] using APR
version [1.4.8].
Mar 15, 2019 7:59:35 AM org.apache.catalina.core.AprLifecycleListener
lifecycleEvent
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters
[false], random [true].
Mar 15, 2019 7:59:35 AM org.apache.catalina.core.AprLifecycleListener
lifecycleEvent
INFO: APR/OpenSSL configuration: useAprConnector [true], useOpenSSL [true]
Mar 15, 2019 7:59:35 AM org.apache.catalina.core.AprLifecycleListener
initializeSSL
INFO: OpenSSL successfully initialized [OpenSSL 1.0.2k-fips  26 Jan 2017]
Mar 15, 2019 7:59:35 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8081"]
Mar 15, 2019 7:59:35 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler
["https-openssl-apr-0:0:0:0:0:0:0:0-8443"]

After some troubleshooting, we found that when this happens, Java worker
threads are idle and waiting for tasks, while sockets are in ESTABLISHED
and CLOSE_WAIT state. All the TCP sockets at the OS level indicate they
have bytes in the TCP buffer that is not been read by the application.
so looks like something went wrong, and the APR connector library is no
more reading from the socket, or some issue between java socket Acceptor
call and APR library.

Has anyone encountered any problem like this or have any suggestion on what
should be checked that may help to isolate the problem.

Below the lsof output with TCP Q data and thread dump for threads for port
8443.

Thanks,

--
Indrajeet

java      25399            tomcatuser   55u     IPv6          485303682
     0t0        TCP *:8443 (LISTEN QR=0 QS=0)
java      25399            tomcatuser   60u     IPv6          542452576
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:62472 (CLOSE_WAIT QR=880
QS=0)
java      25399            tomcatuser   63u     IPv6          542319858
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56315 (CLOSE_WAIT QR=704
QS=0)
java      25399            tomcatuser   64u     IPv6          542365742
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.227:65114 (CLOSE_WAIT QR=704
QS=0)
java      25399            tomcatuser   73u     IPv6          542271640
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.234:53983 (CLOSE_WAIT QR=848
QS=0)
java      25399            tomcatuser   78u     IPv6          542313271
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:61847 (CLOSE_WAIT QR=832
QS=0)
java      25399            tomcatuser   80u     IPv6          542312628
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56277 (CLOSE_WAIT QR=704
QS=0)
java      25399            tomcatuser   87u     IPv6          542322416
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56350 (CLOSE_WAIT QR=704
QS=0)
java      25399            tomcatuser   92u     IPv6          542301688
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56251 (CLOSE_WAIT QR=784
QS=0)
java      25399            tomcatuser   94u     IPv6          542344204
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:61954 (CLOSE_WAIT QR=816
QS=0)
java      25399            tomcatuser   95u     IPv6          542301753
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.227:64780 (CLOSE_WAIT QR=784
QS=0)
java      25399            tomcatuser   98u     IPv6          542313111
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56292 (CLOSE_WAIT QR=704
QS=0)
java      25399            tomcatuser  109u     IPv6          542312567
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.130:51038 (ESTABLISHED
QR=447 QS=0)
java      25399            tomcatuser  111u     IPv6          542301754
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.129:54443 (CLOSE_WAIT QR=800
QS=0)
java      25399            tomcatuser  112u     IPv6          542312764
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:61834 (CLOSE_WAIT QR=816
QS=0)
java      25399            tomcatuser  123u     IPv6          542290291
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56221 (CLOSE_WAIT QR=800
QS=0)
java      25399            tomcatuser  125u     IPv6          542355374
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56421 (CLOSE_WAIT QR=704
QS=0)
java      25399            tomcatuser  127u     IPv6          542320066
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:61878 (CLOSE_WAIT QR=704
QS=0)
java      25399            tomcatuser  135u     IPv6          542391483
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56532 (CLOSE_WAIT QR=816
QS=0)
java      25399            tomcatuser  144u     IPv6          542333802
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.163:63742 (CLOSE_WAIT QR=768
QS=0)
java      25399            tomcatuser  158u     IPv6          542333223
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:56352 (CLOSE_WAIT QR=720
QS=0)
java      25399            tomcatuser  162u     IPv6          542313272
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.163:63615 (CLOSE_WAIT QR=752
QS=0)
java      25399            tomcatuser 5196u     IPv6          542451367
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.234:55358 (ESTABLISHED
QR=570 QS=0)
java      25399            tomcatuser 5263u     IPv6          542557088
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.130:55096 (ESTABLISHED
QR=650 QS=0)
java      25399            tomcatuser 5397u     IPv6          542464143
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.234:55370 (ESTABLISHED
QR=586 QS=0)
java      25399            tomcatuser 5452u     IPv6          543082702
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.55:50754 (ESTABLISHED QR=618
QS=0)
java      25399            tomcatuser 5590u     IPv6          542898860
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.88:65110 (ESTABLISHED QR=618
QS=0)
java      25399            tomcatuser 5664u     IPv6          542858261
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.199:19422 (ESTABLISHED
QR=602 QS=0)
java      25399            tomcatuser 6124u     IPv6          543082704
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.196:50054 (ESTABLISHED
QR=852 QS=0)
java      25399            tomcatuser 6159u     IPv6          542459540
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.110:51141 (ESTABLISHED
QR=746 QS=0)
java      25399            tomcatuser 6311u     IPv6          542499860
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.130:54370 (ESTABLISHED
QR=634 QS=0)
java      25399            tomcatuser 6383u     IPv6          542512620
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:57794 (ESTABLISHED
QR=634 QS=0)
java      25399            tomcatuser 6385u     IPv6          543065773
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.130:58026 (ESTABLISHED
QR=746 QS=0)
java      25399            tomcatuser 6387u     IPv6          542500653
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:57777 (ESTABLISHED
QR=650 QS=0)
java      25399            tomcatuser 6392u     IPv6          542500684
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.212:57778 (ESTABLISHED
QR=618 QS=0)
java      25399            tomcatuser 6396u     IPv6          542946274
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.163:50919 (ESTABLISHED
QR=554 QS=0)
java      25399            tomcatuser 6485u     IPv6          543011874
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.199:20529 (ESTABLISHED
QR=666 QS=0)
java      25399            tomcatuser 6487u     IPv6          542801192
     0t0        TCP 10.77.xx.xx:8443->10.xx.xx.129:51349 (ESTABLISHED
QR=634 QS=0)


Looking at the thread dump taken around the same time:

"https-openssl-apr-0:0:0:0:0:0:0:0-8443-exec-74" #52250 daemon prio=5
os_prio=0 tid=0x00007fe7a027e600 nid=0x1a5f waiting on condition
[0x00007fe6354db000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x000000059b61d528> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
        at
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
        at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

"https-openssl-apr-0:0:0:0:0:0:0:0-8443-exec-71" #52247 daemon prio=5
os_prio=0 tid=0x00007fe7a01af350 nid=0x1a54 waiting on condition
[0x00007fe71d3de000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x000000059b61d528> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
        at
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
        at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

"https-openssl-apr-0:0:0:0:0:0:0:0-8443-exec-67" #52243 daemon prio=5
os_prio=0 tid=0x00007fe7a024cc70 nid=0x1a50 waiting on condition
[0x00007fe65ac01000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x000000059b61d528> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
        at
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
        at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

"https-openssl-apr-0:0:0:0:0:0:0:0-8443-AsyncTimeout" #406 daemon prio=5
os_prio=0 tid=0x00007fe93816b4c0 nid=0x2993 waiting on condition
[0x00007fe660e61000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at
org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1211)
        at java.lang.Thread.run(Thread.java:748)

"https-openssl-apr-0:0:0:0:0:0:0:0-8443-Acceptor-0" #405 daemon prio=5
os_prio=0 tid=0x00007fe938169bf0 nid=0x2992 runnable [0x00007fe660f62000]
   java.lang.Thread.State: RUNNABLE
        at org.apache.tomcat.jni.Socket.accept(Native Method)
        at
org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:961)
        at java.lang.Thread.run(Thread.java:748)

"https-openssl-apr-0:0:0:0:0:0:0:0-8443-Poller" #404 daemon prio=5
os_prio=0 tid=0x00007fe938168320 nid=0x2991 runnable [0x00007fe661063000]
   java.lang.Thread.State: RUNNABLE
        at
org.apache.tomcat.util.net.AprEndpoint$Poller.run(AprEndpoint.java:1642)
        at java.lang.Thread.run(Thread.java:748)

Reply via email to