我在glassfish 3服务器中遇到问题。日志正在抛出消息
java.util.concurrent.RejectedExecutionException:线程池的任务队列已满,限制:256
我做了几个线程转储,发现有16个线程正在等待同一个锁,例如:
“__ ejb-thread-pool1”守护程序prio = 6 tid = 0x39657c00 nid = 0x1c08等待条件[0x3297f000] java.lang.Thread.State:WAITING(停车) 在sun.misc.Unsafe.park(原生方法) - 停车等待< 0x117b2cb0> (java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject) 在java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await(AbstractQueuedSynchronizer.java:2043) 在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:724)
锁定可拥有的同步器: - 没有
“__ ejb-thread-pool2”守护程序prio = 6 tid = 0x38408c00 nid = 0x1a3c等待条件[0x3ad3f000] java.lang.Thread.State:WAITING(停车) 在sun.misc.Unsafe.park(原生方法) - 停车等待< 0x117b2cb0> (java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject) 在java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await(AbstractQueuedSynchronizer.java:2043) 在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:724)
锁定可拥有的同步器: - 没有 ...
这是正常的吗?我以为我会在线程转储中找到一个拥有锁的线程,但是没有。请帮助..我是线程分析的新手。答案 0 :(得分:0)
如果某些执行者服务中有16个无效,那么是的,他们都在等待在任务队列中显示的内容,这是完全正常的。
被拒绝的执行可能在另一个时刻发生,而不是在您对线程进行快照时。这只意味着提交的数量激增,队列早先溢出。
小心,但这些被拒绝的执行可能甚至不在您正在查看的执行者服务上。这取决于其他地方有多少其他执行者服务。