kettle的内存溢出,如下图,一般是三个原因:
第一,某个job(例如图中的job_smart_etl_launcher_daily_start这个job,执行并行任务)中放置的job太多,三条并行线;这种需要将多个子job放置到另一个job中,start - 子job -success,避免同一个job中设置太多任务数据量很大的job。
第二,Spoon.bat(windows端)和Spoon.sh(linux端)里设置的内存太小,可以设置为机器内存的1/4,比如16G内存,可以设置到4G。
-Xms初始的Heap的大小。
-Xmx最大Heap的大小。
在很多情况下,-Xms和-Xmx设置成一样的。这么设置,是因为当Heap不够用时,会发生内存抖动,影响程序运行稳定性。
第三,没有加kettle临时内存文件的指定目录,加完指定目录后kettle运行时产生的临时文件会放到临时目录中,kettle运行完后删除临时文件,这样也可以避免kettle内存不足。
ps:kettle系统运行日志是上图中的-Dlogs.base.dir(与kettle流程的运行日志不同,这个是kettle的系统日志),这个目录最好放置在磁盘比较足的地方,系统日志会越来越大,占用工作空间的内存。需要删除的时候,注意要保留error.log和info.log,其余都可以清楚,释放内存空间。
----------------------------------------------------------------------------------------------
实测,这样设置后,kettle可以坚持运行约8个小时,但运行8小时后还是会出现内存溢出的现象。