Java 处于等待状态的线程-ApacheTomcat

Java 处于等待状态的线程-ApacheTomcat,java,tomcat,garbage-collection,threadpool,Java,Tomcat,Garbage Collection,Threadpool,我们已经在Tomcat 6.0.20上部署了我们的补救中端,但是Tomcat几乎每天都会频繁宕机,并出现以下错误: 为地址null和端口8080创建的最大线程数(400) 我们已经尝试过增加线程的数量,但这还不够。随后两次碰撞之间的时间差只会增加,但这是同一个问题 我们已经获得了线程转储,它表明大多数线程都处于“等待”状态。请参考以下从线程日志获得的信息: *"http-8080-670" - Thread t@8479 java.lang.Thread.State: WAITING

我们已经在Tomcat 6.0.20上部署了我们的补救中端,但是Tomcat几乎每天都会频繁宕机,并出现以下错误:

为地址null和端口8080创建的最大线程数(400)

我们已经尝试过增加线程的数量,但这还不够。随后两次碰撞之间的时间差只会增加,但这是同一个问题

我们已经获得了线程转储,它表明大多数线程都处于“等待”状态。请参考以下从线程日志获得的信息:

 *"http-8080-670" - Thread t@8479
 java.lang.Thread.State: WAITING
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for <775f1471> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
            at java.util.concurrent.locks.LockSupport.park(Unknown Source)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
            at com.bmc.arsys.apitransport.connection.a.get(Unknown Source)
            at com.bmc.arsys.apitransport.connection.c.getProxy(Unknown Source)
            at com.bmc.arsys.api.PoolingProxyManager.getProxy(Unknown Source)
            at com.bmc.arsys.apitransport.connection.c.getProxy(Unknown Source)
            at com.bmc.arsys.api.ARServerUser.getListEntryObjects(Unknown Source)
            at com.remedy.arsys.goat.savesearches.ARUserSearches.loadFromServer(Unknown Source)
              - locked <32e7e815> (a com.remedy.arsys.goat.savesearches.ARUserSearches)
             at com.remedy.arsys.goat.aspects.IARUserSearchesServiceCacheAspect.ajc$around$com_remedy_arsys_goat_aspects_IARUserSearchesServiceCacheAspect$1$181ba497(IARUserSearchesServiceCacheAspect.aj:44)
            - locked <794bbdbc> (a java.lang.String)
            at com.remedy.arsys.goat.savesearches.ARUserSearches.getUserSearches(Unknown Source)
            at com.remedy.arsys.goat.UserDataEmitter.<init>(Unknown Source)
            at com.remedy.arsys.goat.service.DHTMLRequestService.requestDispatch(Unknown Source)
            at com.remedy.arsys.stubs.FormServlet.doRequest(Unknown Source)
            at com.remedy.arsys.stubs.GoatServlet.postInternal(Unknown Source)
            at com.remedy.arsys.stubs.GoatHttpServlet.doGet(Unknown Source)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
            at java.lang.Thread.run(Unknown Source)
    Locked ownable synchronizers:
            - locked <5b95bfda> (a       java.util.concurrent.locks.ReentrantLock$NonfairSync)*
*“http-8080-670”-线程t@8479
java.lang.Thread.State:正在等待
在sun.misc.Unsafe.park(本机方法)
-停车等待(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
位于java.util.concurrent.locks.LockSupport.park(未知源)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(未知源)
位于com.bmc.arsys.apitransport.connection.a.get(未知源)
位于com.bmc.arsys.apitransport.connection.c.getProxy(未知源)
位于com.bmc.arsys.api.poolgproxymanager.getProxy(未知源)
位于com.bmc.arsys.apitransport.connection.c.getProxy(未知源)
位于com.bmc.arsys.api.ARServerUser.getListEntryObjects(未知源)
位于com.rememy.arsys.goat.saveSearchs.arUserSearchs.loadFromServer(未知源)
-锁定(com.rememy.arsys.goat.saveSearchs.arUserSearchs)
在com.rememy.arsys.goat.aspects.iarUserSearcheServiceCacheAspect.ajc$上大约$com\u rememy\u arsys\u goat\u aspects\iarUserSearcheServiceCacheAspect$1$181ba497(iarUserSearcheServiceCacheAspect.aj:44)
-锁定(一个java.lang.String)
位于com.rememy.arsys.goat.savesearches.arUserSearchs.GetUserSearchs(未知源)
位于com.rememy.arsys.goat.UserDataEmitter。(未知来源)
位于com.rememy.arsys.goat.service.DHTMLRequestService.requestDispatch(未知源)
位于com.rememy.arsys.stubs.FormServlet.doRequest(未知源)
位于com.rememy.arsys.stubs.GoatServlet.postInternal(未知来源)
在com.rememy.arsys.stubs.GoatHttpServlet.doGet(未知来源)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
位于java.lang.Thread.run(未知源)
锁定可拥有的同步器:
-锁定(一个java.util.concurrent.locks.ReentrantLock$NonfairSync)*

线程处于“等待”状态的原因有很多,任何人都可以帮助缩小范围。

线程看起来在等待,但实际上它们被阻塞在工作队列中。看起来他们使用ThreadPoolExecutor来调度任务,但是工作队列中没有足够的线程来处理所有任务,或者每个任务花费的时间太长

看看:


另外,检查
poolgproxymanager
,他
getProxy
应该做什么,看起来它正在尝试获取连接或其他资源。

当线程没有在池中给出执行机会(即池中的线程数)时,线程进入
park
状态。池是指当前处于
RUN
状态的线程。当池被填满时,线程进入队列,队列将处于
WAIT
状态,并在有机会进入池执行时有机会进入
RUN
状态

pool
queue
的阈值超过时,线程进入
park WAIT
状态,它们将等待,直到发生以下任何一种情况

i) 当超过配置的驻车超时时


ii)获得
许可
进入
队列
ie;调用
thread.interrupt()
时,线程将有机会进入
RUN
WAIT
状态。

所有其他线程是否都卡在同一位置?此线程转储仅显示一个线程。