【发布时间】:2018-06-07 11:24:35
【问题描述】:
我们的应用程序中记录了以下异常:
System.IO.IOException:系统资源不足,无法完成 请求的服务。在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径)在 System.IO.FileStream.FlushOSBuffer() 在 System.IO.FileStream.Flush(Boolean flushToDisk) 在 ImageResizer.Plugins.DiskCache.CustomDiskCache.c__DisplayClass29_0.b__0() 在 ImageResizer.Plugins.DiskCache.LockProvider.TryExecute(字符串键, Int32 timeoutMs,LockCallback 成功)在 ImageResizer.Plugins.DiskCache.CustomDiskCache.GetCachedFile(字符串 keyBasis、字符串扩展、ResizeImageDelegate writeCallback、Int32 timeoutMs,布尔异步)在 ImageResizer.Plugins.DiskCache.DiskCache.Process(IResponseArgs e) 在 ImageResizer.Plugins.DiskCache.DiskCache.Process(HttpContext 上下文, IResponseArgs e) 在 ImageResizer.InterceptModule.HandleRequest(HttpContext 上下文, HttpModuleRequestAssistant ra,IVirtualFile vf) 在 ImageResizer.InterceptModule.CheckRequest_PostAuthorizeRequest(对象 发件人,EventArgs e) 在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep 步骤) 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,布尔值& 同步完成)
我们有一个负载平衡的环境,其中两个 Web 服务器在单独的文件服务器上使用相同的缓存文件夹。
我们的磁盘缓存配置是这样的:
<diskcache dir="~/imageresizercache" autoClean="true" hashModifiedDate="true" />
知道为什么我们会得到这个异常吗? 谢谢,
【问题讨论】:
-
这是一个非常不寻常的事故,以前从未见过。底层操作系统调用 (FlushFileBuffers) 没有很多充分的理由来耗尽内存。不要怀疑反恶意软件产品是反的。并密切关注操作系统内核内存池统计数据,这不是便宜的代码,并且有太多的客户端同时访问您的网络服务器确实有让它屈服的诀窍。考虑使用静态信号量来限制并发调用的数量。
标签: c# imageresizer diskcache