【问题标题】:Parameter-Read-Timeout in Wildfly 9.0.1.FinalWildfly 9.0.1.Final 中的参数读取超时
【发布时间】:2016-03-22 21:42:20
【问题描述】:

我们在 JDK8_74/Wildfly 9.0.1.Final 中偶然发现了一些奇怪的(当前不可重现的)行为。在解析后请求的参数后,工作线程开始无限循环进入本机方法PollArrayWrapper.poll0(long, int, long)。该线程在一个内核上消耗 100% 的 CPU 负载。

mServlet.java:468 io.undertow.servlet.spec.HttpServletRequestImpl.getParameterValues(String)
  HttpServletRequestImpl.java:679 io.undertow.servlet.spec.HttpServletRequestImpl.parseFormData()
 ...
    SelectorImpl.java:86 sun.nio.ch.PollSelectorImpl.doSelect(long)
      PollSelectorImpl.java:87 sun.nio.ch.PollArrayWrapper.poll(int, int, long)
        PollArrayWrapper.java:115 sun.nio.ch.PollArrayWrapper.poll0(long, int, long)

有人看过吗?自 2005 年以来,它似乎在不同的项目中出现在不同的场合,并且多次被报告为 JDK 错误,并且这些错误已被标记为已修复。

有谁知道如何强制 Wildfly 在 poll0 方法上使用超时?

亲切的问候, 乔纳森

【问题讨论】:

  • 这是使用https监听器的时候吗?
  • @ctomc 我们使用的是 http,而不是 https。
  • 您的确切操作系统是什么?
  • @ctomc 操作系统是 SLES 11.4.23
  • 这意味着 linux 内核 2.6.37 对吗?如果不是,请使用 uname -a 命令的输出更新帖子。 2.6 内核对此几乎没有已知问题。您是否有机会尝试在任何较新的内核上运行您的代码?首选 3.x,SLES 12 或任何其他使用较新内核的发行版。你用的JDK是oracle的还是openjdk的?

标签: java java-8 wildfly


【解决方案1】:

正如 ctomc 所暗示的,这个问题很可能是一个未解决的 jdk 错误。我们的软件在完全不同的执行环境中运行,我们曾经在 SLES 11.4.23 系统上看到过这个问题。

一种可能的解决方案是采用 hystrix 样式的线程封装:将关键调用封装在 Callable 中,因此允许实现某种形式的看门狗/超时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 2015-12-05
    • 2015-12-15
    • 2015-11-08
    • 2016-03-14
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多