【发布时间】:2011-07-02 00:28:12
【问题描述】:
我对 NLog 库中的这种方法有疑问:NLog.Targets.Wrappers.AsyncTargetWrapper.ProcessPendingEvents(object state)
它消耗过多的 cpu 时间。我使用 Nlog 长期运行 Windows 服务,两天后我的服务消耗了超过 80% 的 cpu 时间(一个核心几乎是 80%,第二个是 30%)。它不是 100% cpu 时间,但它正在发生变化,并且在 cca 2 小时后恢复正常。所以我运行了分析器,这个方法可能导致它:NLog.Targets.Wrappers.AsyncTargetWrapper.ProcessPendingEvents(object state)
我有 10 个文件目标都设置为异步。事实上,我的应用程序有很多日志记录,但仅在 Trace 级别,如果我切换到 Info 级别,它没有帮助。
你能帮我吗,我应该减少我的应用程序的登录吗?
【问题讨论】:
-
您登录的频率如何?每秒1000条线? 1分钟? ProcessPendingEvents 只是在 AsyncTargetWrapper 类内的计时器上定期调用。您能否详细说明您正在执行多少日志记录?
-
“我已经运行了分析器,而这个方法也许会导致它”。强调也许。
-
@MattC:很难说。我在整个应用程序中都进行了日志记录,并且频率取决于日志记录级别。我不知道 NLog 是如何工作的。即使级别很高,它也可能会处理所有日志(假设我有很多跟踪日志,但日志级别在 Info 上,因此文件中的信息日志只会更高)。我不知道如何找到这个频率。有什么想法吗?
-
Svensson:这种方法在 CPU 时间分析中排名第一。如果采用这种方法,我 99% 肯定是这个问题。