前言
运行环境: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:让tomcat以server模式运行
-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:+UseConcMarkSweepGC:jdk1.5及以后版本具有的功能,使用是GC估算触发和heap占用触发,提高垃圾回收的响应时间。
-XX:+UseParNewGC:对年轻代采用多线程并行回收,提高回收效率。
-XX:+CMSParallelRemarkEnabled:在使用-XX:+UseParNewGC的情况下,减少mark的时间。
-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩。
-XX:LargePageSizeInBytes=64M:指定heap内存页面大小。
-XX:+UseFastAccessorMethods:原始类型快速优化(get、set方法等)
-XX:+UseCMSInitiatingOccupancyOnly:使用手动定义初始化定义开始CMS收集。
-Djava.awt.headless=true:防止图标在Linux环境下加载不出来的异常。
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”
/>
参数说明:
port:tomcat服务启动端口
connectionTimeout:连接等待时长,单位毫秒
URIEncoding:字符编码
maxThreads:连接器要创建的请求处理线程的最大数量。若未指定,改属性默认设置为200。如果使用了execute将忽略连接器的此属性。
minSpareThreads:始终保持运行的最小线程数。若未指定,默认为10.
enableLookups=”false”:禁用DNS查找,提高性能。
disableUploadTimeout:此标志允许servlet容器在数据上传时使用不同的连接超时,通常较长。如果没有指定,该属性被设置为true,禁用上传超时。
acceptCount:当所有可能的请求处理线程都在使用,传入连接请求的最大队列长度。当队列满时收到的任何请求都将被拒绝。默认值为100.
compression=”on”:开启压缩功能。
compressionMinSize:启用压缩的输出内容大小。默认2kb。
compressableMimeType:压缩类型。
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.1、APR配置
Tomcat要支持APR,必须安装apr和native,这样tomcat可以利用apache的apr接口,使用操作系统的部分本地操作,从而提高性能。
3.1.1、准备工作
已安装jdk和tomcat,且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。
解压缩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/bin/catalina.sh文件:
找到JAVA_OPTS配置,在最后加上:-Djava.library.path=/usr/local/apr/lib
重启tomcat并查看日志打印:
出现上述表示tomcat已经是以apr模式运行。
Tomcat性能监控工具VisuaIVM
1、配置
VisualVM是windows jdk自带的一个软件,在jdk安装目录的bin目录下。
远程监控配置,配置JMX管理远程端的tomcat:
修改远程端的tomcat/bin/catalina.sh(windows下为catalina.bat)文件:
在JAVA_OPTS后添加:
-Dcom.sun.management.jmxremote(允许使用JMX远程管理)
-Dcom.sun.management.jmxremote.port=9008(JMX远程连接端口)
-Dcom.sun.management.jmxremote.authenticate=false(不进行身份认证,任何用户都可以连接)
-Dcom.sun.management.jmxremote.ssl=false(不使用SSL)
重启tomcat,打开VisualVM软件,添加远程主机ip,在远程IP上右键添加JMX连接。
我使用的是Linux环境,还需修改/etc/hosts文件:
将服务器对应的127.0.0.1的ip改为实际IP地址。
再次使用VisualVM添加JMX远程连接
然后就可以实时监控tomcat的CUP、内存等数值的变化。
最新评论