首页 > 其他分享 >log4net性能小探

log4net性能小探

时间:2024-05-16 14:52:16浏览次数:17  
标签:log4net 12 Log ExclusiveLock 性能 小探 Buffer 2015

初步测试了Log4性能。Appender架构如下。

一般客户端,使用FileAppender,把Log记录在本地磁盘。

1 <lockingModel type="log4net.Appender.FileAppender+InterProcessLock"/>

 lockingModel影响性能。有三种模式:ExclusiveLock,MinimalLock,InterProcessLock。

默认是ExclusiveLock,此时若程序打开且第一次写Log后,Log文件就被锁定,Log文件无法删除。

MinimalLock是最小锁,速度很慢。因为每次都打开关闭文件。程序打开时,Log可实时删除,证明确实最小化锁文件。

InterProcessLock,进程间锁。速度不慢与ExclusiveLock相似。且提供进程间同步,内部使用了Mutex。

客户端程序,若允许打开多个,则必须使用InterProcessLock锁。若使用其他两种锁,会出现并发问题。现象就是能出现怪异的文件目录,这事Log4自身bug引起。比如目录为如下:\Logs\2015-12\2015-12-06-11.log,并发问题产生后,出现如下目录:Logs\2015-12\2015-12-06-11.log2015-12\2015-12-06-11.log。若客户端仅仅允许一个进程打开,则使用ExclusiveLock,速度最快。应该比MinimalLock快20X。

对于Web端,还是使用ExclusiveLock即可,ASP.Net网站一般不会多进程写Log。

但我们追求性能时,希望使用BufferingAppenderSkeleton下的类。但测试发现了问题,比没有Buffer的更慢。

在此贴中有外国人描述了现象。http://stackoverflow.com/questions/11319319/log4net-bufferingforwardingappender-performance-issue。是由于Buffer类型,要对每个LogEvent数据Fix下一些易变的数据(log4net.Core.LoggingEvent.FixVolatileData方法非常耗时),但Fix什么数据是Flag Enum类型,是可配置的。觉得<Fix value="12"/>  够用,而且速度大大提升。

使用Buffer类型后,发现文件锁lockingModel的影响变小,因为Buffer导致写文件次数大大降低,即使使用MinimalLock锁,性能影响也不大。

Buffer类型虽然对繁忙系统Log性能大大提升,但会对于较少Log系统的系统造成影响,因为写Log不及时,可能很久也无法写入磁盘或数据库。导致出现问题时,Log在内存,无法查看Log。

给出如下配置,有些配置节可能是冗余,不是很严谨,自己用的。

复制代码
<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="LocalFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件-->
    <param name="File" value="Logs\"/>
    <!--是否追加到文件-->
    <param name="AppendToFile" value="true"/>
    <!--ExclusiveLock,MinimalLock,InterProcessLock-->
    <lockingModel type="log4net.Appender.FileAppender+InterProcessLock"/>
    <!--Unicode编码-->
    <Encoding value="UTF-8"/>
    <!--最多产生的日志文件数,value="-1"为不限文件数-->
    <param name="MaxSizeRollBackups" value="1000"/>
    <!--是否只写到一个文件中-->
    <param name="StaticLogFileName" value="false"/>
    <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
    <param name="RollingStyle" value="Date"/>
    <!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]-->
    <param name="DatePattern" value="yyyy-MM\\yyyy-MM-dd-HH'.log'"/>
    <!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名-->
    <param name="MaximumFileSize" value="50KB" />
    <!--记录的格式。-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c %n - %m%n"/>
    </layout>
  </appender>
  <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
    <bufferSize value="512" />
    <appender-ref ref="LocalFileAppender" />
    <Fix value="12"/>    <!--Mdc:1;Ndc:2;Message:4;ThreadName:8;LocationInfo:16;UserName:32;Domain:64;Identity:128;Exception:256;Properties:512;None:0;All:268435455;Partial:844 http://stackoverflow.com/questions/11319319/log4net-bufferingforwardingappender-performance-issue-->
  </appender>
  <root>
    <level value="ALL" /> 
    <appender-ref ref="BufferingForwardingAppender" />
  </root>
</log4net>
复制代码

 

另外发现,RollingStyle为Date时,设置DatePattern到秒级别HH:mm:ss,并非每秒一个Log文件。是因为,Log4的Roll探测精度默认为1分钟。而且最高时间精度是1分钟。

标签:log4net,12,Log,ExclusiveLock,性能,小探,Buffer,2015
From: https://www.cnblogs.com/Alex80/p/18195936

