ImageResizer应用程序崩溃

时间:2013-11-07 09:09:45

标签: c# iis-7 imageresizer

我们让ImageResizer抛出下面显示的错误,随后我相信应用程序池崩溃了,一个新的启动了......反过来,这也导致了大量的图像队列建立起来,服务也减少了一半一小时。有人见过这个吗?

请注意,我们还在EventLog中看到了ImageResizer中的一些“访问被拒绝”错误,其中包含文件名中包含“images”的图像。不确定是否相关。

任何想法都会非常感激

  

异常信息:       异常类型:ImageProcessingException       异常消息:无法获取文件锁定“E:\ images \ 1d \ 3a05214b1dfa98e41d04ed86db6c3f6e600347e92a1b102016e8eac5ee15a9ed.jpg”   在15000ms之内。缓存失败。在   ImageResizer.Plugins.DiskCache.DiskCache.Process(IResponseArgs e)
  在ImageResizer.Plugins.DiskCache.DiskCache.Process(HttpContext   上下文,IResponseArgs e)at   ImageResizer.InterceptModule.HandleRequest(HttpContext context,String   virtualPath,NameValueCollection queryString,IVirtualFile vf)at   ImageResizer.InterceptModule.CheckRequest_PostAuthorizeRequest(对象   发件人,EventArgs e)at   System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔和放大器; completedSynchronously)

1 个答案:

答案 0 :(得分:0)

“让它运行提示”

首先,请确保您正在运行ImageResizer 3.4或更高版本,因为它解决了与文件刷新相关的4.0 CLR中的一些新错误。

其次,确保没有可以在运行时扫描或锁定文件的防病毒软件(AV喜欢在文件写入后立即扫描文件,锁定它们直到它们“通过”)。

第三,确保没有模拟发生 - 缓存文件由ASP.NET编写,但由IIS提供,因此可以涉及多个用户帐户。

第四,确保服务器的磁盘启用异步写入。这极大地减少了文件句柄争用。您还可以在ImageResizer的DiskCache中启用asyncWrites来帮助。

诊断罪魁祸首

如果发生了一组特定的文件(并且损坏的图像不会很快“修复”),您可能会永久锁定文件,防止工作进程意外死亡。通常,这些文件的唯一解决方案是重新启动服务器,但首先尝试使用Sysinternals工具。 Sysinternals Process Montior, Process Explorer, and Handle可用于诊断导致锁定的进程(当然不是进程中的哪个软件)。

诊断杀死进程的方法并不是非常困难,但可能非常耗时。 Turn on failed request tracing(如果这没有帮助,请使用adplus to get a crash dump)。崩溃转储可以识别罪魁祸首,但失败的请求跟踪只能为您提供良好的提示。在我检查的崩溃转储中,ImageResizer几乎从来都不是原因,因为它使用了非常好的内存管理并且往往很好地管理错误。如果您有任何其他处理成像的软件,您可以考虑禁用它们。

由于ImageResizer是一种Web服务,通​​常可以在使用不同应用程序池的子应用程序中运行它。如果您怀疑ImageResizer是问题所在,这通常是最快的确定方式。当然,如果您的图像是由多个根级目录提供的,那么这可能需要一些时间,因为您必须创建多个子应用程序。