项目

一般

简介

AASv9在运行时,工作线程cpu占用一直处于100%,并且不会恢复,当工作线程到达最大线程数后,应用无法访问

由 he shancai 在 超过 3 年 之前添加

服务器cpu截图:

堆栈日志:

"HTTPHandler-76-35643" #35643 prio=5 os_prio=0 tid=0x0000fffb3402c000 nid=0x45ba runnable [0x0000fffbdf6fc000]
   java.lang.Thread.State: RUNNABLE
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
    at com.apusic.web.http.HttpWriter$StreamWriter.implWrite(HttpWriter.java:516)
    at com.apusic.web.http.HttpWriter.write(HttpWriter.java:206)
    at java.io.PrintWriter.write(PrintWriter.java:426)
    - locked <0x00000006c718ac58> (a com.apusic.web.http.HttpWriter$StreamWriter)
    at com.apusic.web.jsp.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:110)
    at com.apusic.web.jsp.runtime.JspWriterImpl.bufferOverflow(JspWriterImpl.java:124)
    at com.apusic.web.jsp.runtime.JspWriterImpl.write(JspWriterImpl.java:201)
    at _jspx.__5fSTD._evaluate_5freport__jsp._jspService(_evaluate_5freport__jsp.java:164)
    at com.apusic.web.jsp.runtime.HttpJspPageImpl.service(HttpJspPageImpl.java:40)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at com.apusic.web.container.ServletComponent.service(ServletComponent.java:87)
    at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1172)
    at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1040)
    at com.apusic.web.jsp.JspServlet.service(JspServlet.java:338)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at com.apusic.web.container.ServletComponent.service(ServletComponent.java:87)
    at com.apusic.web.container.ServletFilterWrapper.doFilter(ServletFilterWrapper.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:48)
    at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:290)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at servlet.XssAndSqlFilter.doFilter(XssAndSqlFilter.java:70)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at servlet.RightFilter.doFilter(RightFilter.java:103)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1167)
    at com.apusic.web.container.WebContainer.doProcessRequest(WebContainer.java:948)
    at com.apusic.web.container.WebContainer.processRequest(WebContainer.java:809)
    at com.apusic.web.http.VirtualHost.processRequest(VirtualHost.java:370)
    at com.apusic.web.http.HttpServer.processRequest(HttpServer.java:317)
    at com.apusic.web.http.HttpConnectionHandler.service(HttpConnectionHandler.java:26)
    at com.apusic.web.http.ConnectionHandler.processRequest(ConnectionHandler.java:360)
    at com.apusic.web.http.ConnectionHandler.processConnection(ConnectionHandler.java:138)
    at com.apusic.web.http.ConnectionHandler.run(ConnectionHandler.java:52)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

"HTTPHandler-75-35641" #35641 prio=5 os_prio=0 tid=0x0000fffaf8003800 nid=0x45b8 runnable [0x0000fffbe43fc000]
   java.lang.Thread.State: RUNNABLE
    at sun.nio.cs.ext.GB18030$Encoder.encodeLoop(GB18030.java:12773)
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
    at com.apusic.web.http.HttpWriter$StreamWriter.implWrite(HttpWriter.java:516)
    at com.apusic.web.http.HttpWriter.write(HttpWriter.java:206)
    at java.io.PrintWriter.write(PrintWriter.java:426)
    - locked <0x00000006cfc65f58> (a com.apusic.web.http.HttpWriter$StreamWriter)
    at com.apusic.web.jsp.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:110)
    at com.apusic.web.jsp.runtime.JspWriterImpl.release(JspWriterImpl.java:260)
    at com.apusic.web.jsp.runtime.PageContextImpl.release(PageContextImpl.java:100)
    at com.apusic.web.jsp.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:42)
    at _jspx.__5fSTD._fvs._CPB_5fcourseEvaluateInfo__jsp._jspService(_CPB_5fcourseEvaluateInfo__jsp.java:311)
    at com.apusic.web.jsp.runtime.HttpJspPageImpl.service(HttpJspPageImpl.java:40)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at com.apusic.web.container.ServletComponent.service(ServletComponent.java:87)
    at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1172)
    at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1040)
    at com.apusic.web.jsp.JspServlet.service(JspServlet.java:338)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at com.apusic.web.container.ServletComponent.service(ServletComponent.java:87)
    at com.apusic.web.container.ServletFilterWrapper.doFilter(ServletFilterWrapper.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:48)
    at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:290)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at servlet.XssAndSqlFilter.doFilter(XssAndSqlFilter.java:70)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at servlet.RightFilter.doFilter(RightFilter.java:103)
    at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
    at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
    at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1167)
    at com.apusic.web.container.WebContainer.doProcessRequest(WebContainer.java:948)
    at com.apusic.web.container.WebContainer.processRequest(WebContainer.java:809)
    at com.apusic.web.http.VirtualHost.processRequest(VirtualHost.java:370)
    at com.apusic.web.http.HttpServer.processRequest(HttpServer.java:317)
    at com.apusic.web.http.HttpConnectionHandler.service(HttpConnectionHandler.java:26)
    at com.apusic.web.http.ConnectionHandler.processRequest(ConnectionHandler.java:360)
    at com.apusic.web.http.ConnectionHandler.processConnection(ConnectionHandler.java:138)
    at com.apusic.web.http.ConnectionHandler.run(ConnectionHandler.java:52)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

原因分析:

AASv9在运行时,工作线程cpu占用一直处于100%,并且不会恢复,当工作线程到达最大线程数后,应用无法访问。通过对比测试,2020年8月份的apusic.jar未发现此问题。

经分析发现是jsp存在自定义标签,会有多次写操作,每次写后会中断http连接。由于写操作中存在逻辑错误,造成HttpWriter无限循环写,造成cpu100%。

解决方案:

通过补丁解决,堆栈详情和补丁见附件,将补丁包更新至  sp目录,并重启AAS。

 

 

 

 

 

 

 

 

 

cpu1983.jar (9.2 KB) cpu1983.jar 补丁包
jstack.zip (138 KB) jstack.zip 堆栈日志