zoukankan      html  css  js  c++  java
  • Tomcat专题(三)-----Tomcat性能优化

    性能优化

    性能优化的三个指标

    • 降低响应时间
    • 提高系统吞吐量(QPS)
    • 提高服务的可用性

    原则

    性能优化的原则

    • 具体情况具体分析
    • 积少成多

    工具

    1、JConsole:一个内置 Java性能分析器

    jdk安装目录/bin/jconsole.exe

    2、JMeter:一个Apache组织开发的基于Java的压力测试工具

    下载地址:http://jmeter.apache.org/download_jmeter.cgi

    性能优化测试原则

    指标:正确率、CPU占有率、QPS、JVM

    程序分类:I/0密集型(网络,文件读写),CPU密集型(加密/解密算法)

    Tomcat中server.xml优化

    Connector连接器的I/O模型

    1、连接器模式改为NIO模式

    将server.xml中的

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

    改为

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/>

    优点:

    • NIO模式最大化压榨了CPU,把时间片更好利用起来
    • NIO适合大量长连接

    2、关闭自动重载

    <Context docBase="" reloadable="false"/>

    关闭自动重载,默认是true(不同版本中有差异)-----自动加载增加运行开销并且很容易内存溢出

    3、配置线程池

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
            maxThreads="150" minSpareThreads="4"/>

    Executor标签中属性

      【namePrefix】线程命名前缀

      【maxThreads】最大允许线程数

      【minSpareThreads】最少空闲线程,相当于初始化的线程,线程池中的线程

    Connector标签中的属性

      【executor】对上面Executor标签标签的引用

    <Connector executor="tomcatThreadPool"
                   port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

    4、valve优化: 移除掉AccessLogValve

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />

    valve实现都需要消耗java应用的计算时间,一般我们可以使用nginx来记录日志

    Tomcat中web.xml优化

    应用程序运行时最终会加载conf/web.xml和应用的web.xml的合集

    1、servlet优化

    当前应用是REST应用(微服务):

    a、去掉不必要的资源:JspServlet

    将web.xml中的JspServlet注释掉

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>

    b、seesion也可以移除

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    一般微服务不使用session,因为分布式session实现比较麻烦,大部分是通过像Oatuth2这种方式去做。

    2、JSP预编译优化

    a、JSP -> JAVA -> CLASS。可使用ant先编译jsp

    b、Jspservlet开发模式(development)设置为false

    SpringBoot中Tomcat优化

    Maven中Springboot引入Tomcat

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>

    相关配置

    1.设置线程池 server.tomcat.max-threads=1000

    2.关闭Accesslog日志 server.tomcat.accesslog=false

  • 相关阅读:
    laravel5.1框架简介及安装
    数据结构之队列定义及基本操作实现
    PHP之闭包详解
    数据结构之栈定义及基本操作实现
    PHP之MVC微型框架简单搭建
    对web应用中单一入口模式的理解及php实现
    php面向对象编程学习之高级特性
    数据结构之链表定义及基本操作实现
    数据结构之数组定义及基本操作
    感悟
  • 原文地址:https://www.cnblogs.com/alimayun/p/12357134.html
Copyright © 2011-2022 走看看