tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Schumacher <felix.schumac...@internetallee.de>
Subject Re: High cpu on Tomcat 8
Date Sun, 03 May 2015 16:35:56 GMT


Am 3. Mai 2015 12:25:53 MESZ, schrieb Greg Huber <gregh3269@gmail.com>:
>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"

I believe java 8 combines the permgen into the heap space, so it is possible, that you run
out of space now that you use java 8.

Use jstat, jvisualvm or jconsole to look at your gc cycles. They can consume a lot of cpu.

>
>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)

This thread does nothing. 


> 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)

This thread does nothing,  either. 

>    - 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?

You might look for other threads, that do something. I would be especially suspicious about
array resizing operations. 

Regards
Felix

>
>
>Cheers Greg


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message