【tomcat】tomcat学习

tomcat

1,连接器(Coyote)

ProtocalHandler: Endpoint,Processor

Adapter:将Request转化为ServletRequest

 

2,Servlet容器(Catalina)

Service:

容器由父到子依次排列

Container:

Engine:

Host:
Context:

Wrapper:

Servlet就放在Wrapper中

 

3,tomcat定位servlet原理「使用Mapper组件」

 

4,tomcat服务器配置:

1)server.xml中:

可配置connector共享线程池:

 <Executor name="tomcatThreadPool"

              namePrefix="myron-exec-"

              maxThreads="200"

              minSpareThreads="100"

              maxIdleTime="60000"

              maxQueuedSize="Integer.MAX_VALUE"

              className="org.apache.catalina.core.StandardThreadExecutor"

    />

 

2)设置connector使用共享线程池

在connector标签中指定executor属性即可;注意,executor创建的是共享线程池,如果某个connector不引用executor创建的线程池,那么该connector仍会根据自己指定的属性创建它们自己的线程池。

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

               connectionTimeout="20000"

               redirectPort="8443" executor="tomcatThreadPool"/>

 

3)host:可以在一个engine上配置多个,也就是部署多套(是不是伪分布?)

<Host name="localhost"  appBase="webapps"

      unpackWARs="true" autoDeploy="true">

name:主机名称

appBase:部署路径

unpackWARs:是否解压war包(解不解压都可以访问)

 

host子标签:

<context docBase=“myApp” path="/myApp"></context>

docBase:web应用目录或者war包的部署路径;可以是绝对路径 ,也可以是相对于Host appBase的相对路径

path:web应用的Context路径;如果我们Host名为localhost,则该web应用访问的根路径为:http://localhost:8080/myApp

4)web.xml配置

servlet配置:

<servlet>

    <servlet-name>MyServlet</servlet-name>

    <servlet-class>com.mmh.servlet.MyServlet</servlet-class>

    <!--配置在servlet中的init-param只对当前servlet有效,

    通过HttpServlet.getInitParameter方法获取-->

    <init-param>

        <param-name>namespace</param-name>

        <param-value>init.conf</param-value>

    </init-param>

    <!--load-on-startup:值小于0,那就是懒加载(第一次访问时才加载)-->

    <load-on-startup>1</load-on-startup>

    <!--当前servlet是否可用-->

    <enabled>true</enabled>

</servlet>

<servlet-mapping>

    <servlet-name>MyServlet</servlet-name>

    <url-pattern>/find</url-pattern>

</servlet-mapping>

 

context-param配置:

<!--这个参数是ServletContext初始化参数,

可以使用java.servlet.ServletContext.getInitParameter方法获取-->

<context-param>

    <param-name>param01</param-name>

    <param-value>hello</param-value>

</context-param>

 

5)JVM配置

 

6)tomcat集群

伪集群:同一台服务器,多台tomcat,只是端口号不同

集群:多台服务器上的多台tomcat

 

session共享方案:

ip_hash负载均衡策略:同一客户端ip只会请求一台固定的后台服务器,可以解决session问题

Sso单点登录:实质上就是解决集群环境下的session共享,使用redis缓存分布式session

 

7)tomcat安全:

配置安全:默认shutdown 端口修改

传输安全:https;申请证书,证书与域名进行绑定(也就是这个域名下的资源都需要加密传输,https端口号 8443)

应用安全:登录、授权

 

8)tomcat性能调优:

响应时间:
吞吐量:TPS

 

问题:是一台服务器上部署多个tomcat还是一个tomcat部署多个项目?

 

9)配置tomcat内存参数「配置在catalina.sh中」:

JAVA_OPTS=“-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8 -Djava.rmi.server.hostname=172.16105.130 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sum.management.jmxremote.rmi.port=8999 -Dcom.sum.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false”

查看java进程内存:jmap -heap 进程号

查看进程号:ps -ef|grep 服务

 

10)配置tomcat垃圾回收器

JAVA_OPTS=“-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8 -Djava.rmi.server.hostname=172.16105.130 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sum.management.jmxremote.rmi.port=8999 -Dcom.sum.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false” 可以在这上面加上垃圾收集器信息

 

11)配置tomcat连接「server.xml 中的connector标签」

maxConnections:最大链接数;达到最大链接数时候,不会处理请求,但是会接收请求;接收的请求会放在任务等待队列中

maxThread

acceptCount:任务等待队列的最大排队数

Tomcat最大的请求处理数量=maxConnections+acceptCount

posted on 2022-07-12 16:07  哈皮的玩偶  阅读(35)  评论(0编辑  收藏  举报