在Kettle中执行循环操作时,有时会遇到内存溢出的情况,导致循环执行终止,这里提供两种解决方案。
1、调整JVM参数,增加可用内存
JVM参数在文件“Spoon.bat”和“spoon.sh”中,需要根据操作系统类型修改对应的文件。下面例子中,JVM初始内存为1024M,最大可用内存为2048M。
"%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m"
JVM参数说明:
-Xmx:JVM最大可用内存;如果发生了内存溢出,就可以尝试调大该参数
-Xms:JVM初始内存。
设置说明:
1、此值可以设置成与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存;为了节约系统内存,也可以设置成一大一小。
2、一般建议-Xmx的值小于等于系统内存的1/4,但实测中-Xmx的值大于系统内存的1/4也是可以的。
2、优化循环操作脚本
在系统内存资源受限或者不想给Kettle分配太多可用内存的情况下,可以尝试优化循环操作脚本,把一个循环流程拆分为多个循环脚本