Logback启动时间缓慢

6

在一个非常简单的Java应用程序中,使用默认值的logback(src/main/resources中没有logback.xml),应用程序启动时间约为400毫秒。一旦我们将基本的logback.xml添加到类路径中(src/main/resources),启动时间将增加到约5500毫秒。我们在多个项目中都看到了这种情况。配置如下:

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} %-7level - %-50logger{36} - %message%n</pattern>
        </encoder>
    </appender>

    <logger name="com.zaxxer.hikari" level="ERROR">
        <appender-ref ref="STDOUT"/>
    </logger>

    <logger name="org.sql2o" level="ERROR">
        <appender-ref ref="STDOUT"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

根据您的控制台,您的代码中最冗长的部分是什么? - Nicolas Filotto
@NicolasFilotto - 启动期间只有6个INFO打印输出。这是一个标准的Spark Java,Hello World应用程序。 - Nico Huysamen
无法使用logback 1.1.7 / slf4j 1.7.21在jdk 1.8.0_91上重现。没有logback.xml,我得到了75ms的运行时间,而有了logback.xml,我得到了160ms的运行时间,当记录10个信息消息时。测试代码:Logger logger = LoggerFactory.getLogger(Test.class); for (int i = 0; i < 10; i++) logger.info("Hello world " + i);顺便说一句:这就是所谓的MCVE - Andreas
@Andreas - 使用与您相同的方式,但不使用logback.xml (17:44:24.380 [Thread-0] INFO org.eclipse.jetty.util.log - Logging initialized @417ms),并且使用logback.xml (17:45:36.298 INFO - org.eclipse.jetty.util.log - Logging initialized @5524ms)。 - Nico Huysamen
2个回答

11

看起来是 DNS 查询超时,持续了 5 秒钟。我也遇到过这种情况。只需确保计算机的主机名解析为一个 IP 地址即可。您可以通过执行 ping 命令进行测试:

ping `hostname`

如果它解析了名称并开始ping,那么你的问题可能是其他方面引起的。但是,如果您看到一条消息显示“bad address”,这可能可以解释您的问题。

要简单修复它,您只需将主机名添加到/etc/hosts文件中。只需在以127.0.0.1开头的行的末尾添加主机名。 更改应立即生效。这可能不是最干净的解决方法,特别是在具有dhcp等现代linux上。但是如果它能正常工作,您将有一个好的指针来永久解决这个名称解析问题。


虽然我尝试了上面的方法,但是没有成功。不过在添加了 127.0.0.1 <hostname> 后,之前超时的 ping 命令就可以正常工作了,在修改 /etc/hosts 文件之前一直超时。我花了一些时间用调试器进行排查,在 Sierra(OS X 10.12)中,长时间超时的问题是由于通过 ipv6 解析 localhost 导致的。我无法禁用 ipv6,因此无法确认这是否能解决问题。但这可能会给其他人提供一些帮助。 - preston.m.price

6

对我来说,问题出在ipv6解析上。Damien上面的回答很正确,只需要在etc/hosts中添加一个ipv6条目即可。类似这样:

::1        ${your.host.name}

确认:只有同时应用被接受的解决方案和这个解决方案才解决了我的问题。我使用的是macOS Sierra,如果这有关系的话。 - Uniqus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接