任何人都可以通过下面的图片判断这台机器是否不自然地限制内存使用。内存从 32GB 升级到 64GB,用于 SSRS 报告渲染,这是唯一运行的相当大的进程。
SSRS 进入恐慌模式。
- 这里有一个日志条目
processing!ReportServer_0-1!a5c!09/19/2019-18:54:28::w WARN: Processing Scalability -- Memory Shrink Request Received
- 在 SSRS 上面的日志条目开始分页到 RSTempFile 文件之后,就好像它们是虚拟内存一样。没有这方面的文档,据我所知,它都是内部的,应该清理,但是,文件增长到 40+GB。
根据此处的文档SSRS Memory Configuration,配置文件中没有 aWorkingSetMaximum
意味着 SSRS 将根据需要声明尽可能多的内存,但是,它似乎不像 sql server 那样预先声明所有内存。
默认情况下,报表服务器将 WorkingSetMaximum 设置为计算机上的可用内存量。服务启动时检测到此值。
此设置不会出现在 RSReportServer.config 文件中,除非您手动添加它。如果希望报表服务器使用更少的内存,可以修改 RSReportServer.config 文件并添加元素和值。有效值范围从 0 到最大整数。此值以千字节表示。
我在这种恐慌状态下捕获了盒子,但无法弄清楚。SSRS 配置为使用所有可用内存并开始接收高压内存收缩请求并开始分页到磁盘缓存文件,但是,自升级以来,该机器上使用的内存从未超过 32%(见下图)。是否还有其他东西可以人为地限制内存?它是一个虚拟机,但是,我只能从操作系统视图中查看它,因为我正在解决磁盘空间累积问题。
下面的图片是在 ssrs excel 渲染器全力以赴时拍摄的。使用的内存不应该更高吗?
(当 ssrs 进入这个阶段时,两个小时的渲染被延长到 20 小时,区别在于使用磁盘作为 VM,我猜。*当渲染请求结束时(通常)ssrs 清理*一旦渲染会话转换到此分页策略,会话永远不会转换回来,即使内存稳定下来。 * 其他“较小”的请求处理得非常快,并且不参与分页。)
图 1:
图 2:
图 3:
图 4:
机器重新启动后,我们添加了 128GB 的 RAM 并为
WorkingSetMaximum
. SSRS 有 100GB 的内存可供使用,但从未超过 84GB。我真的不能说 MS 文档是否错误,并且设置WorkingSetMaximum
将允许在渲染线程开始映射到文件之前消耗更多内存。它也可能是重新启动。我真的没有时间确认,但它现在正在渲染大型报告,而无需创建非常大的“页面”文件。