首页 > 其他 > 详细

Tomcat优化

时间:2019-07-08 20:54:01      阅读:102      评论:0      收藏:0      [点我收藏+]

不同版本的tomcat的参数可能不太一样,所以优化时最好对应官网文档查看下是否还保留着这个参数。

这里是Tomcat官方配置链接:

Tomcat 7官方配置 

Tomcat 8官方配置

如果本地已经启动了tomcat,则可以直接访问 http://127.0.0.1:8080/docs/config 来查看本地tomcat配置文档(前提是未删除webapps下的docs目录)。

 

下面是一些通用的优化手段。

一、tomcat参数配置

1.开启连接池

默认是关闭线程池的。

<!--打开注释,并将线程数调大-->
<Executor executor="tomcatThreadPool"  namePrefix="catalina-exec-" maxThreads="150"   minSpareThreads="25"/>

参数解释:

  • maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断
  • minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
  • prestartminSpareThreads:在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
  • maxQueueSize:最大的等待队列数,超过则拒绝请求

 

2.修改默认的连接参数

修改前

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->

修改后

<Connector 
    #使用线程池
    executor="tomcatThreadPool"
    port="8080" 
    protocol="org.apache.coyote.http11.Http11Nio2Protocol" 
    connectionTimeout="20000" 
    maxConnections="10000" 
    redirectPort="8443" 
    enableLookups="false" 
    acceptCount="100" 
    maxPostSize="10485760" 
    #开启压缩
    compression="on" 
    disableUploadTimeout="true" 
    compressionMinSize="2048" 
    acceptorThreadCount="2" 
    compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" 
    #设置编码
    URIEncoding="utf-8"
/>

3.开启NIO或APR

Tomcat有三种运行模式:bio、nio、apr,不同模式下Tomcat的运行效率差别比较大。

  • BIO:阻塞式IO,Tomcat6及以前版本默认运行模式,性能低,没有经过任何优化处理。
  • NIO:非阻塞式IO,Tomcat7以后的版本默认运行模式,利用Java异步IO技术使Tomcat运行性能有所提升。
  • APR:从操作系统级别来解决异步的IO问题,大幅度的提高性能。

①设置NIO模式(Tomcat6)
直接修改server.xml里的Connector节点,修改protocol为 org.apache.coyote.http11.Http11NioProtocol,启动生效。

<!--开启NIO模式-->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />

②设置APR模式(Tomcat7/8)
使用时将protocol指定为protocol=“org.apache.coyote.http11.Http11AprProtocol”。
此外,需要安装apr和native,下面是安装步骤:

#必须要安装apr和native,直接启动就支持apr。
#1.安装apr
yum install apr-devel openssl-devel

#2.安装native。进入Tomcat的bin目录,解压native源码包
tar -zxvf tomcat-native.tar.gz 
cd tomcat-native-1.1.32-src/jni/native 
./configure--with-apr=/usr/bin/apr-1-config--with-java-home="/opt/soft/jdk1.8.0_60" --with-ssl=yes

make 
make install 

native 会被安装到/usr/local/apr/lib。我们需要把/usr/local/apr/lib/ libtcnative-1.so.0.1.32指向Tomcat可识别路径。

15-Apr-2016 22:18:54.209 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent   
The APR based Apache Tomcat Native library which allows optimal performance in production environments   
was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

实际上Tomcat8默认apr是开启的,在配置中可以看到。

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

但是由于操作系统未安装apr或者apr路径未指到Tomcat默认可识别的路径,则apr模式无法启动,自动切换启动nio模式。

cd /usr  
mkdir java  
cd java/  
mkdir packages  
cd packages/  
mkdir lib  
cd lib/  
mkdir amd64  
cd amd64/

把/usr/local/apr/lib/ libtcnative-1.so.0.1.32软链接到上面创建的目录。

ln -s  /usr/local/apr/lib/libtcnative-1.so.0.1.32 libtcnative-1.so  
ln -s  /usr/local/apr/lib/libtcnative-1.so.0.1.32 libtcnative-1.so.0

重新启动Tomcat看到启动日志最后三行

4.禁用AJP

如果服务器没有使用 Apache则可以关闭该项。通常我们用的都是nginx,所以可以禁用AJP。

<!--注释掉下面这一行,默认是未注释的-->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

二、JVM参数优化

修改文件:bin/catalina.sh

JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewRatio=2 -XX:MaxTenuringThreshold=50 -XX:+DisableExplicitGC"

参数说明:

  • file.encoding:  默认文件编码
  •  -Xmx1024m: 设置JVM最大可用内存为1024MB
  • -Xms1024m:  设置JVM最小内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
  • -XX:NewSize: 设置年轻代大小
  • XX:MaxNewSize:  设置最大的年轻代大小
  • -XX:PermSize:       设置永久代大小
  • -XX:MaxPermSize:设置最大永久代大小
  • -XX:NewRatio=4:   设置年轻代(包括Eden和两个Survivor区)与终身代的比值(除去永久代)。设置为4,则年轻代与终身代所占比值为1:4,年轻代占整个堆栈的1/5
  • -XX:MaxTenuringThreshold=0:  设置垃圾最大年龄,默认为:15。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
  • -XX:+DisableExplicitGC:这个将会忽略手动调用GC的代码使得System.gc()的调用就会变成一个空调用,完全不会触发任何GC

 

Tomcat优化

原文:https://www.cnblogs.com/rouqinglangzi/p/11152020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!