- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从 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.
所以我的问题:
日志记录是同步的
中真正同步的是什么,调用toString()
或I/O
或其他一些问题正在记录?
为什么同步日志记录会导致饥饿?
最佳答案
这意味着,对 logger.log(...)
的调用只会在日志消息写入指定的输出后返回。有一些选项和实现可以异步执行此步骤,并在调用后立即返回。 IIRC,logback 有这个。
如果记录太多,线程将忙于执行日志记录语句,而不会执行其他任何操作。这就是为什么日志框架尝试尽可能有效和高效地完成任务,例如仅在实际完成日志记录时评估日志消息格式。早些时候,这是通过将日志记录语句封装到 if
子句中来完成的:
if (log.debugEnabled()
log.debug("some Message " + withAnIntensiveToStringCall());
关于java - 为什么通过 slf4j 进行日志记录会导致饥饿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32650825/
考虑以下服务器: public class TestServer { public static void main(String[] args) { String ksName = "/so
我正在研究工作队列处理器的设计,其中 QueueProcessor 从队列中检索命令模式对象并在新线程中执行它。 我正在尝试解决嵌套命令可能导致死锁的潜在队列锁定场景。 例如 一个 FooComman
通过使用 UNIX 管道进行进程同步,我们是否会陷入饥饿?例如: void pipesem_wait(struct pipesem *sem) { char onebyte = 'A';
这是使用 Scala 2.8 Actors。我有一个可以并行化的长时间运行的工作。它由大约 650,000 个工作单元组成。我将它分成 2600 个不同的独立子任务,并为每个子任务创建一个新角色: a
回答问题:Task.Yield - real usages?我建议使用 Task.Yield 允许池线程被其他任务重用。在这样的模式中: CancellationTokenSource cts;
我是一名优秀的程序员,十分优秀!