分类: 系统运维
2009-06-22 22:26:30
最近一直在弄tomcat,在处理几个擦屁股的项目/系统。源码编译、安装、配置、升级、迁移.....什么活都干,以本文记录次过程中的一些体会。
1、安装
1.1二进制包安装
1.1.1 JDK 安装
从sun官方网站下载jdk1.5.0 for linux,
解压后,移动到/usr/local/jdk下,将JAVA_HOME环境变量设置为/usr/local/jdk,然后将/usr/local/jdk/bin加入到PATH中, 并将JAVA_HOME和CLASSPATH变量写在/etc/profile里;
1.1.2 TOMCAT安装
从tomcat官方网站找到 ,下载之,解压,改名放在/usr/local下叫做tomcat,即路径为/usr/local/tomcat,设置环境TOMCAT_HOME为/usr/local/tomcat,写入/etc/profile中。
1.2 源码编译安装
为了修补http://tomcat.apache.org/security-5.html中tomcat5.5.27最近爆出的两个比较严重的漏洞
Important: Information Disclosure
Important: Denial of Service
需要打补丁,重新编译tomcat,步骤如下:
1.2.1 下载源码
从tomcat官方网站下载 apache-tomcat-5.5.27-src.tar.gz文件,解压到目录apache-tomcat-5.5.27-src;
1.2.2 下载补丁
先从、
、
三个地址将所有的java补丁包下载下来,按照补丁包说明放在apache-tomcat-5.5.27-src对应的子目录下,如目录不存在,手动建立。
1.2.3 安装ant
下载地址:
下载后解压放在/usr/local/ant下,并将/usr/local/ant/bin加到PATH变量中,
export PATH=$PATH:/usr/local/ant/bin
1.2.4 编译tomcat
进入到 apache-tomcat-5.5.27-src/build目录下,先修改build.properties.default中的version.build=26为27,
修改version=5.5.26为5.5.27,再查看BUILDING.txt中的编译步骤,大致步骤如下:
ant download
ant
在执行ant download时,编译程序会自动下载很多开发包到/usr/share/java下,这个路径由build.properties.default中base.path=/usr/share/java的参数决定的。
下载的包解压后大约将近200M,这段时间根据下载的速度有所不一样。还可能会遇到各种各样的错误,依照错误提示即可找到解决方法。我遇到的是eclipse-JDT-3.3.1.zip 找不到的错误,google了一下,发现这个文件的download url已经变了,难怪找不到,修改build.xml或者手动下载后继续ant download 即可。
编译完成后,进入build目录,既是生成的tomcat。
2 配置
2.1 基本配置、优化配置和安全配置
将刚才生成的build下所有的子目录和文件移动到/usr/local下,改名叫做/usr/local/tomcat。
2.1.1 精简tomcat
# 删除 webapps下面所有的文件;
rm –fr $CATALINA_HOME/webapps/*
# 删除server/webapps下所有文件;
rm –fr $CATALINA_HOME/server/webapps/*
#删除 host-manager.xml、manager.xml和admin.xml
rm -rf $CATALINA_HOME/conf/Catalina/localhost/*
#删除bin目录下一些文件,文件列表如下:
commons-launcher.jar
catalina.xml
launcher.properties
LauncherBootstrap.class
*-using-launcher*
#删除classes整个目录;
rm –rf $CATALINA_HOME/classes
#删除conf下的大多文件,只保留catalina.policy,catalina.properties,context.xml,logging.properties,server.xml, server-minimal.xml, tomcat-users.xml,web.xml;
#删除docs目录;
rm –rf $CATALINA_HOME/docs
#删除tests目录;
rm –rf $CATALINA_HOME/tests
2.1.2 修改日志配置
找到$CATALINA_HOME/conf下的logging.properties文件,将
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4admin.org.apache.juli.FileHandler, 5host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
修改为
handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
将.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
修改为.handlers = 1catalina.org.apache.juli.FileHandler
2.1.3 修改jvm和JAVA_OPTS参数
将/usr/java/jdk/jre/lib/i386/jvm.cfg修改成如下的内容:
-server KNOWN #从第二行移到第一行
-client IF_SERVER_CLASS -server
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR
tomcat默认可以使用的内存为128MB,对生产系统来说太小了,需要调整,找到$CATALINA_HOME/bin/catalina.sh,在脚本的最前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
把这个两个参数值调大,具体大小可根据系统物理内存大小和应用所消耗的内存大小来设置
例如:JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB
2.1.4修改Tomcat监听端口和连接数设置
在$CATALINA_HOME/conf/server.xml文件,
找到这一段
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
修改如下:
为:
maxTreads="500" minSpareThreads="10" maxSpareThreads="50"
acceptCount="50" connectionTimeout="60000"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3"
compression="on" --启用传输压缩,取值on/off/force,默认值off
compressionMinSize="2048" --输入流缓冲大小,默认值2048 bytes
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml"/>
2.1.5 修改web docs设置
在$CATALINA_HOME/conf/server.xml中找到
xmlValidation="false" xmlNamespaceAware="false">
xmlValidation="false" xmlNamespaceAware="false">
2.1.6 让tomcat记录客户端WEB访问日志
在$CATALINA_HOME/conf/server.xml,找到这么一段,去掉 注释,使之生效
2.2 配置数据库连接池(mysql和oracle)
2.2.1 mysql连接池配置
在mysql的官方找到mysql的驱动jar包,把mysql-connector-java-5.1.8-bin.jar文件放到tomcat的common/lib下
修改配置文件
在$CATALINA_HOME/conf/context.xml的
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true" ---很重要,最好加上,否则如果程序无重连机制的话,在一些意外情况下断开数据库连接后会报错,可在tomcat的catalina.out里面见到报错信息。
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"/>
removeAbandoned="true" ----To configure a DBCP DataSource so that abandoned dB connections are removed and recycled. (回收被遗弃/忘记释放的数据库连接到连接池中。默认false)
removeAbandonedTimeout="60" ---Use the removeAbandonedTimeout attribute to set the number of seconds a dB connection has been idle before it is considered abandoned. (数据库连接过多长时间不用将被视为被遗弃而收回连接池中,默认300)
logAbandoned="true" ---The logAbandoned attribute can be set to true if you want DBCP to log a stack trace of the code which abandoned the dB connection resources. (将被遗弃的数据库连接的回收记入日志。默认false)
以上三参数对oracle同样适用。
---其中TestDB为连接池名字,username和password分别为访问db的用户名和密码,javatest为db的库名。
然后在web项目的web.xml中标记
2.2.2 oracle连接池配置
在Oracle官方网站找到Oracle的驱动jar包,把ojdb14.jar包放到tomcat的common/lib下
找到$CATALINA_HOME/conf/context.xml,在其中的
url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
username="scott" password="tiger" maxActive="20" maxIdle="10"
maxWait="-1"/>
--myoracle
在web项目的web.xml中标记
apache版本是2.0.59
tar –zxvf httpd-2.0.59.tar.gz
cd httpd-2.0.59
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-rule=SHARED_CORE --enable-so --enable-rewrite
make
make install
从官方网站处下到符合自己平台和apache版本的mod_jk,我下的是i586/mod_jk-1.2.28-httpd-2.0.X.so,改名叫做mod_jk.so放在/usr/local/apache2/modules下。
3.3.1 修改apache的httpd.conf文件,在最后里面添加这么一段
LoadModule jk_module module/mod_jk.so
JkWorkersFile "/usr/local/tomcat/conf/workers.properties"
JkLogFile "/usr/local/apache2/logs/mod_jk.log"
JkShmFile "/usr/local/apache2/logs/mod_jk.shm"
JkLogLevel info
JkLogStampformat "[%a %b %d %H:%M:%S %Y] "
JkMount /servlet/* ajp13
JkMount /*.servlet ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /*.action ajp13
3.3.2 修改/usr/local/tomcat/conf/workers.properties文件
方法一:
修改workers.properties文件,主要修改以下两个参数:
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/jdk1.5.0_18
注释掉如下几行tomcat5.5版本已废弃的参数:
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
worker.inprocess.cmd_line=start
worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)i386$(ps)classic$(ps)libjvm.so
worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr
其它的参数可酌情修改,比如去掉ajp12和lb部分的内容。
方法二:
将workers.properties改名为workers.properties.old,将workers.properties.minimal改名为workers.properties,将其中内容修改为:
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/jdk1.5.0_18
ps=/
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1