打开ODI操作窗口时出现内存益处错误
适用于:
Oracle Data Integrator - Version: 3.2.03.01 and later [Release: 3.2.03 and later ]
此文档中的信息适用于任何平台。
症状
打开ODI操作窗口时出现内存益处错误
抛出 Exception in thread "main" java.lang.OutOfMemoryError
原因
分配给加载ODI的Java进程内存不够
解决方案
Java内存调整注意事项
一个最佳的调整,需要密切关注的Java内存区域的大小。
Java应用程序的堆大小的最大值由三个因素限制:
1. CPU最大寻址位数(32位或64位)和操作系统的限制,
2. 系统上可用的虚拟内存量
3. 系统上可用的物理内存量。
对于具体的应用程序,为其分配的堆空间大小不会超过更准确说不会达到理论上的最大值。
Java堆的大小不应该被设置为系统上物理内存量,因为物理内存还要分配给:操作系统,其他系统进程和其他JVM。
犯一个系统的物理内存太多,很可能导致的虚拟内存分页到磁盘,很可能在垃圾收集操作,导致显着的性能问题。
提交过多的物理内存请求很可能会导致垃圾收集过程中虚拟内存分页到磁盘,这直接导致显著的性能问题。
在多个Java进程或多个进程的系统,这些进程的Java堆的总和应不超过系统中的物理RAM的大小。
详细的Java内存分配文档请看:
http://java.sun.com/performance/reference/whitepapers/tuning.html#section4.1.2
增加ODI_MAX_HEAP变量当前值
ODI允许设置两个变量来定义Java 堆内存限制
l ODI_INIT_HEAP——ODI Java进程的初始堆大小(同Java—Xms参数)
l ODI_MAX_HEAP——ODI Java进程的最大堆大小(同Java—Xmx参数)
两个变量都在“odiparams.bat / .sh”配置文件中定义,位于ODI“/ bin”文件夹中。
运行ODI情景,代理,设计,拓扑,操作和安全模块时,应考虑以下规则:
1. 有效的ODI_MAX_HEAP和ODI_INIT_HEAP值是两个字节,兆字节或千兆字节的倍数。
例如:8、16、32.。。。128M,256M。。。。
2. 无论ODI_MAX_HEAP的值,可能分配给Java进程的内存量直接与可用的RAM数量有关。
同时,分配太多内存给JVM堆可能导致内存益处错误。因为太大的堆可能会占用RAM中已经分配给Java线程的内存
l 如果你的服务器只有2G的内存,不推荐将JVM可获得的最大堆内存设为此值。
l ODI_INIT_HEAP和ODI_MAX_HEAP设置为相同值将会导致虚拟机中最重要的内存大小调整机制不可用。这将提高可预见性,但同时如果你做出错误的决定虚拟机将无法做出弥补。
增加处理器数量时一定要增加内存,因为分配是并行的。
3. 每个ODI的Java进程使用内存数量介于ODI_INIT_HEAP 和ODI_MAX_HEAP之间
例如:如果ODI_MAX_HEAP设置为256M,运行。
n 一个ODI代理同时执行多个会话/场景,最大1 x 256M内存将被使用。
n 三个场景使用“startscen.bat / .sh”命令在同一台机器上运行,ODI将使用最大3 × 256M内存。
n 如果ODI Designer中是同一台机器上启动两次,则高大2 × 256M内存将被使用。
4. 除非你觉得对于Java内存调整非常自信,不然不要改变ODI_INIT_HEAP值。
清除ODI日志
如果这不能解决您的问题,有必要删除以下工作信息库表的内容(在下面指定的顺序)以清除Oracle数据集成器(ODI)日志:
SNP_SESS_TXT_LOG
SNS_SESS_TASK_LOG
SNP_STEP_LOG
SNP_TASK_TXT
SNP_SESS_TASK
SNP_SESS_STEP
SNP_SEQ_SESS
SNP_VAR_SESS
SNP_SESSION
SNP_EXP_TXT (starting with ODI 10.1.3 versions)
有关详情,请参阅:
Note 423934.1 How To Avoid Saturating The ODI Log Tables
Note 424661.1 How To Manually Delete A Scenario And Its Related Reports In The ODI Repository With SQL
Note 553031.1 How To Delete The Contents Of The ODI Work Repository Table Called SNP_EXP_TXT?
Note 424663.1 Session And Scenario Execution Log Tables Used By ODI