我在具有 6 个 Xeon 内核的 VDI 中运行的 Windows 2008 服务器 R2 上安装了 .NET 服务。在此问题发生期间,此服务的 CPU 利用率平均约为 10-20%,尽管间歇性地发生 DB 超时。
我的应用程序确实是盒子上唯一的东西,CPU 使用率让我相信以下不是 CPU 瓶颈或时间/切片问题。
我们使用 log4net 进行日志记录
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<File value="C:\app\service.log" />
<AppendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date{yyyy-MM-dd hh:mm:ss:fff} %-5level %logger - %message%newline" />
</layout>
</appender>
我有以下代码,删除了实际长时间运行的部分
DateTime mst = DateTime.Now;
//...really long running code
DateTime st = DateTime.Now;
//...more long running code
DateTime et = DateTime.Now;
LogHelper.LogMessage("REGISTRATION: " + subscriber.Principal.Identity.Name + " packaging complete in " + (et - st).TotalMilliseconds + "ms");
et = DateTime.Now;
LogHelper.LogMessage("REGISTRATION: " + subscriber.Principal.Identity.Name + " Registration complete in " + (et - mst).TotalMilliseconds + "ms");
通常我会收到以下日志条目
2013-07-15 07:00:02:238 DEBUG (T:118)Register - REGISTRATION: CORP\user packaging complete in 15.6001ms
2013-07-15 07:00:02:238 DEBUG (T:118)Register - REGISTRATION: CORP\user Registration complete in 1294.8083ms
但今天我得到了以下
2013-07-15 11:35:02:498 DEBUG (T:70)Register - REGISTRATION: CORP\user packaging complete in 12589.2807ms
2013-07-15 11:35:04:386 DEBUG (T:70)Register - REGISTRATION: CORP\user Registration complete in 56768.7639ms
在查看时间戳时,两个日志条目的写入间隔为 1888 毫秒,比正常执行的整个持续时间长。
- 如何衡量这是否实际上是由磁盘 I/O 瓶颈引起的?
- 还有什么可以解释通常我得到 0 的日志条目之间花费的 1888 毫秒?
我正在考虑实施此解决方案以帮助消除 I/O 作为可能的原因。