• Tomcat高级特性及性能调优


    Tomcat对Https的支持

    HTTPS简介

    Https,是以安全为目标的Http通道,在Http的基础上通过传输加密和身份认证保证了传输的安全性。HTTPS在HTTP的基础上加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

    HTTPS和HTTP的主要区别

    • HTTPS协议使用时需要到电子商务认证授权机构申请SSL证书
    • HTTP默认是8080端口,HTTPS默认8443端口
    • HTTPS是具有SSL加密的安全性传输协议,对数据的传输加密
    • HTTP的连接是无状态的,不安全的;HTTPS协议是SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全

    Tomcat对HTTPS的支持

    1. 使⽤ JDK 中的 keytool⼯具⽣成免费的秘钥库⽂件(证书)

    keytool -genkey -alias lagou -keyalg RSA -keystore lagou.keystore

    1. 配置conf/server.xml

    certificateKeystoreFile 就是上一步生成的文件的路径,certificateKeystorePassword是上一步输入的密钥

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" schema="https" secure="true" SSLEnabled="true">
            <SSLHostConfig>
                <Certificate certificateKeystoreFile="d:/apache-tomcat-8.5.32/lagou.keystore"
                             type="RSA" certificateKeystorePassword="123456"/>
            </SSLHostConfig>
        </Connector>
    
    1. 访问https://localhost:8443/测试

    Tomcat类加载机制

    我们先来回顾一下Java的双亲委派机制

    如一个Hello.class文件,不考虑自定义加载器,首先会在AppClassLoader中检查是否已经加载过,如果加载过就不加载了。如果没有加载过,就会拿到父加载器,那么父加载器(ExtClassLoader)就会检查是否加载过,如果没有,就再往上,让BootStrapClassLoader检查是否加载过。

    如果还是没有,因为他的上面已经没有父加载器了,那么他就开始自己加载,如果能加载,他就自己加载。不能加载,就下沉到子加载器去加载,一直到最底层,如果没有类加载器能加载就抛出异常ClassNotFoundException。

    而Tomcat为了实现同一个tomcat中,webapps下部署了两个应用,要使这两个应用隔离,就算两个应用里有相同全路径的两个类,也要分别都被加载,且互不能访问。这样它就违背了双亲委派机制。

    Tomcat类加载器图:

    • BootstrapClassLoader和ExtClassLoader的作用不变
    • AppClassLoader正常情况加载的是CLASSPATH下的类,但是Tomcat的启动脚本并未使用该变量,而是加载tomcat启动的类,比如bootstrap.jar,通常在catalina.sh中指定,位于CATALINA_HOME/bin下面
    • Common类加载器加载Tomcat的一些通用的类,位于CATALINA_HOME/lib下,如servlet-api.jar
    • Catalina ClassLoader用于加载服务器内部可见类,这些类应用程序不能访问
    • Shard ClassLoader用于加载应用程序共享类
    • WebAppClassLoader,每个应用程序都有一个独一无二的WebApp ClassLoader,用于加载应用程序/WEB-INF/classes和WEB-INF/lib下的类

    tomcat8.5默认改变了双亲委派机制

    1. 首先从Bootstrap ClassLoader加载指定的类
    2. 如果未加载到,从/WEB-INF/classes加载
    3. 如果未加载到,从/WEB-INF/lib/*.jar 加载
    4. 如果未加载到,则依次从AppClassLoader、Common、Shared加载

    Tomcat性能优化

    Tomcat的优化主要从两个方面:

    1. JVM虚拟机优化
    2. Tomcat自身的配置优化

    对于JVM的虚拟机优化,这里不做过多赘述,主要关注Tomcat配置的优化

    Tomcat配置优化

    1. 调整tomcat线程池

    1. 调整tomcat连接器设置
    参数 说明
    maxConnections 最⼤连接数,当到达该值后,服务器接收但不会处理更多的请求, 额外的请求将会阻塞.可通过ulimit -a 查看服务器限制。对于CPU要求更⾼(计算密集型)时,建议不要配置过⼤ ; 对于CPU要求不是特别⾼时,建议配置在2000左右(受服务器性能影响)。 当然这个需要服务器硬件的⽀持
    maxThreads 最大线程数
    acceptCount 最大排队等待数,当服务器接收的请求数量到达maxConnections,此时tomcat会将后面的请求放入队列中等待,acceptCount指的就是队列的大小。
    1. 禁用AJP连接器

    1. 调整IO模式

    Tomcat8之前的版本默认是BIO,Tomcat8之后的版本默认使用的是NIO模式

    1. 动静分离

    可以使用Nginx + Tomcat 相结合的部署方案,Nginx负责静态资源访问,Tomcat负责Jsp等动态资源访问。(因为Tomcat不擅长处理静态资源)

    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    MSDN仿站
    跟我学android—02.CustomActivity
    iptables redirect outside requests to 127.0.0.1
    linux 查看端口使用情况
    防火墙、Iptables、netfilter/iptables、NAT 概述
    POSTROUTING与PREROUTING区别
    android:layout_gravity和android:gravity的区别
    EasyUI datagrid 分页Json字符串格式
    [转载]easyui datagrid 时间格化(JS 日期时间本地化显示)
    [转载]EasyUI Pagination 分页的两种做法
  • 原文地址:https://www.cnblogs.com/javammc/p/15730960.html
Copyright © 2020-2023  润新知