Sakai Demo搭建及遇到的问题汇总
轉(zhuǎn)載請注明出處哦~
http://uuflower.iteye.com/blog/1873300
?
最近在調(diào)查LMS的開源平臺,考慮再三后,計劃借鑒Sakai平臺,但由于java是0基礎(chǔ),遇到了n多詭異問題,今天終于把這個最簡單的Demo搭建弄好了,特意把遇到的問題整理一下,希望像我一樣是0基礎(chǔ)的人,遇到此類問題,能更順利地解決。
?
了解Sakai的人估計知道,現(xiàn)在有兩個版本:CLE(目前最新的是2.9.1)、OAE(目前最新的是1.4.3),為了權(quán)衡這兩個平臺,先把Demo搭起來對比下,OAE的相對簡單,CLE Demo的搭建是一波三折,這里就詳細說下這個吧。
?
1、背景
1)搭建環(huán)境:windowsXP 內(nèi)存2G
2)Sakai版本:2.9.1
3)機器已安裝并配置Java環(huán)境(關(guān)鍵注意環(huán)境變量哦)
具體的配置方法可以baidu、google,這個就不說了?。
我機器裝的是JDK1.6,具體的版本信息如下:
?
??
2、demo包下載
?
從官網(wǎng)上下2.9.1版本的zip包:
http://source.sakaiproject.org/release/2.9.1/
?
3、解壓包
將包解壓到指定目錄。
這個目錄自己可以隨便放,不過,路徑上最好不要有空格哦,網(wǎng)上有人說有空格會有問題,不過我沒試過。
?
4、按照解壓文件夾下的說明啟動
在\sakai-demo-2.9.1文件夾下,有一個文件demo_readme.txt,是官方的安裝說明文檔。
簡單說Windows下的安裝步驟如下:
?
1)啟動方法:
開始-》運行-》輸入“cmd”啟動命令窗口,切換目錄到sakai-demo-2.9.1文件夾下;
輸入“start-sakai.bat”,啟動這個腳本,下面這個是我的啟動頁面:
?
理論上程序會自動啟動tomcat,跳出來熟悉的tomcat啟動框了,然后看著tomcat嘩嘩的啟動log從屏幕上跑過,直到tomcat啟動完畢;
然后,在瀏覽器中,輸入如下URL即可以看到Sakai的真面目了:
http://localhost:8080/portal
?
2)關(guān)閉
步驟與啟動一樣,唯一不一樣執(zhí)行的腳本是stop-sakai.bat。
?
5、悲催問題整理
上面的步驟看起來很簡單人性化哈,但悲催的我生生折騰了兩天才折騰好,下面就把我遇到問題整理下,大家一起happy下吧:
?
啟動時,輸入“start-sakai.bat”后,只顯示了上面圖中的類似信息,沒有啟動tomcat。
?
1)環(huán)境變量的惡作劇---CATALINA_HOME
baidu、google時,發(fā)現(xiàn)有好心網(wǎng)友提醒,如果機器已安裝配置過tomcat,原tomcat配置的CATALINA_HOME環(huán)境變量會對Sakai Demo自帶的tomcat有影響。
仔細觀察了下,確實是引用了當(dāng)前環(huán)境變量,導(dǎo)致使用錯誤的文件。
?
大喜,修改后,再次啟動,依舊;有點惱火,但,轉(zhuǎn)念一想,剛剛解決的問題,讓咱們離成功近了一步,該高興。
繼續(xù)……
?
2)端口到底占用了沒?
再次研究demo_readme.txt,發(fā)現(xiàn)有如下內(nèi)容:
?
Problems getting started
-----------------------------------------------------
1) Sakai's Tomcat will run on port 8080, and also make use of ports 8005 and 8009.
?? If another process is running on any of these ports, Sakai will not start up.
?
2) Sakai's Tomcat will find itself relative to the startup directory.? Always start it from the sakai-demo folder.
?? If you have an environment variable CATALINA_HOME set to another Tomcat, this will interfere with Sakai's startup.
?
第二個問題,咱們在第一步已經(jīng)解決了,下面就看看這個端口到底占用了沒有:
?
首先,在命令窗口中,輸入“netstat -ano|find "8080"”查看是否有程序占用了該端口。
如果回車后,沒有任何輸出結(jié)果,說明沒有程序占用該端口,說明不是端口被占用導(dǎo)致的問題。
如果有輸出內(nèi)容,看下占用程序最后一列的內(nèi)容是多少,這一列標(biāo)識的是程序的pid。
?
然后,輸入指令“tasklist”,在輸出列表中,查找對應(yīng)pid的程序是什么。
?
如果確實被占用了,退出占用程序,或修改tomcat的使用端口,推薦第二種。
?
修改的端口方法與普通tomcat一樣,進入sakai-demo-2.9.1\conf\server.xml,修改tomcat使用端口:
?
<Connector port="8080" protocol="HTTP/1.1"
?????????????? connectionTimeout="20000"
?????????????? redirectPort="8443" />
?
我改成了8088,默認的是8080哦。
?
注意,端口號改了后,開啟Sakai的URL中的端口號也得變哈,別忘了:
http://localhost:8088/portal
?
再試一次,冥冥中覺得,這不是問題的關(guān)鍵,試下吧……果然,tomcat還是紋絲不動呢
?
再查……
?
3)到底是啥阻礙了我與tomcat
到底是啥原因?qū)е聇omcat啟動不起呢,上面的命令窗口沒有任何提示信息,
好吧,我手動進入bin目錄,手動啟動start.bat,哈哈,有反應(yīng),看到tomcat log噌噌跑,有譜……
好景不長,等了5min左右,tomcat啟動窗口不見了,自動關(guān)閉了!!!
?
為啥?
到logs目錄下看所有l(wèi)og文件,找到catalina的log(我的是catalina.2013-05-22.log),打開發(fā)現(xiàn)tomcat的啟動錯誤信息如下:
?
2013-5-22 9:25:44 org.apache.catalina.core.ContainerBase addChildInternal
嚴重: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/osp-common-tool]]
?at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152)
?at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
?at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
?at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)
?at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:932)
?at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:723)
?at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
?at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1329)
?at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
?at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
?at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
?at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
?at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:334)
?at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
?at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
?at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
?at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
?at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
?at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
?at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
?at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
?at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
?at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
?at org.apache.catalina.startup.Catalina.start(Catalina.java:621)
?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
?at java.lang.reflect.Method.invoke(Method.java:597)
?at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
?at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
?at org.apache.tomcat.util.threads.DedicatedThreadExecutor.execute(DedicatedThreadExecutor.java:62)
?at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5220)
?at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
?... 29 more
Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
?at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
?at java.util.concurrent.FutureTask.get(FutureTask.java:83)
?at org.apache.tomcat.util.threads.DedicatedThreadExecutor.execute(DedicatedThreadExecutor.java:56)
?... 31 more
Caused by: java.lang.OutOfMemoryError: Java heap space
……
又是一陣google baidu,修改JAVA_OPTS、CATALINA_OPTS的配置內(nèi)存大小,參照修改后,再次啟動,OK,tomcat自動啟動起來了,狂喜……
?
好景不長,過了大約三四分鐘,tomcat卡住了,
在tomcat窗口,看到“java.lang.OutOfMemoryError: PermGen space ”錯誤提示信息
?
吐血,再次google baidu,終于找到一個相當(dāng)靠譜的方案及解釋,推薦大家參考:
http://hi.baidu.com/gonervergiveup/item/3c7a9b374f29749db80c03a9
----------------------------------------------------------------------------------------------------
1、首先是:java.lang.OutOfMemoryError: Java heap space
解釋:
Heap size 設(shè)置
JVM堆的設(shè)置是指java程序運行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.
JVM在啟動的時候會自動設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。
可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的時間是用于GC且可用的Heap size 不足2%的時候?qū)伋龃水惓P畔ⅰ?
提示:Heap Size 最大不要超過可用物理內(nèi)存的80%,
一般的要將-Xms和-Xmx選項設(shè)置為相同,而-Xmn為1/4的-Xmx值。
解決方法:
手動設(shè)置Heap size
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m
或修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
2、其次是:java.lang.OutOfMemoryError: PermGen space
原因:
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGen space中,它和存放類實例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的應(yīng)用中有很CLASS的話,就很可能出現(xiàn)PermGen space錯誤,這種錯誤常見在web服務(wù)器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過了jvm默認的大小(4M)那么就會產(chǎn)生此錯誤信息了。
解決方法:
1. 手動設(shè)置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat(Linux下為catalina.sh),在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
catalina.sh下為:
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
?
4)終極解決方案
根據(jù)上面的粗體提示,用文本文件打開sakai-demo-2.9.1\start-sakai.bat,添加-Xms32m,修改-Xmx256m,和其他所有帶XXXm的數(shù)字,下面是我的修改數(shù)據(jù)(我機器的內(nèi)存是2G):
set JAVA_OPTS=-server -Xms32m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Dhttp.agent=Sakai -Dsakai.demo=true -Djava.awt.headless=true -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dorg.apache.jasper.compiler.Parser.STRICT_WHITESPACE=false -Dsun.lang.ClassLoader.allowArraySyntax=true
set CATALINA_OPTS=-server -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Dhttp.agent=Sakai -Dsakai.demo=true -Djava.awt.headless=true -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dorg.apache.jasper.compiler.Parser.STRICT_WHITESPACE=false -Dsun.lang.ClassLoader.allowArraySyntax=true
?
上面粗體部分是我修改或添加的內(nèi)容。
保存后,再次按照在命令行中啟動指令“start-sakai.bat”,成功自動啟動tomcat……然后等待5~6min后,tomcat啟動完畢,hoho
?
那試試ok了不,在瀏覽器中輸入URL:http://localhost:8088/portal
oho,終于看到Sakai的真面目了,眼淚嘩嘩地啊:
用戶名、密碼都是admin,記得哈
?
?
?6、總結(jié)
要不是被逼著,這個問題還不知道啥時候能搞定呢,通過本次事件,得到兩個經(jīng)驗教訓(xùn):
1)網(wǎng)絡(luò)的力量是無窮的,沒有前面兄弟的泣血共享,我也不能解決遇到的問題。
再次感謝慷慨共享的兄弟們,完事我也自己整理了一份,供后來者參觀。
?
2)相信問題終將解決
別人能搞定的問題,咱們一樣也能搞定,只是時間長短的問題。
在這個浮躁的社會,沒有信仰是可怕的,鑒于歷朝各代的宗教統(tǒng)治,推薦大家,信春哥吧~~不求永生但求有房有xifu
?
?
總結(jié)
以上是生活随笔為你收集整理的Sakai Demo搭建及遇到的问题汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝队面试知识点整理
- 下一篇: mix2线刷开发板救砖_小米MIX2原版