Rs2008 在内存管理方面已经有了很大的改变。主要增加了文件缓存,允许把内存数据卸载到文件缓存中。而Rs2005 都是把数据放到内存中。对于大数据量的报表而言,很容易出现OutOfMemory 错误。

在实际应用中,发现Rs2008 也经常出现 OutOfMemory 错误。主要有以下几个原因:

1 物理内存过低。

机器只有2G内存,特别是64位的机器。

2 同一台服务器同时承担两种角色: 数据库服务器,报表服务器。但没有限定数据库服务器的占用的最大内存。

由于数据库通常会采用贪婪的内存策略获取尽可能多的内存,导致报表服务器的内存严重不足。

3 报表服务器默认的内存管理参数不适用于有大量报表用户同时使用的情况。默认配置适用于负载均衡的场景。

如果系统经常出现负载尖峰(某一时刻有大量报表用户同时使用的情况),则报表服务器则会从无压力区域迅速达到高压力区域。出现OutOfMeory,或者拒绝新的请求(503错误,服务器状态不可用)。

为了改善这种情况,需要对报表服务器内存管理策略进行调整。

在 RsReportServer.config配置文件中增加配置。

WorkSetMaxiMum 默认为报表服务器启动检测到的最大可用内存。

MemoryThreshold 默认是 WorkSetMaxiMum  的90%

MemorySafetyMargin 默认是 WorkSetMaxiMum  的80%

WorkingSetMinimum  默认是 WorkSetMaxiMum  的60%

通过以上讨论,强烈建议

1 手工指定 WorkSetMaxiMum  而不是在报表服务器启动是自动检测。

MemorySafetyMargin  改为 50% ,压缩低内存区域,使系统从容应对峰值负载情况。

WorkingSetMinimum   设为 WorkSetMaxiMum   25%到 30%

示范:

服务器同时是报表服务器和数据库服务器的情况:

假定内存共 24G

Sqlserver最大使用 18G ,1G 给操作系统使用,剩余 5G给报表服务器。

配置如下:

<MemorySafetyMargin>50</MemorySafetyMargin>
      <MemoryThreshold>90</MemoryThreshold>
      <WorkingSetMaximum>5000000</WorkingSetMaximum>
      <WorkingSetMinimum>1500000</WorkingSetMinimum>

Rs2008内存管理策略的更多相关文章

  1. iOS: ARC & MRC下string内存管理策略探究

    ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作 ...

  2. Redis 数据结构与内存管理策略(上)

    Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...

  3. Redis 数据结构与内存管理策略(下)

    Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...

  4. iOS内存管理策略和实践

    转:http://www.cocoachina.com/applenews/devnews/2013/1126/7418.html 内存管理策略(memory Management Policy) N ...

  5. iOS 内存管理策略

    内存管理策略(memory Management Policy) NSObject protocol中定义的的方法和标准命名惯例一起提供了一个引用计数环境,内存管理的基本模式处于这个环境中.NSObj ...

  6. OS之内存管理 ---基本的内存管理策略(一)

    基本概念 基本硬件 CPU可以直接访问的通用存储只有内存和处理器的内置的寄存器.机器指令可以用内存地址作为参数,而不能用磁盘地址作为参数.所以执行指令以及指令使用的数据,应在这些可执行访问的存储设备上 ...

  7. OS之内存管理 ---基本的内存管理策略(二)

    分段 基本方法 分段就是基于用户视图的内存管理方案.逻辑地址空间是由一组段构成的,每个段都有名称和长度.地址指定了段名称和段内偏移.因此用户通过两个量来指定地址:段名称和段偏移. 为了简单,进行对段的 ...

  8. cocos2d-x 源代码分析 : Ref (CCObject) 源代码分析 cocos2d-x内存管理策略

    从源代码版本号3.x.转载请注明 cocos2d-x 总的文件夹的源代码分析: http://blog.csdn.net/u011225840/article/details/31743129 1.R ...

  9. JVM学习笔记三:垃圾收集器及内存管理策略

    垃圾收集器 上文说到了垃圾收集算法,这次我们聊一下HotSpot的具体垃圾收集器的实现,以JDK1.7为例,其包含的可选垃圾收集器如下图: 不同收集器之间的连线,代表它们可以搭配使用,收集器所属的区域 ...

随机推荐

  1. memcached学习笔记1--概念

    1.memcached是danga的一个项目,最早是LiveJournal服务的,最初为了加速LiveJournal访问速度而开发,后来被很多大型网站采用 官网: http://www.danga.c ...

  2. an optimal solution to the problem

    http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Greedy/greedyIntro.htm Greedy Introdu ...

  3. Delphi格式化输出函数(1): Format

    vars: string;begin//指令类型 types := Format('最大整数是: %d; 最小整数是: %d',[MaxInt,Low(Integer)]);//返回: 最大整数是: ...

  4. java 形参实参

    java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. public class TestFun { public static v ...

  5. android文字阴影效果(转)

    关于android文字阴影,共有四个属性可以设置: android:shadowColor :阴影颜色 android:shadowDx :阴影x方向位移 android:shadowDy :阴影y方 ...

  6. 一个比较轻巧好用的js分页插件,可ajax可url

    var pageNav = pageNav || {}; pageNav.fn = null; pageNav.pre = "pre"; pageNav.next = " ...

  7. C++ 栈和队列

    使用标准库的栈和队列时,先包含相关的头文件 #include<stack> #include<queue> 定义栈如下: stack<int> stk; 定义队列如 ...

  8. docker rabbitmq

    docker run -d --hostname my1 --name dome-rabbit -p 15673:5672 -p 15674:15672 -e RABBITMQ_ERLANG_COOK ...

  9. js模拟类的公有与私有 方法与变量

    var myConstructor = function(message){ //实例变量 this.message = message; //私有变量,外部不可见.用var声明的变量具有块作用域 v ...

  10. Eclipse插件项目 引用其他类库的方法(jar)

    这两天搞了个Eclipse插件项目,用来监测ios.android设备和电脑的连接,安装apk/ipa到对应设备等等功能. 遇到了build path下的library引入编译正常,运行时报Class ...