IOException写入事件日志

时间:2016-04-01 14:30:34

标签: .net windows-server-2003 event-log

我们今天遇到了这个例外情况,我们一直在重复执行导致它的行动

System.IO.IOException: Insufficient system resources exist to complete the requested service.

   at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
   at Microsoft.Win32.RegistryKey.SetValue(String name, Object value, RegistryValueKind valueKind)
   at System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData)
   at System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, String currentMachineName)
   at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
   at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
   at System.Diagnostics.EventLog.WriteEntry(String source, String message)
   at DoWork()

重新启动为我们解决了这个问题,但没有解释根本原因。我们通常编写一个少于20个字符的源和一个小于100的消息。运行代码的机器上的资源使用情况很好。

1 个答案:

答案 0 :(得分:1)

重新启动完成后我挖了一下,从事件查看器中获取了应用程序日志的副本。那天只有66,000个活动。我写了一个测试应用程序,将66,000个独特的消息写入日志,并且很快就完成了。

然后我注意到每隔10个消息就有不同的来源,所以我改变了我的测试应用程序,每次都写一个独特的来源和消息。大约15分钟后,它只写了6000。

虽然我无法在问题中重现异常,但我认为我们的问题是我们不必要地创建新的EventSources,这经常违背建议的写入事件日志的方式。

作为附录,如果来源已经存在,那就不会有那么大的问题了