美文网首页Java
Tomcat 性能优化

Tomcat 性能优化

作者: 丿星纟彖彳亍 | 来源:发表于2022-08-22 14:48 被阅读0次

    启动参数优化

    启动溢出

    tomcat为了支持servlet3.0的特性,比如说支持@WebServlet、@WebListener等等,要支持这些特性,tomcat就得去扫描所有的jar包里面的每个类。这个异常表明在扫描jar包的时候,递归调用太深,导致栈溢出了,tomcat给了一个馊主意,让你增大xss,这个还是不好,xss加大了,可用线程数就少了。

    spring-amqp-*.jar,\
    spring-aop-*.jar,\
    spring-aspects-*.jar,\
    spring-beans-*.jar,\
    bcpkix-*.jar,bcprov-*.jar,fr-*.jar
    

    其他说明:
    1)、bcprov-ext-jdk15on-1.54.jarbcprov-jdk15on-1.54.jarfr-third-7.1.jar这三个包本来就重复了,可以去掉bcprov-*;

    2)、如果只有bcprov-ext-jdk15on-1.54.jarbcprov-jdk15on-1.54.jar这两个包,可以只保留bcprov-ext-jdk15on-1.54.jar,因为bcprov-ext-jdk15on-1.54.jar包含了bcprov-jdk15on-1.54.jar

    3)、如果感觉tomcat启动慢,那是因为要扫描jar里的servlet3.0注解,可以在conf/ catalina.properties文件中tomcat.util.scan.StandardJarScanFilter.jarsToSkip末尾增加不需要扫描的jar来提速,

    如果你不想使用servlet3.0 annotation支持,在tomcat的catalina.properties配置文件中tomcat.util.scan.DefaultJarScanner.jarsToSkip的值后面加一个,*,这样就不会扫描所有的jar包了。启动更快,也不会出异常。

    Linux

    要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前。
    JAVA_OPTS="-Xms512m -Xmx512m -XX:ParallelGCThreads=8 -XX:PermSize=128m -XX:MaxPermSize=256m"

    Windows

    要添加在tomcat 的bin 下catalina.bat 里
    set JAVA_OPTS=-Xms512m -Xmx512m -XX:ParallelGCThreads=8 -XX:PermSize=128m -XX:MaxPermSize=256m

    说明:

    -server:一定要作为第一个参数,在多个CPU时性能更佳
    -Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
    -Xmx:java heap最大值,使用的最大内存  把Xms与Xmx两个值设成一样是最优的做法
    -XX:PermSize:设定内存的永久保存区域,在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误,默认是物理内存的1/64;
    -XX:MaxPermSize:设定最大内存的永久保存区域,默认是物理内存的1/4;
    -XX:MaxNewSize:
    +XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
    -Xss:每个线程的Stack大小,一般不易设置超过1M,要不然容易出现out ofmemory
    -verbose:gc 现实垃圾收集信息
    -Xloggc:gc.log 指定垃圾收集日志文件
    -Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
    -XX:+UseParNewGC: 缩短minor收集的时间
    -XX:+AggressiveOpts:每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)
    -XX:+UseBiasedLocking:使得你的appserver内对线程处理自动进行最优调配
    -XX:+DisableExplicitGC:程序代码中不允许有显示的调用”System.gc()”
    -XX:+UseParNewGC:对young generation采用多线程并行回收
    -Djava.awt.headless=true:一般放在最后使用的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web 网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显 示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。
    
    

    容器优化

    打开tomcat安装目录\conf\server.xml文件,定位到这一行:
    <connector port="8080" protocol="HTTP/1.1">
    这一行就是我们的tomcat容器性能参数设置的地方,它一般都会有一个默认值,这些默认值是远远不够我们的使用的,我们来看经过更改后的这一段的配置:

    <connector port="8080" protocol="HTTP/1.1" <="" p="" style="word-wrap: break-word;">
              URIEncoding="UTF-8"  
              minSpareThreads="25" 
              maxSpareThreads="75"
              enableLookups="false" 
              disableUploadTimeout="true" 
              connectionTimeout="20000"
              acceptCount="300"  
              maxThreads="300" 
              maxProcessors="1000" 
              minProcessors="5"
              useURIValidationHack="false" 
              compression="on" 
              compressionMinSize="2048" 
              compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
              redirectPort="8443"
    />
    

    参数说明:

    - URIEncoding=”UTF-8”:使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译
    - maxSpareThreads:如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
    - minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数。
    - enableLookups:这个功效和Apache中的HostnameLookups一样,设为关闭。
    - connectionTimeout:网络连接超时时间毫秒数。
    - maxThreads:Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。
    - acceptCount:当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection
    - maxProcessors与minProcessors:在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。
    通常Windows是1000个左右,Linux是2000个左右。
    - useURIValidationHack:设成"false",可以减少它对一些url的不必要的检查从而减省开销
    - enableLookups=“false”:为了消除DNS查询对性能的影响我们可以关闭DNS查询
    - disableUploadTimeout:类似于Apache中的keeyalive一样
    
    客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览,HTTP 压缩可以大大提高浏览网站的速度,节省40%左右的流量,更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人
    - compression=“on” 打开压缩功能
    - compressionMinSize=“2048” 启用压缩的输出内容大小,这里面默认为2KB
    - noCompressionUserAgents=“gozilla, traviata” 对于以下的浏览器,不启用压缩
    - compressableMimeType=“text/html,text/xml” 压缩类型
    

    最后,不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端口这个段的配置

    相关文章

      网友评论

        本文标题:Tomcat 性能优化

        本文链接:https://www.haomeiwen.com/subject/uaeigrtx.html