【问题标题】:ImageResizer diskcache System.IO.IOExceptionImageResizer 磁盘缓存 System.IO.IOException
【发布时间】: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


【解决方案1】:

您能分享一下诊断页面吗? /resizer.debug

听起来共享文件服务器存在瓶颈。如果缓存文件没有存储在本地,一般最好禁用 autoClean。

【讨论】:

  • 我们将 Web 服务器更改为本地存储,并且不再抛出此异常。在我们更改的同一时刻,一些 CPU 峰值也停止了。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 2015-10-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多