转载请注明出处哦~
http://uuflower.iteye.com/blog/1873300
最近在调查LMS的开源平台,考虑再三后,计划借鉴Sakai平台,但由于java是0基础,遇到了n多诡异问题,今天终于把这个最简单的Demo搭建弄好了,特意把遇到的问题整理一下,希望像我一样是0基础的人,遇到此类问题,能更顺利地解决。
了解Sakai的人估计知道,现在有两个版本:CLE(目前最新的是2.9.1)、OAE(目前最新的是1.4.3),为了权衡这两个平台,先把Demo搭起来对比下,OAE的相对简单,CLE Demo的搭建是一波三折,这里就详细说下这个吧。
1、背景
1)搭建环境:windowsXP 内存2G
2)Sakai版本:2.9.1
3)机器已安装并配置Java环境(关键注意环境变量哦)
具体的配置方法可以baidu、google,这个就不说了 。
我机器装的是JDK1.6,具体的版本信息如下:
2、demo包下载
从官网上下2.9.1版本的zip包:
http://source.sakaiproject.org/release/2.9.1/
3、解压包
将包解压到指定目录。
这个目录自己可以随便放,不过,路径上最好不要有空格哦,网上有人说有空格会有问题,不过我没试过。
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的真面目了:
2)关闭
步骤与启动一样,唯一不一样执行的脚本是stop-sakai.bat。
5、悲催问题整理
上面的步骤看起来很简单人性化哈,但悲催的我生生折腾了两天才折腾好,下面就把我遇到问题整理下,大家一起happy下吧:
启动时,输入“start-sakai.bat”后,只显示了上面图中的类似信息,没有启动tomcat。
1)环境变量的恶作剧---CATALINA_HOME
baidu、google时,发现有好心网友提醒,如果机器已安装配置过tomcat,原tomcat配置的CATALINA_HOME环境变量会对Sakai Demo自带的tomcat有影响。
仔细观察了下,确实是引用了当前环境变量,导致使用错误的文件。
大喜,修改后,再次启动,依旧;有点恼火,但,转念一想,刚刚解决的问题,让咱们离成功近了一步,该高兴。
继续……
2)端口到底占用了没?
再次研究demo_readme.txt,发现有如下内容:
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.
第二个问题,咱们在第一步已经解决了,下面就看看这个端口到底占用了没有:
首先,在命令窗口中,输入“netstat -ano|find "8080"”查看是否有程序占用了该端口。
如果回车后,没有任何输出结果,说明没有程序占用该端口,说明不是端口被占用导致的问题。
如果有输出内容,看下占用程序最后一列的内容是多少,这一列标识的是程序的pid。
然后,输入指令“tasklist”,在输出列表中,查找对应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中的端口号也得变哈,别忘了:
再试一次,冥冥中觉得,这不是问题的关键,试下吧……果然,tomcat还是纹丝不动呢
再查……
3)到底是啥阻碍了我与tomcat
到底是啥原因导致tomcat启动不起呢,上面的命令窗口没有任何提示信息,
好吧,我手动进入bin目录,手动启动start.bat,哈哈,有反应,看到tomcat log噌噌跑,有谱……
好景不长,等了5min左右,tomcat启动窗口不见了,自动关闭了!!!
为啥?
到logs目录下看所有log文件,找到catalina的log(我的是catalina.2013-05-22.log),打开发现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的配置内存大小,参照修改后,再次启动,OK,tomcat自动启动起来了,狂喜……
好景不长,过了大约三四分钟,tomcat卡住了,
在tomcat窗口,看到“java.lang.OutOfMemoryError: PermGen space ”错误提示信息
吐血,再次google baidu,终于找到一个相当靠谱的方案及解释,推荐大家参考:
http://hi.baidu.com/gonervergiveup/item/3c7a9b374f29749db80c03a9
----------------------------------------------------------------------------------------------------
1、首先是:java.lang.OutOfMemoryError: Java heap space
解释:
Heap size 设置
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.
JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。
可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,
一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:
手动设置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,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法:
1. 手动设置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)终极解决方案
根据上面的粗体提示,用文本文件打开sakai-demo-2.9.1\start-sakai.bat,添加-Xms32m,修改-Xmx256m,和其他所有带XXXm的数字,下面是我的修改数据(我机器的内存是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
上面粗体部分是我修改或添加的内容。
保存后,再次按照在命令行中启动指令“start-sakai.bat”,成功自动启动tomcat……然后等待5~6min后,tomcat启动完毕,hoho
那试试ok了不,在浏览器中输入URL:http://localhost:8088/portal
oho,终于看到Sakai的真面目了,眼泪哗哗地啊:
用户名、密码都是admin,记得哈
6、总结
要不是被逼着,这个问题还不知道啥时候能搞定呢,通过本次事件,得到两个经验教训:
1)网络的力量是无穷的,没有前面兄弟的泣血共享,我也不能解决遇到的问题。
再次感谢慷慨共享的兄弟们,完事我也自己整理了一份,供后来者参观。
2)相信问题终将解决
别人能搞定的问题,咱们一样也能搞定,只是时间长短的问题。
在这个浮躁的社会,没有信仰是可怕的,鉴于历朝各代的宗教统治,推荐大家,信春哥吧~~不求永生但求有房有xifu
相关推荐
此外,"Demo"标签提示我们,这个源码包可能还包含了示例应用或演示环境,方便开发者快速理解和上手Sakai的开发过程。 总的来说,Sakai-src是Sakai生态系统的重要组成部分,它为开发者提供了无尽的可能性,推动了...
在本文中,我们将详细探讨如何部署Sakai教育平台,主要关注环境准备、MySQL数据库的安装与配置,以及Sakai的部署流程。...如果遇到问题,查阅Sakai的官方文档或社区资源,它们通常能提供详细的故障排除指南。
- **问题解决**:在编译过程中可能会遇到因非英语环境导致的错误,解决方法包括更改系统语言设置为英语或者在编译时添加参数`-Dmaven.test.skip=true`以跳过测试。 - **数据库配置**:对于使用MySQL作为数据库的...
在Sakai这个开源教育平台中,样式修改是提升用户界面体验的重要环节。要修改Sakai的样式,首先需要了解CSS(Cascading Style Sheets)的作用,它负责定义网页的布局和外观。以下是详细步骤: 1. **查找当前页面CSS*...
本文档旨在详细介绍 Sakai 2.9.0 版本的安装与配置过程,并解决在安装过程中可能遇到的一些常见问题。 #### 二、环境准备 在进行 Sakai 的安装配置前,需要准备以下软件: 1. **Apache Maven 3.0.4**:用于构建和...
Sakai,源自于2004年由美国的顶尖学府如印第安纳大学、密歇根大学、斯坦福大学、麻省理工学院及伯克利大学联合发起的开放源代码课程管理系统(CMS)开发计划。其目标明确而远大——打造一款能够替代现有商业课程管理...
《Sakai框架与内核详解》 Sakai是一个开源的教育软件平台,它为全球的教育机构提供了一个协作和学习的环境。Sakai框架与内核是其核心组成部分,它们共同构成了一个强大的系统架构,支持各种教学和学习应用的开发与...
**Sakai 2.6配置详解** Sakai是一个开源的教育软件平台,它提供了丰富的协作和学习工具,广泛应用于高等教育、K-12学校、企业培训等场景。Sakai 2.6是该平台的一个较早版本,虽然现在已经有了更先进的版本,但了解...
6. **异常和错误类**:描述可能在使用 Sakai API 时遇到的异常和错误,以及如何处理它们。 7. **工具和辅助类**:可能包括一些辅助类,这些类不直接构成核心功能,但提供了一些有用的工具方法。 通过深入阅读和...
总结,SAKAI架构的前世今生是一个不断进化的历程,从最初的教育工具集发展到如今的全方位教育技术平台。它体现了开源软件在教育领域的潜力和价值,同时也揭示了教育技术如何通过创新来推动教育进步。通过阅读《SAKAI...
#### 四、总结 通过对 Sakai 用户注册业务流程的分析,我们可以看到虽然表面上看似简单的功能背后,其实涉及到了多个层次的技术实现。从用户界面的设计到后台数据的处理,再到数据库的操作,每一个环节都至关重要。...
sakai安装文档,很有用的安装Sakai App Builder
对于那些需要定制化教学平台的企业、高校及个人开发者来说,Sakai不仅提供了强大的功能,还拥有一个活跃的社区,可以提供技术支持和交流。 #### 二、Charon模块介绍 Charon作为Sakai 2.x版本中的一个重要组成部分...
Sakai 是由高校、商业组织和个人开发者组成的社区,致力于开发一个通用的协作学习环境(Collaboration and Learning Environment,CLE)。Sakai是基于Educational Community License(开源软件许可证的一种)的教育软件...
标题 "sakai-portal-api-2.9.0-b05.zip" 暗示了这是一个关于Sakai门户API的版本包,版本号为2.9.0的b05迭代。Sakai是一个开源的教育软件平台,主要用于构建网络学习环境,它提供了丰富的工具和服务,如课程管理、...
请注意,实际部署过程中可能会遇到各种问题,如网络连接、权限问题、依赖库不匹配等,这些问题都需要根据实际情况进行调试和解决。为了确保Sakai稳定运行,定期更新和维护是非常重要的,包括升级Sakai版本、更新安全...
**源码版本Sakai安装配置详解** ...请确保每个步骤都正确执行,遇到问题时查阅Sakai社区文档或在线资源以寻求解决方案。完成这些步骤后,你将拥有一个本地运行的Sakai实例,可以开始创建和管理在线学习环境了。
【标题】"Sakai-介绍" Sakai是一个开源的教育技术平台,主要用于构建在线学习社区和管理系统。它提供了一系列工具,支持教学、协作、评估和资源共享等教育活动,帮助教师、学生和管理员实现教育目标。Sakai的设计...
sakai是广泛应用于高校的开源课程管理系统,具有良好的架构设计,具有很好的解耦行、扩展性和稳定性。目前sakai的二次开发广泛流行于企业、高校和个人,希望有兴趣我们可以共同交流,欢迎交流!