相关文章

  • 网络性能监控:揭开网络故障的“黑匣子”
    网络性能监控是现代企业网络运维的重要组成部分,它可以帮助企业及时发现并解决网络问题,确保网络的稳定运行。而流量回溯分析则是网络性能监控中不可或缺的一项功能,它可以帮助企业快速定位网络故障的根源,从而提高网络故障的解决效率。流量回溯分析:网络故障的“侦探”流量回溯分析......
  • 弃用MHz!微软Windows 11内存性能指标切换到 MT/s
    微软近日面向Beta频道的WindowsInsider项目成员发布了Windows11系统的KB5037008更新。本次更新引入了一项重要的性能指标变化:将任务管理器中的内存性能指标从MHz(兆赫)切换到MT/s(每秒兆传输数)。计算机内存的数据传输速度一直以MHz为单位,MHz代表内存模块每秒可以执行多少百万个......
  • 在Linux中,如何进行数据库性能调优?
    在Linux中进行数据库性能调优是一个复杂但重要的任务,它涉及到多个方面,包括硬件、配置、查询优化、索引优化等。以下是一些建议的步骤和策略,帮助你进行数据库性能调优:1.硬件优化磁盘:使用SSD(固态硬盘)替代HDD(机械硬盘),以提高I/O性能。将数据库文件和日志文件放置在不同的物理磁......
  • 在Linux中,如何进行Java应用性能调优?
    在Linux环境中进行Java应用程序的性能调优是一个多步骤的过程,涉及到监控、分析和调整多个层面的配置。以下是进行Java应用性能调优的一些关键步骤和策略:1.监控和分析工具的使用JVM监控工具:利用jstat,jmap,jstack,和jconsole等JDK自带的工具,以及更高级的工具如VisualVM、JP......
  • 数据库中存储bool对象的数据,使用Bit和Integer有什么区别,性能上有多大的差异
    在数据库中存储布尔(Boolean)值时,常见的两种选择是使用BIT类型或INTEGER类型。两者在存储、性能和使用上的区别如下:1.BIT类型存储:BIT类型专门用于存储布尔值。通常,一个BIT字段只需一个比特位来存储0或1,这在存储空间上更为紧凑。性能:在大多数情况下,BIT类型的性能表......
  • Garnet:微软官方基于.NET开源的高性能分布式缓存存储数据库
    前言前不久Redis宣布从Redis7.4开始,将原先比较宽松的BSD源码使用协议修改为RSALv2和SSPLv1协议,该协议变化意味着Redis不再开源。今天给大家分享一款完全开源(MIT协议)、免费的Redis替代性项目产品:Garnet。Redis开源协议详情:https://github.com/redis/redis?tab=License-......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——高性能的 gRPC
    远程过程调用RPC——高性能的gRPC gRPC,这一由Google推出的高性能、开源、通用RPC框架,凭借其众多引人注目的特性,已成为业界瞩目的焦点。它基于HTTP/2协议标准设计开发,并采用ProtocolBuffers作为默认的数据序列化协议,广泛支持多种编程语言。gRPC不仅简化了服务的精确定义,而且......
  • 如何把 log4net.config 文件删除, 改成代码实现
    如何把log4net.config文件改成代码?这样在编写winform或者其他客户端的时候就省去了一个配置文件分享下我常用的log4net.config配置文件<?xmlversion="1.0"encoding="utf-8"?><configuration><!--<configSections><sectionname="log4net"typ......
  • 基于UltraScale架构的XCVU3P-3FFVC1517E XCVU3P-2FFVC1517I XCVU3P-1FFVC1517E高性能
    概述VirtexUltraScale+器件是基于14nm/16nmFinFET节点的高性能FPGA,支持3DIC技术和多种计算密集型应用。AMD第三代3DIC使用堆叠硅片互联(SSI)技术打破了摩尔定律的限制,并且实现了最高信号处理和串行I/O带宽,以满足最严格的设计要求。它还提供了一个虚拟的单片设......
  • 网络性能监控利器——AnaTraf网络流量分析仪,实时流量回溯分析助您快速排除网络故障
    在当今信息爆炸的时代,网络已经成为了人们生活和工作的重要组成部分。然而,随着网络规模的不断扩大和复杂性的增加,网络性能监控和故障排除变得越来越重要。为了保证网络的稳定性和高效性,网络性能监控与诊断(NPMD)已经成为了企业和组织的必备工具。而在这个领域中,AnaTraf网络流量分析仪......