Tomcat调优两个必选项

    科技2022-08-09  98

    一 内存优化

    启动时告诉JVM要一块多大内存,这块调优是效果最直接的方式,Tomcat 的启动参数位于tomcat的安装目录bin目录下,如果是Linux操作系统就是catalina.sh文件,如果是Windows操作系统那么就是catalina.bat文件。打开该文件,一般该文件头部是一堆的由##包裹着的注释文字,找到注释文字的最后一段如:

    中间红色模块就是需要加入到参数:

    export JAVA_OPTS="-server -Xms1000M -Xmx1000M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

    -server:这个参数表示tomcat以更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量,一定要加上。

    -Xms:JVM初始化堆的大小。

    -Xmx:JVM堆的最大值。

    我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存,一般建议堆的最大值设置为可用内存的最大值的80%,Tomcat默认可以使用的内存为128MB,在线上稍微大点的应用项目中,这点内存是不够的,需要调大。

    -Xss:是指设定每个线程的堆栈大小。这个就要依据具体程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。一般不要设置超过1M,要不然容易出现out of memory。

    -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。

    -XX:MaxPermSize:设置最大非堆内存的大小,默认是物理内存的1/4。

    在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。

    所以一般我们最精简的配置方式就是:export JAVA_OPTS="-server -Xms1000M -Xmx1000M -Xss512k -XX:PermSize=128M -XX:MaxPermSize=256M",如果配置了这些,Tomcat基本可以飞一样的快了。

    二 线程优化

    我们对Tomcat启动时的命令进行了优化,增加了系统的JVM可使用数、垃圾回收效率与线程阻塞情况、增加了系统响应效率等还有一个很重要的指标,我们没有去做优化,就是吞吐量。

    打开tomcat安装目录confserver.xml文件,定位到这一行:

    这些都是默认的配置,我一般生产环境类似下面这样配置:

    <Connector port="8989" protocol="HTTP/1.1"

                   URIEncoding="UTF-8"  

                   minSpareThreads="25"

                   maxSpareThreads="75"

                   enableLookups="false" 

                   disableUploadTimeout="true"

                   connectionUploadTimeout="60000"

                   connectionTimeout="20000"

                   acceptCount="300"  

                   maxThreads="300" 

                   maxProcessors="1000" 

                   minProcessors="5"

                   redirectPort="8443" />

     

    URIEncoding=”UTF-8”:使得tomcat可以解析含有中文名的文件的url,一般jsp页面上的乱码问题也通过配置此项可以解决。

    minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数。

    maxSpareThreads:如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。

    enableLookups:这个功效和Apache中的HostnameLookups一样,一般设为关闭。

    disableUploadTimeout:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false。 这个参数一般和 connectionUploadTimeout两个参数一起配合才能设置文件上传的超时时间为60秒,毕竟文件上传可能需要消耗更多的时间,这个根据你具体业务需要自己调。

    connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒。

    acceptCount:是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接拒绝连接。

    minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10。

    maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75。

    maxThreads:可创建的最大的线程数,默认值150。

    关于tomcat优化方面的调优参数很多,我们只要掌握其中一部分关键的参数是必须优化的,这样tomcat的性能基本不会太差。

     

    tomcat常见的内存溢出有以下两种:

    1.java.lang.OutOfMemoryError: PermGen space

    解决方法:设置MaxPermSize大小。

    2.java.lang.OutOfMemoryError: Java heap space

    解决方法:设置-Xms和-Xmx大小。

    Processed: 0.018, SQL: 8