为啥在 s-s-rS 2008 中出现“报告处理中发生意外错误”?
Posted
技术标签:
【中文标题】为啥在 s-s-rS 2008 中出现“报告处理中发生意外错误”?【英文标题】:Why do we get "An unexpected error occurred in Report Processing" in s-s-rS 2008?为什么在 s-s-rS 2008 中出现“报告处理中发生意外错误”? 【发布时间】:2016-09-09 19:55:18 【问题描述】:我们经常在 s-s-rS 日志文件中看到这种错误。这似乎是 s-s-rS 引擎内部发生的内部错误。我们如何调试这个?当报告失败时,我们没有得到任何其他相关信息。
库!ReportServer_0-1!2864!09/09/2016-00:28:15:: w 警告: Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: 报告处理中出现意外错误。 ---> System.Threading.ThreadAbortException:线程被中止。在 Microsoft.Win32.Win32Native.SetFilePointerWin32(SafeFileHandle 句柄, Int32 lo, Int32* hi, Int32 origin) at Microsoft.Win32.Win32Native.SetFilePointer(SafeFileHandle 句柄, Int64 偏移,SeekOrigin 原点,Int32& hr) at System.IO.FileStream.SeekCore(Int64 偏移量,SeekOrigin 原点)在 System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin) at Microsoft.ReportingServices.Library.PartitionFileStream.Seek(Int64 偏移量,SeekOrigin 原点)在 Microsoft.ReportingServices.Library.MemoryUntilThresholdStream.Seek(Int64 偏移量,SeekOrigin 原点)在 Microsoft.ReportingServices.Library.RSStream.Seek(Int64 偏移量, SeekOrigin origin) 在 System.IO.BufferedStream.Seek(Int64 offset, SeekOrigin 起源)在 Microsoft.ReportingServices.Rendering.RPLProcessing.RPLReader.ReadElementProps(Int64 startOffset、RPLContext 上下文、字节和元素类型)在 Microsoft.ReportingServices.Rendering.ExcelRenderer.Layout.LayoutEngine.RenderNewItem(IRowItemStruct 项目,Int32 顶部,Int32 顶部行,IExcelGenerator excel,字符串 pageContentKey,字典
2 sharedBorderCache, Dictionary
2 sharedImageCache, Boolean& autosizableGrow, Boolean& autosizableShrink) 在 Microsoft.ReportingServices.Rendering.ExcelRenderer.Layout.LayoutEngine.RenderPageToExcel(IExcelGenerator excel,字符串键,字典2 sharedBorderCache, Dictionary
2 共享图像缓存)在 Microsoft.ReportingServices.Rendering.ExcelRenderer.MainEngine.RenderRPLPage(RPLReport 报告,布尔 headerInBody,布尔抑制大纲)在 Microsoft.ReportingServices.Rendering.ExcelRenderer.ExcelRenderer.Render(报告 报告,NameValueCollection 报告服务器参数, NameValueCollection 设备信息、NameValueCollection 客户端能力、哈希表和渲染属性, CreateAndRegisterStream createAndRegisterStream) 在 Microsoft.ReportingServices.ReportProcessing.Execution.RenderReport.InvokeRenderer(IRenderingExtension 渲染器,报告报告,NameValueCollection 报告服务器参数, NameValueCollection 设备信息、NameValueCollection 客户端能力、哈希表和渲染属性, CreateAndRegisterStream createAndRegisterStream) 在 Microsoft.ReportingServices.ReportProcessing.Execution.RenderReport.Execute(IRenderingExtension newRenderer) --- 内部异常堆栈跟踪结束 --- at Microsoft.ReportingServices.ReportProcessing.Execution.RenderReport.Execute(IRenderingExtension 新渲染器)在 Microsoft.ReportingServices.ReportProcessing.ReportProcessing.RenderReport(日期时间 executionTimeStamp, ProcessingContext pc, RenderingContext rc, IChunkFactory yukonCompiledDefinition) at Microsoft.ReportingServices.Library.RenderLive.CallProcessingAndRendering(ProcessingContext pc, RenderingContext rc, OnDemandProcessingResult& 结果) 在 微软报告服务 webserver!ReportServer_0-1!2864!09/09/2016-00:28:16:: e 错误: 投掷 Microsoft.ReportingServices.Diagnostics.Utilities.UnhandledHttpApplicationException: , Microsoft.ReportingServices.Diagnostics.Utilities.UnhandledHttpApplicationException: 报表服务器在 Http应用程序。 ---> System.Web.HttpException: 请求超时。 --- 内部异常堆栈跟踪结束 ---;
--------- 更新 ----------
我在日志中看到了新的错误
library!WindowsService_0!e88!09/09/2016-17:09:45::e 错误:抛出 Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: , 报表服务器数据库中发生错误。这可能是 由于连接失败、超时或磁盘条件低 数据库。; dbcleanup!WindowsService_0!e88!09/09/2016-17:09:45::e 错误:CleanOrphanedSnapshots 中的错误: Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: 报表服务器数据库中发生错误。这可能是由于 连接失败、超时或磁盘不足 数据库。 ---> System.Data.SqlClient.SqlException:超时已过期。 在操作完成之前经过的超时时间或 服务器没有响应。 library!WindowsService_0!e88!09/09/2016-17:09:45:: i INFO: Cleaned 0 批处理记录、0 个策略、0 个会话、0 个缓存条目、0 个快照、0 个 块,4 个正在运行的作业,0 个持久流,0 个段,0 个段 映射,0 个编辑会话。
--------- 更新 ----------
在将所有超时更新为 12 小时并在 s-s-rS 站点设置上设置 DO NOT TIMEOUT 后,我们现在看到 diff 错误。
到目前为止,我们已经检查了执行日志,它没有显示任何错误。在 s-s-rs 日志文件中发现以下错误。服务器有 32gb 内存,我们在 64 位操作系统上运行。此报告有时生成良好,其大小为 200MB。
httpruntime!ReportServer_0-2!58dc!09/12/2016-23:26:45:: e 错误: 在 BaseWorkerRequest::SendHttpResponse(bool) 中失败, 异常=System.Runtime.InteropServices.COMException (0x800703E3): I/O 操作已中止,因为线程退出或 申请请求。 (来自 HRESULT 的异常:0x800703E3)在 Microsoft.ReportingServices.HostingInterfaces.IRsHttpPipeline.SendResponse(无效* 响应,布尔finalWrite,布尔closeConn)在 ReportingServicesHttpRuntime.BaseWorkerRequest.SendHttpResponse(布尔 finalFlush) 库!ReportServer_0-2!58dc!09/12/2016-23:26:45::e 错误:投掷 Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerHttpRuntimeInternalException: RsWorkerRequest::FlushResponse., Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerHttpRuntimeInternalException: HTTP 运行时对象中发生内部或系统错误 应用程序域 ReportServer_REPCENTER_0-2-131182052998828671。 ---> System.Runtime.InteropServices.COMException (0x800703E3):I/O 操作由于线程退出或 申请请求。 (来自 HRESULT 的异常:0x800703E3)在 ReportingServicesHttpRuntime.BaseWorkerRequest.SendHttpResponse(布尔 finalFlush) 在 ReportingServicesHttpRuntime.RsWorkerRequest.FlushResponse(布尔 finalFlush) --- 内部异常堆栈跟踪结束 ---;
【问题讨论】:
这有点难以辨认,但看起来这可能是由执行超时引起的错误。如果查看执行日志,这些报告的渲染时间是多少? 在哪里可以找到执行日志来查找渲染时间?一件事是这份报告的数据量很大。 报表服务器的数据库中有一个名为 ExecutionLog2 的视图。其中包含TimeDataRetrieval
、TimeProcessing
和 TimeRendering
的列,并显示在给定时间运行的特定报告。
我会看看,这有什么帮助?超时错误具有误导性,因为我们有 12 小时的超时限制,并且报告有时会完成有时会失败。
它会告诉您的一件事是每个步骤中完成了多少工作以及完成了多长时间 - 例如,如果它通过数据检索并继续处理。您在下面提到您已经增加了 web.config 文件中的执行超时,我假设您对报表服务器上的处理超时也做了同样的事情。您可能希望在问题中包含您尝试过的内容。我仍然会检查服务器上的 s-s-rS 内存使用情况,因为这可能会重新启动进程并导致这样的异常。
【参考方案1】:
我们终于有了答案。它是“rsreportserver.config”文件中的 recyletime 元素。默认情况下,此元素值设置为 720 分钟(12 小时)。这意味着从您启动 s-s-rS 服务开始,它将每 12 小时循环一次。我们的服务是在午夜发布时开始的,这意味着它每天中午都会继续回收。我们已经将此值更新为 24 小时。
<RecycleTime>1440</RecycleTime>
<MaxAppDomainUnloadTime>60</MaxAppDomainUnloadTime>
【讨论】:
以上是关于为啥在 s-s-rS 2008 中出现“报告处理中发生意外错误”?的主要内容,如果未能解决你的问题,请参考以下文章
s-s-rS 2008 R2 - s-s-rS 2012 - ReportViewer:在 Safari/Chrome 中报告,但在 Firefox/Internet Explorer 8 中运行良好