写入 log4net FileAppender 时存在多线程性能问题

2023-12-29

TickZoom 是一款非常高性能的应用程序,它使用自己的并行化库和多个操作系统线程来平滑地利用多核计算机。

该应用程序遇到了瓶颈,用户需要从单独的操作系统线程将信息写入 LogAppender。

FileAppender 使用 MinimalLock 功能,以便每个线程都可以锁定并写入文件,然后释放它以供下一个线程写入。

如果 MinimalLock 被禁用,log4net 会报告有关文件已被另一个进程(线程)锁定的错误。

log4net 执行此操作的更好方法是使用单个线程负责写入 FileAppender,而任何其他线程只需将其消息添加到队列中即可。

这样,可以禁用MinimalLock来极大地提高日志记录的性能。

此外,应用程序会执行大量 CPU 密集型工作,因此使用单独的线程写入文件也将提高性能,这样 CPU 就不会等待 I/O 完成。

那么问题来了,log4net 已经提供这个功能了吗?如果是这样,如何启用线程写入文件?也许还有另一个更高级的附加程序?

如果没有,那么由于 log4net 已经封装在平台中,因此可以在 TickZoom 代码中为此目的实现单独的线程和队列。

真挚地, 韦恩

EDIT:

谢谢,答案似乎指向开发我们自己的解决方案,也许以某种方式作为 log4net 的扩展。他们清楚地表明 log4net 不会做这种类型的事情。

此外,我们刚刚意识到我们可能正在“滥用”日志系统,该系统主要用于人类可读的消息,以通知重要事件或调试信息。软件输出的这个特定部分仅真正用于验证系统准确性的自动化工具。

当然,我们也以“正常”方式使用 log4net 进行调试、警告等。

但这些更像是“事务日志”,而不是调试或用户通知日志。更具体地说,这些日志不需要人类直接可读。如果需要,某种“查看器”可以以 ASCII 形式显示内容。

因此,我们计划将这些事务类型日志写入高速二进制存储。

谢谢,看来下面的两个答案都对开发我们自己的解决方案有很大的推动作用。


Log4net 不支持您描述的确切场景。不过,它确实提供了其他不锁定的附加程序,例如数据库附加程序或 UDP 附加程序。这里有一些想法:

  1. 将您的消息记录到消息中 队列,然后有一个读者(或 几个读者)读完消息 队列并将它们写入日志。 这提供了一个可靠的机制 发送/写入消息。说实话 不知道是否已经有 MSMQ 附加程序,但编写它 自己也不会太辛苦。

  2. 使用UDP附加器发送 消息,然后编写自己的消息 监听这些的服务 消息并将其写入文件。

我认为您可以在这里检测到一个主题...基本上使用非阻塞附加程序之一(或编写您自己的)并实现您自己的服务,该服务从附加程序接收消息并将它们写入文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

写入 log4net FileAppender 时存在多线程性能问题 的相关文章

