CPU: Intel i3 3.40GHz
Memory : 8G
Kettle默认配置
将MySQL上的一张29W条数据的表,通过Kettle增量抽取到Vertica数据库中,结果在排序这一步报内存溢出异常。
本来以为是kettle运行出错了,然后又重新试了一次,结果错误重现了。
具体异常如下:
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space)
Caused by: java.lang.OutOfMemoryError: Java heap space
原来kettle默认的运行内存才256M和512M,我们要修改它的内存分配:
1. 通过修改服务器操作系统的环境变量,修改jvm的内存
可以在windows 更改系统环境变量
加上Java_OPTS=-Xms64m -Xmx512m 修改这两个数字为你的计算机能承受的内存数、
-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:java heap最大值,使用的最大内存
2.修改kettle的配置文件,我个人用的这种方式。
在kettle的运行路径中,用文本编辑器打开Spoon.bat,找到:
if
"%PENTAHO_DI_JAVA_OPTIONS%"
==
""
set PENTAHO_DI_JAVA_OPTIONS=
"-Xmx4096m"
"-XX:MaxPermSize=4096m"
最好将其中-Xmx1024m加大最好是256的整数倍
修改MaxPermSize最大值,运行时最大,也可以。
提高kettle执行效率的两种方式
一、加大jvm的虚拟内存;
这个上面已经提到如何修改了
二、提交行数的加大
这个在【表输出】step中,双击它会看到配置窗口,然后找到commit size ,根据你的内存调整一个适当的大小就行了