java - 处于等待状态的线程 - Apache Tomcat

标签 java tomcat garbage-collection threadpool

我们已经在 Tomcat 6.0.20 上部署了我们的 Remedy 中间层,但是 Tomcat 经常宕机,几乎每天都会出现以下错误:

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

我们已经尝试增加线程数,但还是不够。 2次后续崩溃之间的时间差只是增加了,但这是同一个问题。

我们得到了thread dump,它显示大部分线程都处于'Waiting'状态。请引用以下从线程日志中获得的内容如下:

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

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

最佳答案

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

看看:Deadlock in ThreadPoolExecutor .

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

关于java - 处于等待状态的线程 - Apache Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075345/

相关文章:

.net - 为什么配置 .NET 垃圾收集器不起作用?

java - 如何检查Resttemplate是否出错?

java - 如何使 CORS 过滤器在具有基本身份验证的 Jersey REST 中工作?

服务器重启后的Spring @Scheduled

apache - 启动时 Apache Tomcat 中的 PS Permgen 为 98%

ionic-framework - ionic 2/ ionic 3-垃圾收集

Java 8 按类分离列表元素

Java 从文本文件中提取值

java - 有什么方法可以在 Vim/Emacs 中提供 Eclipse 自动错误发现功能?

apache-spark - Kubernetes 上 Apache Spark 结构化流上的长时间 GC 暂停