Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
—》提供一个接口
—》接受请求connector 处理请求container
—》两个典型的connector 一个监听http请求8080(http1.1) 一个监听其他服务器的请求8009(ajp1.3)
—》配置多个虚拟机主机
—》每个虚拟主机下都可以部署(deploy)一个或者多个Web App(web应用)
—》一个Web App对应一个Context,有一个Context path
Container ==》 Engine/Host/Context
unpackWARs 如果应用目录有war包是否自动解压 true自动 false不解压
autoDeploy 如果应用目录有应用是否自动部署 true自动 false不部署
path 访问的时候要加的目录
docbase 网页文件的真实路径
debug 调试级别 (0-9,9为最高)
reloadable 当你修改了web.xml的配置文件是否需要重启 fasle表示需要重启 true表示不需要重启
crossContext 在tomcat集群里多个tomcat可以共享会话
准备两台拥有jdk环境的主机
Tomcat的多实例
解压软件包
tar -zxvf apache-tomcat-8.5.35.tar.gz
将软件包移动到别处
mv apache-tomcat-8.5.35/ /usr/local/tomcat
cp -r /usr/local/{tomcat,tomcat1}
修改配置文件
vim /usr/local/tomcat1/conf/server.xml
搜索"8009"将其改为"8010",将"8443"改为"8444"
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
搜索"8080"将其改为"8081",将"8443"改为"8444"
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444" />
搜索"8005"将其改为"8006"
<Server port="8006" shutdown="SHUTDOWN">
/usr/local/tomcat/bin/startup.sh &> /dev/null
/usr/local/tomcat1/bin/startup.sh &> /dev/null
验证一下
firefox 192.168.50.108:8080
firefox 192.168.50.108:8081
停止tomcat1并且删除掉它
/usr/local/tomcat1/bin/shutdown.sh
rm -rf /usr/local/tomcat1
修改配置文件
vi /usr/local/tomcat/conf/server.xml
150行:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
自己添加:
<Context path="/shop" docBase="/data" debug="0" reloadable="fasle" crossContext="true">
</Context>
mkdir /data
写主页
echo "hello world
" > /data/index.jsp
启动脚本
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
访问并验证
firefox http://192.168.50.108:8080/shop/index.jsp
firefox http://192.168.50.108:8080/shop
Tomcat的目录浏览功能
cd /data
mv index.jsp index1.jsp
mv /data/{index.jsp,index1.jsp}
touch /data/index{2..10}.jsp
修改配置文件
vi /usr/local/tomcat/conf/web.xml
修改112行:
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value> //true开启目录浏览
</init-param>
重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
firefox http://192.168.50.108:8080/shop
这样就可以看到这个目录下的所有文件
第一台:
开启jmx远程调用功能
vi /usr/local/tomcat/bin/catalina.sh
308行搜索"Execute",在Execute上面插入
CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.50.108
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8080
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true" #远程登陆的时候,需要通过本机授权
配置认证用户
cd /usr/local/jdk1.8.0_201/jre/lib/management/
cp jmxremote.password.template jmxremote.password
vi jmxremote.password
最后两行取消注释
将这两个用户的密码改为123456
monitorRole 123456
controlRole 123456
less jmxremote.access (这个文件里指明刚刚两个用户所拥有的权限)
monitorRole readonly
controlRole readwrite \
create javax.management.monitor.*,javax.management.timer.* \
unregister
chmod 600 jmxremote.*
重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
/usr/local/jdk1.8.0_201/bin/jconsole
选择Remote Process 远程连接
192.168.50.108:8080
monitorRole 123456
会提示你是否要建立不安全的连接(使用http连接)
选择继续就可以在浏览器看到tomcat的监控信息
只需要使用第一台
vi /usr/local/tomcat/bin/catalina.sh
搜索"Execute",在Execute上面插入
将刚刚添加远程监控的5行删除
vi /usr/local/tomcat/webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.50.*" /> #写自己的网段
vi /usr/local/tomcat/conf/tomcat-users.xml
最后一行在前面""插入
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="manager" password="123456" roles="manager-gui"/>
<user username="managerscript" password="123456" roles="manager-script"/>
</tomcat-users>
1.manager-gui #允许访问html接口(允许访问/manager/heml/*)
2.manager-script #允许访问纯文本接口(/manager/text/*)
3.manager-jmx #允许访问jmx代理接口(/manager/jmxproxy/*)
(前面三种角色都具有最后一种角色的权限)
4.manger-status #允许访问Tomcat状态页面(/manager/status/*)
重启
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
验证
firefox http://192.168.50.108:8080/manager/html/
manager
123456
把bdqn.war这个包拖到root目录下
将这个war包自动发布
如果提示标签崩溃了,将firefox浏览器重装一下就好
查看tomcat的状态
firefox http://192.168.50.108:8080/manager/status
vi /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" /> 允许所有人来访问本地主机
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
添加一个用户
vi /usr/local/tomcat/conf/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="123456" roles="admin-gui"/>
<user username="adminscript" password="123456" roles="admin-script"/>
重启
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
firefox http://192.168.50.108:8080/host-manager/html/
可以手动添加tomcat的虚拟主机
1.端口防护(设置成非8080端口)
2.禁用后台管理(rm -rf webapps目录下的/host-manager和/manger)
3.禁用目录浏览功能
4.隐藏信息(错误页面信息)
vi /usr/local/tomcat/conf/web.xml
在23行插入
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
vi /data/notfound.jsp
<h1>404</h1>
重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
输入错误界面验证
firefox http://192.168.50.108:8080/shop/sssss
JVM设置
在Tomcat中设置JVM参数 修改bin/catalina.sh文件设置参数(在第一行#!/bin/sh下写),增加
set JAVA_OPTS=-Dfile.encoding=UTF-8
-server
-Xms1024M
-Xmx1024M
-XX:NewSize=512M
-XX:MaxNewSize=1024M
-XX:PermSize=256M
-XX:MaxPermSize=356M
-XX:NewRatio=2
-XX:MaxTenuringThreshold=50
-XX:DisableExplicitGC
参考下述建议,根据自身硬件情况和业务情况设定
详解 -server:一定要作为第一个参数,在多个 CPU 时性能佳,还有一种叫 -client 的模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或开发调试,在 32 位环境下直接运行 Java 程序默认启用该模式。Server 模式的特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境,在具有 64 位能力的 JDK 环境下默认启用该模式。在Windows上,缺省的情况下默认是client模式,如果要使用server模式,需要在启动虚拟机时加-server参数,以获得高性能,对服务器应用,推荐采用server模式,尤其是多个CPU的系统。在Linux或者Solaris上缺省则采用server模式。
-Xms:表示 JVM初始内存大小,也可以说是Java 初始化堆的大小,-Xms 与-Xmx 设成一样的值,避免 JVM 反复重新申请内存,导致性能大起大落,默认值为物理内存的 1/64
-Xmx:表示最大 Java 堆大小,当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃,因此一般建议堆的最大值设置为可用内存的最大值的80%。如何知道我的 JVM 能够使用最大值,使用 java -Xmx512M -version 命令来进行测试,然后逐渐的增大 512 的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息,默认值为物理内存的
-Xmn:设置JVM最小内存(128-256就够了,一般不设置)
-XX:NewSize:设置新生代内存大小。
-XX:MaxNewSize:设置最大新生代新生代内存大小
-XX:PermSize:设置持久代内存大小
-XX:MaxPermSize:设置最大值持久代内存大小,永久代不属于堆内存,堆内存只包含新生代和老年代。
-XX:NewRatio:改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)
-XX:+UseParNewGC:对新生代采用多线程并行回收,这样收得快,注意最新的 JVM 版本,当使用 -XX:+UseConcMarkSweepGC 时,-XX:UseParNewGC 会自动开启。因此,如果年轻代的并行 GC 不想开启,可以通过设置 -XX:-UseParNewGC 来关掉。
-XX:SurvivorRatio:Eden 区与 Survivor 区的大小比值,设置为 8,表示 2 个 Survivor 区(JVM 堆内存年轻代中默认有 2 个大小相等的 Survivor 区)与 1 个 Eden 区的比值为 2:8,即 1 个 Survivor 区占整个年轻代大小的 1/10。
-XX:ConcGCThreads:早期 JVM 版本也叫-XX:ParallelCMSThreads,定义并发 CMS 过程运行时的线程数。比如 value=4 意味着 CMS 周期的所有阶段都以 4 个线程来执行。尽管更多的线程会加快并发 CMS 过程,但其也会带来额外的同步开销。因此,对于特定的应用程序,应该通过测试来判断增加 CMS 线程数是否真的能够带来性能的提升。如果还标志未设置,JVM 会根据并行收集器中的 -XX:ParallelGCThreads 参数的值来计算出默认的并行 CMS 线程数。
-XX:ParallelGCThreads:配置并行收集器的线程数,即:同时有多少个线程一起进行垃圾回收,此值建议配置与 CPU 数目相等。
-XX:OldSize:设置 JVM 启动分配的老年代内存大小,类似于新生代内存的初始大小 -XX:NewSize。
线程池设置
在Tomcat中,每一个用户请求都是 一个线程,所以可以使用线程池提高性能。 在配置文件server.xml的connector中引用,可以设置最大线程数为500,启动时最小线程为4,如下设置
在service标签下添加内容一个标签exector
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThread="4"/>
在connector标签的http1.1下边添加:
executor="tomcatThreadPool"
在这里插入图片描述 Excutor重要参数说明:
name:共享线程池的名字,这是connector为了共享线程池要引用的名字,改名字必须唯一
namePrefix:在JVM上,每运行线程都可以有一个name字符串,这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀后面,默认值为tomcat-exec-
maxThreads:该线程池可以容纳的最大线程数,默认200
maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(单位为毫秒)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲进程,默认值60000,一分钟
minSpareThreads:Tomcat应该始终打开的最小不活跃线程数,默认25
threadPriority:线程的等级
Connector重要参数说明
executor:表示使用参数值对应的线程池
minProcessors:服务器启动时创建的处理请求的线程数
maxProcessors:最大可以创建的处理请求的进程数
acceptCount:指定当前所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求不予处理。