【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