我们最近从Jboss 4迁移到Wildfly 10.1,从Java 1.6迁移到1.8。我们面临着许多有关CPU利用率的问题,例如,下面的线程从最近16小时开始运行并且没有结束。有两个这样的线程,两者都消耗16%的cpu并在增加。
我们使Web应用程序每个请求都落在此过滤器上,因为此CPU利用率提高到100%。
在我们的项目中,我们使用java.nio.channels,但是在wildfly上运行时,org.xnio.channels.Channels。
在jboss 4上,一切正常,CPU利用率不超过200%。
"default task-39" #252 prio=5 os_prio=0 tid=0x00007f7d8803f800 nid=0x4c8f runnable [0x00007f7e072f2000]
java.lang.Thread.State: RUNNABLE
at org.xnio.channels.Channels.writeBlocking(Channels.java:158)
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:283)
at io.undertow.io.BlockingSenderImpl.writeBuffer(BlockingSenderImpl.java:190)
at io.undertow.io.BlockingSenderImpl.send(BlockingSenderImpl.java:71)
at io.undertow.server.handlers.resource.CachedResource.serve(CachedResource.java:187)
at io.undertow.servlet.handlers.DefaultServlet.serveFileBlocking(DefaultServlet.java:332)
at io.undertow.servlet.handlers.DefaultServlet.doGet(DefaultServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at com.eko.framework.MifosNGFilter.doNormal(MifosNGFilter.java:283)
at com.eko.framework.MifosNGFilter.doFilter(MifosNGFilter.java:121)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at com.eko.framework.CrossScriptingFilter.doFilter(CrossScriptingFilter.java:48)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at com.eko.framework.URLSessionFilter.doFilter(URLSessionFilter.java:38)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.mifos.framework.security.util.FileNameFilter.doFilter(FileNameFilter.java:59)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
我们只是执行基本的过滤器,线程没有结束。以下是Java代码:
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
String reqUri = ((HttpServletRequest) req).getRequestURI();
String reqMethod = ((HttpServletRequest) req).getParameter("method");
String requestText = ((HttpServletRequest) req).getParameter("requestText");
String originatioAddress = ((HttpServletRequest) req).getParameter("originationAddress");
Date requestTime = new Date();
HttpSession httpSession = ((HttpServletRequest) req).getSession(false);
UserContext userContext = null;
if (httpSession != null) {
userContext = (UserContext) httpSession
.getAttribute(Constants.USERCONTEXT);
}
try {
HttpServletResponse resp = (HttpServletResponse) res;
resp.setHeader("Cache-Control","no-store");
resp.setHeader("Pragma","no-cache");
resp.setDateHeader ("Expires", -1);
resp.setHeader("X-Powered-By", null);
resp.setHeader("SET-COOKIE", "JSESSIONID=" + ((HttpServletRequest) req).getSession().getId()
+
"; _ga=" +
((HttpServletRequest) req).getSession().getAttribute("_ga")
+ "; Path=" +
((HttpServletRequest) req).getContextPath()
+
"; httpOnly; secure;" );
doNormal(chain, req, res);
}
catch (Throwable t) {
logger.warn(t, t);
}
}
private void doNormal(FilterChain chain, ServletRequest req,
ServletResponse res) throws ServletException {
try {
chain.doFilter(req, res);
}
catch (Throwable t) {
logger.error(t, t);
throw new ServletException(t);
}
}
[您是否尝试在禁用http2选项的情况下运行Wildfly?请执行此操作,然后检查问题是否已解决。