gpt4 book ai didi

java - 为什么通过 slf4j 进行日志记录会导致饥饿?

转载 作者:行者123 更新时间:2023-12-01 11:08:32 25 4
gpt4 key购买 nike

我从 10 Tips for Proper Application Logging 读到了这篇文章:

Another side effect is slowing the application down. Quick answer: if you log too much or improperly use toString() and/or string concatenation, logging has a performance side effect. How big? Well, I have seen server restarting every 15 minutes because of a thread starvation caused by excessive logging.

还有这个:

SLF4J will call toString() only when the statement is actually printed, which is quite nice. But if it does… Out of memory error, N+1 select problem, thread starvation (logging is synchronous!), lazy initialization exception, logs storage filled completely – each of these might occur.

所以我的问题:

  1. 日志记录是同步的中真正同步的是什么,调用toString()I/O或其他一些问题正在记录?

  2. 为什么同步日志记录会导致饥饿?

最佳答案

  1. 这意味着,对 logger.log(...) 的调用只会在日志消息写入指定的输出后返回。有一些选项和实现可以异步执行此步骤,并在调用后立即返回。 IIRC,logback 有这个。

  2. 如果记录太多,线程将忙于执行日志记录语句,而不会执行其他任何操作。这就是为什么日志框架尝试尽可能有效和高效地完成任务,例如仅在实际完成日志记录时评估日志消息格式。早些时候,这是通过将日志记录语句封装到 if 子句中来完成的:

    if (log.debugEnabled()
    log.debug("some Message " + withAnIntensiveToStringCall());

关于java - 为什么通过 slf4j 进行日志记录会导致饥饿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32650825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com