Hello,
After an upgrade to Tomcat 8.0.21 and (Oracle jdk1.8.0_40) I seem to be
having an erratic high cpu issue, often when the server gets busy. The
application was OK tomcat 7 and has not been modified since the upgrade.
I use mod_jk / apache
#
# workers.properties
#
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
Here are my startup options:
Tomcat 7
JAVA_OPTS="-Xms128M -Xmx512m -XX:MaxPermSize=256m"
Tomcat 8 (java 8 does not support MaxPermSize)
JAVA_OPTS="-Xms128M -Xmx512m"
If I trace the thread it seems to be related to ajp-apr-8009-Poller
"ajp-apr-8009-Poller" #26 daemon prio=5 os_prio=0 tid=0x00007ffe300bd000
nid=0xc82 runnable [0x00007ffdd1fd1000]
java.lang.Thread.State: RUNNABLE
at sun.misc.Unsafe.unpark(Native Method)
at java.util.concurrent.locks.LockSupport.unpark(LockSupport.java:141)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.unparkSuccessor(AbstractQueuedSynchronizer.java:662)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1264)
at
java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:457)
at
java.util.concurrent.LinkedBlockingQueue.signalNotEmpty(LinkedBlockingQueue.java:176)
at
java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:430)
at org.apache.tomcat.util.threads.TaskQueue.offer(TaskQueue.java:74)
at org.apache.tomcat.util.threads.TaskQueue.offer(TaskQueue.java:31)
at
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1361)
at
org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:161)
at
org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:141)
at
org.apache.tomcat.util.net.AprEndpoint.processSocket(AprEndpoint.java:896)
at org.apache.tomcat.util.net.AprEndpoint$Poller.null (Redefined)
at java.lang.Thread.run(Redefined)
....
"ajp-apr-8009-Poller" #26 daemon prio=5 os_prio=0 tid=0x00007ffe300bd000
nid=0xc82 runnable [0x00007ffdd1fd1000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e4a05160> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at
java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at
java.util.concurrent.LinkedBlockingQueue.signalNotEmpty(LinkedBlockingQueue.java:172)
at
java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:430)
at org.apache.tomcat.util.threads.TaskQueue.offer(TaskQueue.java:74)
at org.apache.tomcat.util.threads.TaskQueue.offer(TaskQueue.java:31)
at
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1361)
at
org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:161)
at
org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:141)
at
org.apache.tomcat.util.net.AprEndpoint.processSocket(AprEndpoint.java:896)
at org.apache.tomcat.util.net.AprEndpoint$Poller.null (Redefined)
at java.lang.Thread.run(Redefined)
Killing the thread stops the cpu, but then Tomcat does not work. Any ideas
what would be causing this?
Cheers Greg