前言

运行环境:Ubuntu server14 64位

Jdk版本jdk-1.7.0_79

Tomcat版本:apache-tomcat-7.0.63

Tomcat性能调优

1、 内存优化

修改tomcat/bin目录catalina.sh文件:

JAVA_OPTS=”$JAVA_OPTS -Dfile.encoding=utf-8 -server -Xmx750M -Xms750M -Xss256k

-XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M

-XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

-XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection

-XX:LargePageSizeInBytes=64M -XX:+UseFastAccessorMethods

-XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true”

参数说明:

-server:让tomcatserver模式运行

-Xmx750M设置Java虚拟机堆的最大可用内存大小,单位(M)

-Xms750M:设置Java虚拟机堆得初始值内存大小,单位:兆(M)。此值设置-Xmx相同可以避免每次垃圾回收后JVM重新分配内存

-Xss256k设置每个线程的栈大小Jdk1.5以后每个线程栈最大1M,以前的版本最大256k根据项目实际情况设置此值的大小

-XX:+UseBiasedLocking:启用一个线程锁,线程处理自动进行最优调配

-XX:PermSize=64M:设置非堆内存初始大小

-XX:MaxPermSize=128M:设置非堆内存最大值。

-XX:MaxTenuringThreshold=31:设置垃圾的最大年龄。设置为0,则年轻对象不经过Survivor直接进入年老代对年老代较多的应用,可提高效率。设置为一个较大的值,年轻代对象Survivor区进行多次复制这样可以增加对象在年轻代的存活时间,既对象在年轻代被回收的概率。

-XX:+UseConcMarkSweepGCjdk1.5及以后版本具有的功能,使用是GC估算触发和heap占用触发提高垃圾回收的响应时间。

-XX:+UseParNewGC:对年轻代采用多线程并行回收提高回收效率。

-XX:+CMSParallelRemarkEnabled:在使用-XX:+UseParNewGC的情况下,减少mark时间。

-XX:+UseCMSCompactAtFullCollection:使用并发收集器时开启对年老代的压缩。

-XX:LargePageSizeInBytes=64M:指定heap内存页面大小。

-XX:+UseFastAccessorMethods:原始类型快速优化(getset方法等)

-XX:+UseCMSInitiatingOccupancyOnly:使用手动定义初始化定义开始CMS收集

-Djava.awt.headless=true:防止图标在Linux环境加载不出来的异常。

Tomcat性能调优及性能测试工具配置-风君雪科技博客

2、 线程优化

修改tomcat/conf目录server.xml文件:

<Connector port=”8080″ protocol=”HTTP/1.1″

        connectionTimeout=”20000″

        redirectPort=”8443″

        URIEncoding=”UTF-8″

        maxThreads=”500″

        minSpareThreads=”75″

        enableLookups=”false”

        disableUploadTimeout=”true”

        acceptCount=”300″

        compression=”on” compressionMinSize=”2048″

        compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

        />

参数说明

porttomcat服务启动端口

connectionTimeout连接等待时长,单位毫秒

URIEncoding:字符编码

maxThreads:连接器要创建的请求处理线程最大数量。指定,属性默认设置为200如果使用execute忽略连接器的此属性

minSpareThreads:始终保持运行的最小线程数。若未指定,默认10.

enableLookups=”false”:禁用DNS查找,提高性能。

disableUploadTimeout:此标志允许servlet容器在数据上传时使用不同的连接超时通常较长。如果没有指定该属性被设置true,禁用上传超时。

acceptCount:当所有可能的请求处理线程在使用传入连接请求的最大队列长度队列满收到的任何请求都将拒绝默认100.

compression=”on”:开启压缩功能

compressionMinSize:启用压缩输出内容大小。默认2kb

compressableMimeType:压缩类型。

Tomcat性能调优及性能测试工具配置-风君雪科技博客

3、 Tomcat运行模式优化

BIO阻塞式连接。一个线程处理一个请求,适用于连接数目较小且固定的架构并发数高时,线程较多,浪费资源Tomcat7及其以下版本在Linux系统中默认使用这种方式。Jdk1.4版本以下唯一选择。

NIO非阻塞连接。是jdk1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包),拥有传统I/O操作BIO更好的并发运行性能利用java异步IO处理,可以通过少量线程处理大量的请求Tomcat8之后在Linux中默认这种方式。

<Connector port=”8080″ protocol=”org.apache.coyote.http11.Http11NioProtocol”

        connectionTimeout=”20000″

        redirectPort=”8443″

        URIEncoding=”UTF-8″

        maxThreads=”500″

        minSpareThreads=”75″

        enableLookups=”false”

        disableUploadTimeout=”true”

        acceptCount=”300″

        compression=”on” compressionMinSize=”2048″

        compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

        />

APR从操作系统级别来解决异步的IO问题,大幅度的提高性能。

3.1APR配置

Tomcat支持APR必须安装aprnative,这样tomcat可以利用apache的apr接口使用操作系统的部分本地操作从而提高性能。