随机推荐

  • 如何将项目与弹性容器的开始和居中对齐? [复制]

    这个问题在这里已经有答案了 I have this plunker http plnkr co edit gZHmQJa4OlEJTksjLHYm p preview this plunker http plnkr co edit JFRN
  • 导入错误:没有名为 mako.template 的模块

    我的 foobar py 文件中的这行代码 from mako template import 结果是 导入错误 没有名为 mako template 的模块 我怎样才能解决这个问题 两个都help modules and repr mak
  • 如何在 BigQuery 标准 SQL 中获取数组的切片?

    在 BigQuery 中 我有一个表 其中包含path像这样的列 ID Path 1 foo bar baz 2 foo bar quux blat 我希望能够在正斜杠上分割路径 并选择一个或多个路径部分 然后重新连接它们 在 Postgr
  • Echo与Echo的区别[特殊字符]

    编写批处理文件时 我发现有些人使用Echo Echo Echo 等等 这些回显空行 那么这些之间有什么区别Echo Special Character 您可以使用许多不同的字符echo 之一 但对于一个人来说有很多要求good choice
  • React-Native 中的倒计时器

    我想在反应原生中加载屏幕时从 3 倒计时到 1 我用 setTimeOut 尝试过 但没有成功 我在这里做错了什么 我怎样才能实现这个目标 当屏幕加载时 我想以 1 秒的间隔显示 3 gt 2 gt 1 这是我的代码 constructor
  • 创建 SAML 断言并签署响应

    我有一个 Java Web 应用程序 我想为我的应用程序实现 SAML 单点登录 我有这个GitHub onelogin 程序 https github com onelogin java saml发送请求并获取响应 但它无法正常工作 我在
  • 如何使 IEnumerable 只读?

    为什么是列表list1Instance and p in the Main下面的代码的方法指向同一个集合 class Person public string FirstName string Empty public string Las
  • 将列添加到稀疏矩阵

    当我执行以下代码时 我得到一个稀疏矩阵 import numpy as np from scipy sparse import csr matrix row np array 0 0 1 2 2 2 col np array 0 2 2 0
  • 实体框架是否与 SQL Server 绑定?

    如果我想连接到 Oracle MySQL 甚至 MS Access 怎么办 不 它使用 ADO Net 提供程序 模型插入数据库提供程序以提供对任何第三方数据库的访问 可用列表第三方 EF 提供商在这里 http msdn microsof
  • 进入前台时的 UIRefreshControl 错误

    当我使用时我注意到一个小错误 但真的很烦人 UIRefreshControl在我的视图控制器中 当应用程序从后台返回时UIRefreshControl已经加载 看起来像这样 正如你所看到的 我使用了一个自定义导航控制器 它像 Faceboo
  • 为什么 Google 云端硬盘返回“无法解析内容范围标头。”?

    这是我的简单代码 用于恢复 可能 中断的 Google Drive 上传 Using message New ByteArrayContent New Byte message Headers ContentRange New Header
  • 从左到右表达式求值

    在 C 中 是否保证表达式从左到右计算 例如 myClass GetClass if myClass null myClass Property gt 0 continue 是否存在不符合规定的语言 您实际上指的是一种称为 短路逻辑表达式
  • 如何拥有与 OnPropertyChanged 一起使用的 UserControl 的可绑定属性

    我有一个带有一些公共属性的简单用户控件 WinForms 当我使用此控件时 我想将 DataSourceUpdateMode 设置为的数据绑定到这些属性属性改变时 数据源是一个实现 INotifyPropertyChanged 的 类 我知
  • 如何使用 Django 智能选择来过滤 ManyToManyField?

    class Course models Model course code models CharField max length 100 unique True title models CharField max length 200
  • 插入数据库时​​对密码进行哈希加密

    我正在为学校做一个应用程序 在将密码插入我的用户数据库时需要加密密码的帮助 我正在使用 C 编程语言进行编程 并且使用 MS server 2008 R2 来操作我的数据库 我正在考虑进行哈希加密 如果有人帮助我 我会很高兴 这是我将数据插
  • 查找 System.AccessViolationException 的原因

    我们的应用程序遇到了奇怪的致命 System AccessViolationException 当我们配置 AppDomain CurrentDomain UnhandledException 事件来记录异常时 我们会看到这些 Except
  • 这个 PHP 代码安全吗?

    只是一个简单的问题 以下 PHP 代码安全吗 还有什么你认为我可以或应该补充的吗 post GET post if is numeric post post mysql real escape string post else die NA
  • C# 将一个字符串的一部分复制到另一个字符串

    我正在尝试将文本框的部分文本复制到另一个字符串 例如 如果我的文本框包含 10 个字符 我想将字符 3 到字符 7 复制到另一个名为 TEST 的字符串 我们该怎么做呢 when textbox contains ABCDEFGHIJ th
  • 从 R 中的一系列情节创建电影 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有一种简单的方法可以通过在 R 中将多个情节拼接在一起来创建 电影 这是我使用 R 帮助找到的一种方法 要创建单独的图像帧 jpe
  • 写入 log4net FileAppender 时存在多线程性能问题

    TickZoom 是一款非常高性能的应用程序 它使用自己的并行化库和多个操作系统线程来平滑地利用多核计算机 该应用程序遇到了瓶颈 用户需要从单独的操作系统线程将信息写入 LogAppender FileAppender 使用 Minimal