Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# log4net性能问题:消息之间的固定延迟_C#_Performance_Logging_Log4net - Fatal编程技术网

C# log4net性能问题:消息之间的固定延迟

C# log4net性能问题:消息之间的固定延迟,c#,performance,logging,log4net,C#,Performance,Logging,Log4net,我有相当复杂的应用程序,其中包括2个网站和3个windows服务。都使用相同的log4net配置,只需写入不同的文件: <log4net> <logger name="Default"> <appender-ref ref="VerboseLogFileAppendder" /> </logger> <appender name="VerboseLogFileAppendder" type="log4net.Appende

我有相当复杂的应用程序,其中包括2个网站和3个windows服务。都使用相同的log4net配置,只需写入不同的文件:

<log4net>
  <logger name="Default">
    <appender-ref ref="VerboseLogFileAppendder" />
  </logger>
  <appender name="VerboseLogFileAppendder" type="log4net.Appender.RollingFileAppender">
    <threshold value="DEBUG" />
    <file value="Logs\MyProductName" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <maximumFileSize value="100MB" />
    <datePattern value="'.'yyyy-MM-dd'.log'" />
    <staticLogFileName value="false" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%-3thread] %-5level - %message%newline" />
    </layout>
  </appender>
</log4net>
如您所见,即使只是记录对象的属性,延迟也超过300毫秒(没有复杂的逻辑来检索它们)。我发现这个延迟与日志大小成正比:如果它是1MB,那么延迟大约是100ms,2MB-200ms,3MB-300ms。我想知道是什么导致了这样的问题。任何想法都将受到高度赞赏

调查详情:

由于我们没有直接使用log4net,而是创建了一个包装器,我首先认为包装器中有一个bug,但它非常简单,我不知道它怎么可能只在一个站点中引起如此奇怪的问题

VS 2013 performance analyzer出乎意料地没有说记录器方法采集的样本最多(我使用了采样分析)。我认为这证明了问题不在逻辑上,而是在应用程序线程挂起时访问外部资源

没有发现两个站点之间的任何差异,这两个站点在一个站点上会导致此问题,而在另一个站点上会导致工作查找。当然,这些站点非常不同,但没有可疑的环境或IIS配置差异

我有一个想法,日志文件在每次写入时打开和关闭,但我不知道如何确定。我可以在记事本中打开日志,在应用程序运行时编辑并保存它。也许这就是一个证据。但在这种情况下,延迟是否应该与文件大小几乎固定(不成比例)?系统所需要的只是查找到由文件大小定义的文件的末尾(如果文件已分区,可能很少查找,但这并不重要)。如果这是问题所在,我如何解决它?我尝试使用缓冲日志追加器,但结果相同

另一个想法是,防病毒软件在每次写入时都会检查文件,但禁用它并不能解决问题

更新:

将logs文件夹从本地相对路径更改为其他目录“D:\logs…”解决了我的开发环境中的问题,但在测试机上不起作用

更新2


这个问题的重现并不稳定。有一天,我可能会遇到所描述的性能问题,并且不会重新启动,或者更改日志配置会有所帮助;但有一天问题消失了,我想我找到了解决办法。但现在它又在复制,我不知道为什么会发生这种情况。

很难诊断这些问题,因为可能有许多因素在解释这种差异。不过,您提到您有许多日志参与者。它们都在同一台机器上吗?您发布的配置文件是否是存在问题的站点的配置文件


这不是对您的问题的直接回答,但您也可以研究
缓冲转发器appender
(),它将消息累积到配置的限制。这不会直接解决问题,但会加重日志文件上的“写入税”,并且它有一些有趣的属性(例如有损日志记录,但这不是主题:)

我理解这很难,尽管描述很长,但没有太多有用的细节,但这就是我的情况=(.是的,我提供的配置是针对有问题的站点的。我尝试了BufferingForwardAppender-相同的结果。服务和站点是否都在同一台机器上?是的,但每个进程都会写入不同的文件2天的调查,现在我们都同时想到了更改日志路径的相同想法-我已经这样做并进行了测试2分钟前=)。它解决了问题!将日志写入本地站点文件夹是个坏主意,尽管我不知道为什么它只为一个站点创建问题。请将此作为答案发布,我将接受它。bufferSize=50的BufferingForwardAppender似乎在本地和发布环境中都修复了此问题
2014-03-21 21:48:19,163 [24 ] INFO  -       Begin SiteColourTheme
2014-03-21 21:48:19,489 [24 ] INFO  -         IsChanged = False
2014-03-21 21:48:19,808 [24 ] INFO  -         GridHeaderColour.BackgroundColour = #373F71
2014-03-21 21:48:20,133 [24 ] INFO  -         GridHeaderColour.IsBackgroundColourChanged = False
2014-03-21 21:48:20,464 [24 ] INFO  -         GridHeaderColour.FontColour = #E0E0E0
2014-03-21 21:48:20,800 [24 ] INFO  -         GridHeaderColour.IsFontColourChanged = False
2014-03-21 21:48:21,134 [24 ] INFO  -         GridHeaderColour.IsColourThemeChanged = False
2014-03-21 21:48:21,475 [24 ] INFO  -         DialogHeaderColour.BackgroundColour = #373F71
2014-03-21 21:48:21,810 [24 ] INFO  -         DialogHeaderColour.IsBackgroundColourChanged = False
2014-03-21 21:48:22,139 [24 ] INFO  -         DialogHeaderColour.FontColour = #FFFFFF
2014-03-21 21:48:22,462 [24 ] INFO  -         DialogHeaderColour.IsFontColourChanged = False
2014-03-21 21:48:22,781 [24 ] INFO  -         DialogHeaderColour.IsColourThemeChanged = False
2014-03-21 21:48:23,122 [24 ] INFO  -         AccordionPaneColour.BackgroundColour = #F8F8F8
2014-03-21 21:48:23,481 [24 ] INFO  -         AccordionPaneColour.IsBackgroundColourChanged = False
2014-03-21 21:48:23,862 [24 ] INFO  -         AccordionPaneColour.FontColour = #2B2B2B
2014-03-21 21:48:24,202 [24 ] INFO  -         AccordionPaneColour.IsFontColourChanged = False
2014-03-21 21:48:24,522 [24 ] INFO  -         AccordionPaneColour.IsColourThemeChanged = False
2014-03-21 21:48:24,862 [24 ] INFO  -         PageTabColour.BackgroundColour = #DCDBDB
2014-03-21 21:48:25,208 [24 ] INFO  -         PageTabColour.IsBackgroundColourChanged = False
2014-03-21 21:48:25,527 [24 ] INFO  -         PageTabColour.FontColour = #000000
2014-03-21 21:48:25,855 [24 ] INFO  -         PageTabColour.IsFontColourChanged = False