log4net性能小探
初步测试了Log4性能。Appender架构如下。
一般客户端,使用FileAppender,把Log记录在本地磁盘。
<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性能小探的更多相关文章
- android性能小贴士 翻译
转自http://developer.android.com/training/articles/perf-tips.html 性能小贴士: 这篇文档主要一些微优化可以提升应用程序性能,但是这些改变不 ...
- 五个 .NET 性能小贴士
原文:bit.ly/3wSpO4o 作者:Nikita Starichenko 翻译:精致码农 大家好!今天我想和大家分享几个 .NET 的性能小贴士与基准测试. 我的系统环境: BenchmarkD ...
- C++ 性能小测 1 二维数组的遍历效率
C++ 性能小测 1 二维数组的遍历效率 遍历二维数组时,常规思路是使用一个嵌套循环.一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层.另一方面,由于二维数组是按行存储 ...
- Elasticsearch 学习之提升性能小贴士
小贴士1:规划索引.分片 以及集群增长情况 ES使得创建大量索引和超大量分片非常地容易,但更重要的是理解每个索引和分片都是一笔开销.如果拥有太多的索引或分片,单单是管理负荷就会影响到ES集群的性能,潜 ...
- HTTP性能小测试
一直说node.js如何如何好,就来测试一下吧~~ 首先接受一个小工具 Apache Bench简称ab 可以用来测试http性能 利用Apache Bench测试Web引擎性能关于此工具的详细介绍参 ...
- 朱晔和你聊Spring系列S1E5:Spring WebFlux小探
阅读PDF版本 本文会来做一些应用对比Spring MVC和Spring WebFlux,观察线程模型的区别,然后做一下简单的压力测试. 创建一个传统的Spring MVC应用 先来创建一个新的web ...
- 即兴小探华为开源行业领先大数据虚拟化引擎openLooKeng
@ 目录 概述 定义 背景 特点 架构 关键技术 应用场景 安装 单台部署 集群部署 命令行接口 连接器 MySQL连接器 ClickHouse连接器 概述 定义 openLooKeng 官网地址 h ...
- SAP CRM 性能小技巧
导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...
- jQuery代码性能小细节
选择器Selector的使用 $("#id")使用id来定位DOM元素无疑是最佳提高性能方式,因为jQuery底层将直接调用本地方法document.getElementbyId( ...
随机推荐
- Oracle SOA套件12c
产品概览 随着基于云的应用越来越多的被企业所採用,以及移动技术与企业应用的集成的需求的增多,企业级应用集成的复杂度也前所未有的提升. Oracle SOA套件12c,业内最完整的统一应用集成解决方式的 ...
- debian SSD ext4 4K 对齐
新入手了一台thinkpad, 原来的机械硬盘是500G的, 于是购入一块镁光的MX200 250G的SSD来新装debian stable(jessie) 1, 安装系统的之前按住F1进入bios后 ...
- VMware Mac OS补丁安装
安装了VMware9.0在新建虚拟系统的时候,没有Appel MAC OS系统的选项,上网查了一下是需要打一个VMware Mac OS补丁就可以了.下面我来演示一下VMware Mac OS补丁怎么 ...
- 如何自定义View
1. 首先 在values目录下建立attrs.xml文件,添加属性内容 ·在布局文件中添加新的命名空间xmlns,然后可以使用命名空间给自定义的空间设置属性 attrs.xml <resour ...
- 模拟多级复选框效果--jquery
今天又次体会到jquery的强大了,做了个多级复选框的效果,代码总共就20+行就over了. 我又想用js来做一个看看,才写了几个方法就写不动了,兼容性要考虑很多,而且代码量直线上升. 主要分享下jq ...
- JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期
JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...
- linux 改动时间和日期date
查看日期和时间 date 改动日期 date -s 月/日/年 date -s 08/15/2015 改动时间 date -s 09:29:33 写入CMOS sudo clock -w 利用ssh同 ...
- TSharding源码阅读-MapperShardingInitializer
/** * 增强Mapper处理总入口:Mapper被mybatis初始化后,在这里做进一步的处理和增强 * * @author qigong on 5/1/15 */ public class Ma ...
- 脑法之中的一个 --- DEBUG与搜索算法
前年闲的蛋疼的时候,看过天津卫视的一档节目<非你莫属>,就来一堆面试者,上面几个壕.选人.记得有一期是给程序猿做的.当中有一个程序猿(好像是媛)傻不啦叽的说,哎呀,我每次DEBUG找到程序 ...
- 如何更好的利用Node.js的性能极限
通过使用非阻塞.事件驱动的I/O操作,Node.js为构建和运行大规模网络应用及服务提供了很好的平台,也受到了广泛的欢迎.其主要特性表现为能够处理庞大的并且高吞吐量的并发连接,从而构建高性能.高扩展性 ...