跳至主要内容

Living in Hardy Heron (6)

在Ubuntu 8.04 LTS Server上运行Apache2+MySQL+Tomcat5.5,由于之前的测试服务器上使用Sun-JDK-5.0,时常发生一些莫名的JVM crash 事件,于是决定在新的Amazon Instance上尝试使用IBM-JDK-5.0。IBM是免费提供Linux、AIX上头的JDK的,口碑很好很强大。

具体的方法如下:

1) Install IBM JDK

先解压 ibm-jdk-5.0 的文件夹到Ubuntu的 /usr/lib/jvm 目录,这里放了所有的 java virtual machine……
$ tar zxf ibm-java2-sdk-5.0-8.0-linux-i386.tgz
$ sudo mv -t /usr/lib/jvm/ ibm-java2-i386-50/

为目录创建 soft link,采用一个简洁的名字。

$ cd /usr/lib/jvm/
$ sudo ln -s ibm-java2-i386-50 jdk-ibm-5.0

使用 update-alternatives 工具安装该jvm,并设置为系统默认的JVM。

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-ibm-5.0/bin/java 500
$ sudo update-alternatives --config java

2) 修改 Tomcat 5.5 的启动脚本

首先,如果系统的 Tomcat 5.5 是通过 apt-get install tomcat5.5 获得的,默认会使用一个名为 jsvc 的工具来启动 Catalina 的服务线程 (而且一般都是启动三个进程)。如果要使用 IBM JDK,必须修改 /etc/init.d/tomcat5.5 脚本,将 DAEMON 改回 catalina.sh。

其次,Tomcat默认的shutdown方法不够“敏捷”。因为它需要使用startup的所有设置重新启动一个JVM来通知之前的进程关闭。众所周知,Tomcat会监听 8005 端口等待接收指令。因此,可以充分发挥Linux上众多的工具优势,直接访问该端口发出 shutdown 指令。

echo SHUTDOWN | nc localhost 8005

强大的 netcat (nc) 命令做这件事情简直是 a piece of cake 。。。


3) 如果开发的Webapps使用了Sun Library…

表慌,IBM JDK里头还是带了一部分 com.sun.* 和 sun.* 的类库的。仔细在 $IBM_JRE/lib 里头搜搜看有没有需要的JAR文件。如果找到,直接在 $CATALINA_BASE/bin/setclasspath.sh 中添加到 CLASSPATH 变量即可。

当然,有一部分 SUN 的 Class 会通过 native method 调用动态链接库(Windows里头的DLL,到了Linux上就是so文件)。有时候可能你的系统水土不服刚好缺少哪个文件,可以试试apt-get之类的来安装。

我就遇到了这样的问题,FontManager需要调用native类库,但是Exception trace给出的提示为“javax.servlet.ServletException: fontmanager (libstdc++.so.5: cannot open shared object file: No such file or directory)”。很明显,缺少 stdlibc++.so.5 这个文件,幸亏后来RP极好的通过 apt-get install libstdc++5 解决了。

评论