如何禁用 Vert.x 的 BlockedThreadChecker?

How to disable the BlockedThreadChecker of Vert.x?

BlockedThreadChecker 在调试 vert.x 代码时会导致大量标准输出。 这个问题涉及vert.x 3.

VertxOptions options = new VertxOptions();
options.setBlockedThreadCheckInterval(1000*60*60);

https://groups.google.com/forum/#!searchin/vertx/BlockedThreadChecker/vertx/MWx8ma7Ig4o/rFqdYdDErtYJ

注意:仅在调试时禁用。否则可能影响 Vert.x 性能的问题不容易定位。

或者你可以添加以下系统属性到vertx启动脚本,将事件循环执行时间设置为10秒(注意输入是NS):

-Dvertx.options.maxEventLoopExecuteTime=10000000000

任何对此感兴趣的人,如果您不想更改顶点选项,您可以将日志级别设置为 ERROROFF for BlockedThreadChecker

logback.xml 中的配置将如下所示:

<configuration>
    ...
        <logger name="io.vertx.core.impl.BlockedThreadChecker" level="OFF" />
    ...
</configuration>

我们的线程阻塞问题是在部署期间出现的,因此我们只需在部署期间动态关闭日志记录,并在完成后将其重新打开 log4j2 这看起来像:

        org.apache.logging.log4j.core.Logger threadStuckLogger = (org.apache.logging.log4j.core.Logger)LogManager.getLogger(BlockedThreadChecker.class);
        Level threadStuckLevel = threadStuckLogger.getLevel();
        threadStuckLogger.setLevel(Level.ERROR);

// deploy....

        threadStuckLogger.setLevel(threadStuckLevel);