Rs2008 在内存管理方面已经有了很大的改变。主要增长了文件缓存,容许把内存数据卸载到文件缓存中。而Rs2005 都是把数据放到内存中。对于大数据量的报表而言,很容易出现OutOfMemory 错误。数据库
在实际应用中,发现Rs2008 也常常出现 OutOfMemory 错误。主要有如下几个缘由:缓存
1 物理内存太低。服务器
机器只有2G内存,特别是64位的机器。负载均衡
2 同一台服务器同时承担两种角色: 数据库服务器,报表服务器。但没有限定数据库服务器的占用的最大内存。大数据
因为数据库一般会采用贪婪的内存策略获取尽量多的内存,致使报表服务器的内存严重不足。spa
3 报表服务器默认的内存管理参数不适用于有大量报表用户同时使用的状况。默认配置适用于负载均衡的场景。操作系统
若是系统常常出现负载尖峰(某一时刻有大量报表用户同时使用的状况),则报表服务器则会从无压力区域迅速达到高压力区域。出现OutOfMeory,或者拒绝新的请求(503错误,服务器状态不可用)。server
为了改善这种状况,须要对报表服务器内存管理策略进行调整。内存
在 RsReportServer.config配置文件中增长配置。input
WorkSetMaxiMum 默认为报表服务器启动检测到的最大可用内存。
MemoryThreshold 默认是 WorkSetMaxiMum 的90%
MemorySafetyMargin 默认是 WorkSetMaxiMum 的80%
WorkingSetMinimum 默认是 WorkSetMaxiMum 的60%
经过以上讨论,强烈建议
1 手工指定 WorkSetMaxiMum 而不是在报表服务器启动是自动检测。
2 MemorySafetyMargin 改成 50% ,压缩低内存区域,使系统从容应对峰值负载状况。
WorkingSetMinimum 设为 WorkSetMaxiMum 25%到 30%
示范:
服务器同时是报表服务器和数据库服务器的状况:
假定内存共 24G
Sqlserver最大使用 18G ,1G 给操做系统使用,剩余 5G给报表服务器。
配置以下:
<MemorySafetyMargin>50</MemorySafetyMargin> <MemoryThreshold>90</MemoryThreshold> <WorkingSetMaximum>5000000</WorkingSetMaximum> <WorkingSetMinimum>1500000</WorkingSetMinimum>