安装环境
• 操作系统:Centos6.4 x64
• JDK版本:HotSpot JDK1.7.0_79
• Tomcat版本: tomcat-7.0.79
• Tomcat APR源码包: tomcat-native-1.1.34
1. 安装JDK
我使用的版本:jdk-7u79-linux-x64.rpm
1) 查询是否已安装本版本JDK
java -version
cd到HotSpot JDK1.7.0_79版本安装包所在文件夹
2) 安装
rpm****-ivh****jdk-7u79-linux-x64**.rpm
JDK将默认安装在文件夹/usr/java/jdk1.7.0_79中
3) 修改环境变量
vim /etc/profile
在文件最下方添加以下内容
JAVA_HOME=/usr/java/jdk1.7.0_79
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
保存文件后,使环境变量生效
source /etc/profile
4) 查询当前JDK是否为,如果输出包含HotSpot和1.7.0_79说明安装成功
[root@Centos src]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
2. 安装Tomcat
我使用的版本 tomcat-7.0.79 tomcat-native-1.1.34
- 安装Tomcat
cd到Tomcat标准包目录
解压
tar -zxvf tomcat-7.0.79.tar.gz
- Tomcat连接器
Tomcat有三种连接器:APR、NIO、BIO,性能上APR、NIO要优于BIO,一般情况下APR略优于NIO。因此建议使用APR连接器。通过安装Tomcat Native Library,可以让Tomcat开启APR。
安装依赖:yum install apr-devel openssl-devel glibc gcc
cd到Tomcat APR源码包目录
解压
tar -zxvf tomcat-native-1.1.34-src.tar.gz
进入目录
cd tomcat-native-1.1.34-src/jni/native
配置,将--with-java-home值修改为JDK安装路径, native库将被安装在--prefix指定目录下
./configure --with-apr=/usr/bin/apr-1-config \
--with-java-home=/usr/java/jdk1.7.0_79 \
--with-ssl=yes \
--prefix=/usr/local/bin/tomcat-native-1.1.34/
安装
make && make install
3. Tomcat配置
- Tomcat标准包默认已进行过配置,可以跳过本步骤
修改tomcat的bin/setclasspath.sh 在最上面添加以下内容
# 设置$CATALINA_HOME/lib目录,才能在该目录中查找native library
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/bin/tomcat-native-1.1.34/lib
export LD_LIBRARY_PATH
# 设置JAVA_HOME,该JAVA_HOME最好与编译native library的Java是同一个
JAVA_HOME=/usr/java/jdk1.7.0_79
export JAVA_HOME
- JVM优化配置
优化内存使用、回收机制和日志记录情况
修改tomcat的bin/ catalina.sh 在最上面添加以下内容(Tomcat标准包已添加)
JAVA_OPTS="-server –Xms4G –Xmx4G -Xss1024K -XX:PermSize=128M -XX:MaxPermSize=4096M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Xloggc: /home/app/web/tomcat /logs/gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/app/web/tomcat /logs/"
说明
1. 以上配置默认的新生代+老生代内存为4G,需根据实际需要修改。如果是该Tomcat专用服务器建议配置为服务器内存的50-75%(修改–Xms和–Xmx)。JVM一般最大占用内存为Xmx+ XX:MaxPermSize+最大线程数* Xss
2. 采用了CMS垃圾回收机制,适合于响应时间要求高的场景
3. 记录了JVM垃圾回收日志和OOM异常日志,垃圾回收日志位于-Xloggc指定的文件,OOM内存转储文件位于-XX:HeapDumpPath指定的目录下,需根据tomcat实际部署位置修改这两个参数
Tomcat优化配置
此处只简单说明了下Tomcat配置
修改tomcat的conf/server.xml 中的线程池(Executor)和连接器(Connector)配置内容
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="200" minSpareThreads="100" maxQueueSize="700" prestartminSpareThreads="true"/>
<Connector port="82" executor="tomcatThreadPool" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
enableLookups="false"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,text/json"/>
配置说明:
• Executor
1. name:线程池执行器的名称
2. namePrefix:线程名称前缀
3. maxThreads:最大线程数,默认200,实际设置需要通过针对使用的服务器进行性能测试找到最优值。一般服务器建议设置为200,服务器性能更好可以设置更高。
4. minSpareThreads:最小保持线程数,默认25。建议设置为100。
5. maxQueueSize:最大等待任务数,默认为Integer.MAX_VALUE。
6. prestartminSpareThreads:是否在Tomcat启动时初始化minSpareThreads数量的线程,默认为false,建议开启,进行预热。
• Connector
1. port:对外服务端口,根据需要配置
2. executor线程池,与配置的Executor的name相同
3. protocol:使用协议, 配置为HTTP/1.1时,如果检测到支持APR则使用APR
4. connectionTimeout:连接超时时间,单位毫秒
5. URIEncoding:URL编码
6. enableLookups:为性能设置为false,为ture时执行request.getRemoteHost()将访问DNS查找客户机名,为false将只返回IP
7. compression:是否开启gzip压缩
8. compressionMinSize:压缩的最小字节数,对低于此值的内容不进行压缩
9. noCompressionUserAgents:不压缩的浏览器agent,部分老旧浏览器不支持gzip
10. compressableMimeType:对配置的mime类型进行压缩(需满足浏览器和压缩的最小字节数要求)
特别说明
关于Tomcat的优化配置和JVM的优化配置,不是简单几句话既可以说明的,后续研究之后在单独写文章吧。下面这个是公司内部的一个培训资料可以用来先了解下优化。至于tomcat的配置文件也是很重要的一部,本文只简单说明了线程池和连接池,还有日志、部署方式等等,完全可以很厚的一本书来。Tomcat优化PPT和Tomcat架构解析.刘光瑞