许多线程处于等待状态,服务器负载超过100

时间:2019-04-19 02:35:41

标签: java multithreading performance jvm tomcat7

Tomcat中的WAITING状态中的线程太多。 50%的线程正在等待条件

Tomcat 7。 CPU核心16。 cpu us82%。 内存足够,16g可用空间。 半小时内只有1个fullgc。 Linux sys负载有时是50 +,50 +,50 +和100+。 我的代码中从来没有ExecutorService或ThreadPool。

  

“ catalina-exec-682”守护程序prio = 10 tid = 0x00007f530442e800 nid = 0x16f8   等待条件[0x00007f51b9a3a000] java.lang.Thread.State:   在sun.misc.Unsafe.park上等待(停车)(本机方法)     -停车以等待<0x000000073168d480>(一个java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject)     在java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)     在   java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await(AbstractQueuedSynchronizer.java:2043)     在   java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)     在org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)     在org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)     在   java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)     在   java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)     在   org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)     在java.lang.Thread.run(Thread.java:745)

     

锁定的可拥有同步器:     -没有

     

“ catalina-exec-681”守护程序prio = 10 tid = 0x00007f530442c800 nid = 0x16f7   等待条件[0x00007f51b9a7b000] java.lang.Thread.State:   在sun.misc.Unsafe.park上等待(停车)(本机方法)     -停车以等待<0x000000073168d480>(一个java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject)     在java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)     在   java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await(AbstractQueuedSynchronizer.java:2043)     在   java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)     在org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)     在org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)     在   java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)     在   java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)     在   org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)     在java.lang.Thread.run(Thread.java:745)

     

锁定的可拥有同步器:     -没有

我希望没有线程处于等待状态,所有这些线程都是由tomcat创建的,但是50%处于等待状态。

1 个答案:

答案 0 :(得分:0)

好吧,也许是因为当您检查时,他们无事可做-马丁·詹姆斯

这似乎是tomcat线程池。如果不使用它们,它们什么也不做。您应该可以将池大小设置为较小的值,但是我不希望这会有所作为。 –彼得·劳里

谢谢您的回答,一切都很好,没有错。