1、信息收集
首先应当通过日志文件分析到底是PermGen还是Heap的内存溢出了。如果是前者则需要修改JVM启动参数(参考3.1说明),如果是后者则通过Smartbi服务器上管理-工具-导出系统日志,打开BOF.SystemProperties.log文件确认服务器MaxMemory是否已经设置正确,InputArguments是否包含-Xmx参数设置。
2. 问题诊断
当JVM参数已经设置还是会出现Heap内存溢出时,应该首先分析Smartbi参数是否设置正确,可能有影响的参数主要在系统选项中:
- 查询设置
- 内存数据库最大返回行数——应该使用默认值1000
- 业务报表设置
- 复杂报表数据集上限
- 复杂报表单元格上限
- 业务数据缓冲池
- 最大对象总数
设定服务器内存中允许持有多少数据缓存,这个值不宜设置过大否则会非常容易造成内存溢出的问题
- 最大对象总数
- 数据集定义对象池
- 最大对象总数
- 业务报表对象池
- 最大对象总数
- 复杂报表运行时对象池
- 最大对象总数
设定服务器内存中允许有多少复杂报表,要注意必须保证有:复杂报表对象池 * 报表使用数据集个数 < 业务数据缓冲池
- 最大对象总数
当在IBM WebSphere使用Smartbi出现内存溢出时,它会生成一个非常大的phd文件。这个文件可以通过IBM的IBM HeapAnalyzer打开分析。注意服务器使用-Xmx参数设置为5000m时打开这个文件也要同样设置-Xmx5000m,但一般的笔记本、台式机无法申请如此大的内存。因此可能需要通过Xmanager连接到服务器上再打开。