炒一下冷飯详拙。
昨天寫(xiě)了開(kāi)源ETL工具Kettle安裝和配置筆記,按以上配置好后蔓同,雙擊啟動(dòng)spoon.bat饶辙,但是bat窗口一閃就消失了,kettle沒(méi)任何反應(yīng)斑粱,給我郁悶壞了弃揽,經(jīng)過(guò)一晚上百度和QQ,最后終于解決了则北。
1.Kettle無(wú)法啟動(dòng)解決方法:
估計(jì)是jdk環(huán)境變量沒(méi)配置好矿微,百度、qq找了很多地方咒锻,都不行冷冗,終于在一個(gè)博客里發(fā)現(xiàn)了解決方法:
只要修改一下spoon.bat里內(nèi)存配置:
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms2058m" "-Xmx1024m" "-XX:MaxPermSize=256m"
改為
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m" "-XX:MaxPermSize=256m"
修改之后保存,重新啟動(dòng)spoon.bat惑艇,奇跡出現(xiàn)了蒿辙,Kettle真的啟動(dòng)成功了!
2.Kettle無(wú)法啟動(dòng)原因分析:
在QQ群里滨巴,有大神問(wèn):是否電腦硬件配置太低了思灌?我:我的可是華碩i5CPU,4G大內(nèi)存啊好不恭取?大神:人家玩Kettle的都3位數(shù)內(nèi)存哦泰偿,我:(⊙﹏⊙)b。蜈垮。耗跛。
百度一下,還真是如此攒发,理論上主要有兩種原因:
1) 參數(shù)中-Xms的值大于-Xmx调塌,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的總和超過(guò)了JVM內(nèi)存的最大限制惠猿,比如當(dāng)前操作系統(tǒng)最大內(nèi)存限制羔砾,或者實(shí)際的物理內(nèi)存等等。
看起來(lái)偶妖,是由于本機(jī)內(nèi)存被占用過(guò)多姜凄,而JVM參數(shù)設(shè)置過(guò)大,導(dǎo)致JVM無(wú)法啟動(dòng)趾访,故spoon.bat運(yùn)行后态秧,Kettle無(wú)法啟動(dòng)啊,額扼鞋,玩大數(shù)據(jù)分析還得要銀子換電腦嗎申鱼?
3.JVM(java虛擬機(jī))相關(guān)概念
在排查kettle問(wèn)題時(shí)空扎,用到了幾個(gè)概念,都貼在這里吧润讥。
1)堆(Heap)和非堆(Non-heap)內(nèi)存
JVM主要管理兩種類型的內(nèi)存:堆和非堆转锈。
簡(jiǎn)單來(lái)說(shuō)堆就是Java代碼可及的內(nèi)存,是留給開(kāi)發(fā)人員使用的楚殿;非堆就是JVM留給自己用的撮慨,
2)JVM的幾個(gè)參數(shù):
-Xms2058mJVM初始分配的堆內(nèi)存
-Xmx1024mJVM最大允許分配的堆內(nèi)存,按需分配
-XX:PermSize=128MJVM初始分配的非堆內(nèi)存
-XX:MaxPermSize=256MJVM最大允許分配的非堆內(nèi)存脆粥,按需分配