生产事故:Undertow容器的xnio线程引发CPU100%的方案验证后续(二)
字数 161,阅读大约需 1 分钟
生产事故:Undertow容器的xnio线程引发CPU100%的排查解决思路
从前面那篇文章分析之后,得出如下两个解决方式:
1. 系统对高并发、高性能的要求不高。通过在启动参数加如下参数,不走epoll模式
-Dxnio.nio.selector.provider=sun.nio.ch.PollSelectorProvider
2. 切换web容器:undertow切换成tomcat+netty模式
通过现场验证之后:
方式1,换成PollSelectorProvider
之后,依旧会出现CPU100%
id=47, name=XNIO-1 I/O-5, used=272.858s, (%)cpu=98, RUNNABLE
sun.nio.ch..PollArrayWrapper.poll0(Native Method)
sun.nio.ch.PollArrayWrapper.poll(PollArrayWrapper.java:115)
sun.nio.ch.PollSelectorImpl.doSelect(PollSelectorImpl.java:87)
sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
org.xnio.nio.WorkerThread.run(WorkerThread.java:544)
故此,方式1的配置是无效的,已废弃。
方式2:切换web容器:undertow切换成tomcat+netty模式。
方式2 最终验证是可行的
最终把undertow 更换成 tomcat 就正常了。