3.1.1、准备工作

安装jdktomcat,且jdk要在1.7版本或以上版本

apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz、

apr-iconv-1.2.2.tar.gz、tomcat-native.tar.gz、expat_2.0.1.orig.tar.gz

3.1.2安装apr

上传apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz、apr-iconv-1.2.2.tar.gz、expat_2.0.1.orig.tar.gz

/usr/local/installPackage/tomcat-apr(目录自己自定义创建)

解压缩三个文件包:sudo tar -xzvf apr-1.6.5.tar.gz;sudo tar -xzvf apr-util-1.6.1.tar.gz;sudo tar -xzvf apr-iconv-1.2.2.tar.gz

1、 进入apr-1.6.5/目录执行检测、编译、安装:

sudo ./configure && sudo make && sudo make install

2、 进入apr-util-1.6.1/目录执行检测、编译、安装:

sudo ./configure –with-apr=/usr/local/apr && sudo make && sudo make install

出现以下错误提示是因为缺少expat先安装expat

Tomcat性能调优及性能测试工具配置-风君雪科技博客

解压缩expat_2.0.1.orig.tar.gz包,并进入expat-2.0.1/目录执行检测、编译、安装:

sudo ./configure && sudo make && sudo make install

再次进入apr-util-1.6.1/目录执行检测、编译、安装

sudo ./configure –with-apr=/usr/local/apr && sudo make && sudo make install

安装了expat有可能导致vi命令无法使用

问题描述

/usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0: undefined symbol: XML_SetHashSalt

解决方案:

执行命令:export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu

修改配置文件:vi ~/.bashrc

末尾处添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib/x86_64-linux-gnu

3、 进入apr-iconv-1.2.2/目录执行检测、编译、安装:

sudo ./configure –with-apr=/usr/local/apr && sudo make && sudo make install

3.1.3安装tomcat-native

tomcat-native.tar.gz在tomcat/bin目下

解压缩sudo tar -xzvf tomcat-native.tar.gz

移动到安装目录:tomcat/bin/tomcat-native-1.1.33-src/jni/native

执行检测、编译、安装:

sudo ./configure –with-apr=/usr/local/apr –with-java-home=/usr/local/java/jdk && sudo make && sudo make install

注意/usr/local/java/jdk目录jdk的安装目录

若编译安装失败,查看openssl版本看服务器是否安装:openssl version

未安装则上传openssl-1.0.2r.tar.gz安装包,进行安装

解压缩openssl-1.0.2r.tar.gz并进入openssl-1.0.2r目录执行:

apt-get purge openssl

./config  –prefix=/usr/local –openssldir=/usr/local/ssl

make && make install

./config shared –prefix=/usr/local –openssldir=/usr/local/ssl

make clean

make && make install

3.1.4、修改tomcat运行配置

修改tomcat/conf/server.xml文件:

<Connector port=”8080″ protocol=”org.apache.coyote.http11.Http11AprProtocol”

        connectionTimeout=”20000″

        redirectPort=”8443″

        URIEncoding=”UTF-8″

        maxThreads=”500″

        minSpareThreads=”75″

        enableLookups=”false”

        disableUploadTimeout=”true”

        acceptCount=”300″

        compression=”on” compressionMinSize=”2048″

        compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

        />

Tomcat性能调优及性能测试工具配置-风君雪科技博客

重启tomcat,并查看tomcat日志,若出现以下错误:

Tomcat性能调优及性能测试工具配置-风君雪科技博客

修改tomcat/bin/catalina.sh文件

找到JAVA_OPTS配置,在最后加上:-Djava.library.path=/usr/local/apr/lib

Tomcat性能调优及性能测试工具配置-风君雪科技博客

重启tomcat并查看日志打印:

Tomcat性能调优及性能测试工具配置-风君雪科技博客

出现上述表示tomcat已经是以apr模式运行。

Tomcat性能监控工具VisuaIVM

1、配置

VisualVMwindows jdk自带的一个软件,在jdk安装目录的bin目录下。

远程监控配置配置JMX管理远程tomcat

修改远程tomcat/bin/catalina.shwindowscatalina.bat)文件

在JAVA_OPTS后添加:

-Dcom.sun.management.jmxremote(允许使用JMX远程管理

-Dcom.sun.management.jmxremote.port=9008JMX远程连接端口)

-Dcom.sun.management.jmxremote.authenticate=false(不进行身份认证,任何用户都可以连接

-Dcom.sun.management.jmxremote.ssl=false(不使用SSL)

Tomcat性能调优及性能测试工具配置-风君雪科技博客

重启tomcat,打开VisualVM软件,添加远程主机ip在远程IP上右键添加JMX连接。

使用的是Linux环境,还需修改/etc/hosts文件

服务器对应127.0.0.1ip改为实际IP地址。

再次使用VisualVM添加JMX远程连接

Tomcat性能调优及性能测试工具配置-风君雪科技博客

然后就可以实时监控tomcatCUP、内存等数值的变化。