博文大纲:
1、Tomcat概述
2、Tomcat组件及其特色
3、安装Tomcat
4、Tomcat中server.xml 文件结构
5、多实例(一台主机运行多个Tomcat)
6、自定义目录
7、使用Tomcat实时监控JVM虚拟机资源使用状况
8、开启JMX远程调试功能
9、配置使用https访问tomcat服务器
10、开启Manager管理页面
11、开启host-mangent管理页面
12、分割Tomcat的运行日志
十3、定义Tomcat 404错误返回的页面
十4、Tomcat服务的内存优化
十5、Tomcat线程池的优化
十6、更改Tomcat服务的请求方式前端
Tomcat是apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的web应用服务器,属于轻量级的应用服务器,在中小型企业和访问并非很高的场景很受欢迎,广泛被使用,并且在开发和调试JSP程序的首选!java
能够这样认为,当一台服务器部署好Apache服务器后,能够利用Apache服务器响应客户端的静态页面访问请求,而Tomcat是Apache服务器的扩展,当运行Tomcat的时候其实是做为一个Apache独立的进程单独运行的,Apache服务器为静态页面提供服务,而Tomcat是解析JSP页面和servlet,而且Tomcat也具有静态页面的解析能力,可是跟Apache相比仍是有些区别的。node
关于Tomcat的内容可不是一两句话就能够说完的,建议访问Tomcat官网详细了解!linux
Servlet(Server Applet):是Java Servlet的简称,称为小服务程序或服务链接器,用Java编写的服务器端程序,具备独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口;广义的Servlet是指任何实现了这个Servlet接口的类;通常状况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet能够响应任何类型的请求,但绝大多数状况下Servlet只用来扩展基于HTTP协议的Web服务器。web
Tomcat处理请求和响应的过程都是由servlet程序来完成的,而且servlet是为解决实现动态页面衍生的内容,与Nginx和Apache想要实现动态页面须要和PHP服务器沟通的过程同样,就能够把servlet看作LAMP或LNMP中的PHP。如图:算法
Tomcat是web应用服务器,是一个servlet/jsp容器,Tomcat做为servlet容器,负责处理客户端请求,并将servlet的响应传送给客户,而servlet是一种运行在Java语言的服务器上的组件,servlet最多见的用途是扩展Java web服务器功能,提供很是安全的易于使用cgi替代品。apache
Servlet工做流程:编程
servlet程序是Web服务器调用的,当Web服务器收到客户端的Servlet访问请求后,将执行如下几个过程:
①Web服务器首先检查是否已经装载并建立了该Servlet的实例对象。若是是,则直接执行第④步;不然,将执行第②步;
②装载并建立该servlet的一个实例对象;
③调用Servlet实例;
④建立一个用于封装HTTP请求的HttpServletRequest对象和一个表明HTTP响应消息的HttpServletResponse对象,而后调用Servlet的service()方法并将请求和响应对象做为参数传递进去;
⑤WEB应用程序被中止或从新启动以前,Servlet引擎将卸载Servlet,并在卸载以前调用Servlet的destroy()方法;vim
如图:后端
①客户端经过浏览器发送请求数据;
②Tomcat收到客户端的请求数据,由servlet容器处理并进行解析,而且把客户端的数据请求request改成servlet request交给后端的servlet实例;
③servlet实例收到客户端的请求数据的请求对象,进行处理客户端的请求,处理完成后将数据响应给servlet容器,响应给servlet容器叫作servlet response;
④servlet容器将收到的响应数据交给客户端;
Servlet容器与Servlet实例进行通讯时须要使用Java servlet api接口,而这个接口是由开发人员在写代码的时候定义或编写的。
jsp做为Servlet技术的扩展,常常会有人将二者搞混,下面简单介绍一下:
Servlet与JSP的区别:
Servlet在Java代码中能够经过HttpServletResponse对象动态输出HTML内容;
JSP在静态HTML内容中嵌入Java代码,而后Java代码在被动态执行后生成HTML页面;
Servlet与JSP各自的特色:
Servlet虽然能很好地组织业务逻辑代码,但在Java源文件中,由于是经过字符串拼接的方式生成HTML内容,这样就很容易致使代码维护困难、可读性较差;
JSP虽然避开了Servlet在生成HTML内容方面的劣势,可是在HTML中混入大量、复杂得业务逻辑;
运行时占用的资源小,扩展性强,支持负载均衡和邮件服务器等开发应用系统经常使用的功能。
安装Tomcat须要系统Java环境1.8版本以上,Centos 7默认就已经支持Java环境1.8版本,因为如今大部分使用仍是Centos 6的系统,,因为本人采用的Centos 7系统,因此首先须要卸载JDK环境。
[root@localhost ~]# rpm -qa | grep jdk //查询本机默认JDK环境 java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64 copy-jdk-configs-3.3-2.el7.noarch java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64 java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64 java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64 [root@localhost ~]# rpm -e java-1.8.0-openjdk-headless --nodeps [root@localhost ~]# rpm -e java-1.7.0-openjdk-headless --nodeps //将本来的jdk-headless包卸载 [root@localhost ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local //将提供的JDK软件包进行解压 [root@localhost ~]# vim /etc/profile //编写系统环境变量,在末尾添加如下内容 export JAVA_HOME=/usr/local/jdk1.8.0_211 //指定Java安装路径 export JRE_HOME=/usr/local/jdk1.8.0_211/jre //Java运行环境 export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar //声明Java中的类,类就是一类事务的属性 export PATH=$JAVA_HOME/bin/:$JRE_HOME/bin/:$PATH //将定义的变量添加到系统环境变量中 [root@localhost ~]# source /etc/profile //从新加载系统环境变量文件 [root@localhost ~]# java -version //查询支持的Java版本信息 java version "1.8.0_211" //符合要求 Java(TM) SE Runtime Environment (build 1.8.0_211-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode) [root@localhost ~]# tar zxf apache-tomcat-8.5.35.tar.gz [root@localhost ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat //将tomcat软件包解压,并移动到相应的位置 [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //启动Tomcat服务 [root@localhost ~]# netstat -anpt | grep 8080 //能够看出Tomcat的访问端口是8080 tcp6 0 0 :::8080 :::* LISTEN 2186/java 也可使用另外一种方法,编写好的控制tomcat的脚本在网盘连接中。 [root@localhost ~]# mv tomcat /etc/init.d/ [root@localhost ~]# chmod +x /etc/init.d/tomcat [root@localhost ~]# /etc/init.d/tomcat start //这样也是能够的
客户端访问测试:
Tomcat服务安装目录中的目录介绍:
经常使用的配置文件:
如图:
Server:表明整个容器,实例的顶层元素,一个配置文件中只能有一个server元素,能够包含多个service。好比:
<Server port="8005" shutdown="SHUTDOWN"> //表示关闭Tomcat,使用telnet链接8005,输入shutdown指令
Service:提供完整jvm的独立组件,jvm表示Java虚拟机,是一个虚构出来的虚拟机,能够包含一个engine包含多个connector;
<Service name="Catalina"> //表明接受全部tomcat接受的请求,若是是Service name="apache"则表示接受全部apache转发过来的请求
Connector:接口定义,负责接受客户端的请求,以及向客户端返回响应的结构;
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> //port:接受数据的端口;protocol:设置http协议; //Connection Timeout:与客户端的链接超时时间,-1表明不限制客户端的链接时间; //Redirectport :当客户端请求是https将请求转发到8443去
Engine:处理客户端的请求,能够包含多个hots;
<Engine name="Catalina" defaultHost="localhost"> //name:是引擎名称,处理客户的请求默认去寻找localhost
Host:定义的虚拟主机,为特定的虚拟主机处理全部的客户端请求;
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
Context:运行在虚拟主机中的单个web应用;
Tomcat处理http请求过程,如图:
具体过程:
①用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector得到;
②Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应;
③Engine得到请求localhost/test/index.jsp,匹配全部的虚拟主机Host;
④Engine匹配到名为localhost的Host(即便匹配不到也把请求交给该Host处理,由于该Host被定义为该Engine的默认主机),名为localhost的Host得到请求/test/index.jsp,匹配它所拥有的全部的Context。Host匹配到路径为/test的Context(若是匹配不到就把该请求交给路径名为“ ”的Context去处理);
⑥path=“/test”的Context得到请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类;
⑥构造HttpServletRequest对象和HttpServletResponse对象,做为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序;
⑦Context把执行完以后的HttpServletResponse对象返回给Host;
⑧Host把HttpServletResponse对象返回给Engine;
⑨Engine把HttpServletResponse对象返回Connector;
⑩Connector把HttpServletResponse对象返回给客户Browser;
说白了,更虚拟主机差很少一个意思。方法以下:
[root@localhost ~]# cp -ra /usr/local/tomcat/ /usr/local/tomcat2 [root@localhost ~]# vim /usr/local/tomcat2/conf/server.xml 22 <Server port="8006" shutdown="SHUTDOWN"> //将本来的8005改成8006 69 <Connector port="8081" protocol="HTTP/1.1" //将本来的808端口改成8081 70 connectionTimeout="20000" 71 redirectPort="8444" /> //将本来的8443改成8444 116 <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" /> //将本来的8009改成80十、8443改成8444 //行首为行号,修改配置文件,以避免端口冲突 [root@localhost ~]# /usr/local/tomcat2/bin/startup.sh //启动第二个tomcat实例 [root@localhost ~]# netstat -anpt | grep 8081 //经过配置文件的修改,监听的端口为8081 tcp6 0 0 :::8081 :::* LISTEN 57572/java
客户端访问测试:
说白了就是访问指定路径的文件。方法以下:
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml //编辑tomcat服务主配置文件 148 <Host name="localhost" appBase="webapps" 149 unpackWARs="true" autoDeploy="true"> 150 <Context path = "/shop" docBase = "/data/project" debug = "0" reloadable = "false" crossContext = "true"> 151 </Context> //添加150行和151行便可! //path:指出访问的路径; docBase:指定文件存放的路径; //debug:指出debug的等级为输出信息最少,9提供最多信息; //reloadable:为true时当web.xml文件有改动时将会自动从新加载,不准重启服务; //crossContext:为true时,表示不一样的context共享一个session(会话池) [root@localhost ~]# mkdir /data/project -p [root@localhost ~]# echo "<h1>hello word</h1>" >> /data/project/index.jsp //建立测试页面 [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重启tomcat服务
客户端访问测试:
Tomcat默认禁止目录遍历的,测试以下:
[root@localhost ~]# mv /data/project/index.jsp /data/project/index1.jsp //改变默认首页文件名
客户端访问,如图:
若是须要开启目录遍历功能,则需如下操做:
[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml //注意:这个文件不是tomcat主配置文件 112 <param-value>true</param-value> //将本来的false改成true [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //从新启动tomcat服务
客户端访问测试,如图:
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml //编辑tomcat服务主配置文件 152 <Context path="/jiankong" docBase="/data/jiankong" debug="0" reloadable=" false" crossContext="true"/> //上面已经解释过了,这里就不解释了 [root@localhost ~]# mkdir /data/jiankong [root@localhost ~]# vim /data/jiankong/index.jsp //在指定目录下编写监控脚本 <% Runtime rtm = Runtime.getRuntime(); long mm = rtm.maxMemory()/1024/1024; long tm = rtm.totalMemory()/1024/1024; long fm = rtm.freeMemory()/1024/1024; out.println("JVM memory detail info :<br>"); out.println("Max memory:"+mm+"MB"+"<br>"); out.println("Total memory: "+tm+"MB"+"<br>"); out.println("Free memory: "+fm+"MB"+"<br>"); out.println("Available memmory can be used is :"+(mm+fm-tm)+"MB"+"<br>"); %> [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重启tomcat服务
访问测试,以下:
[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh //编写这个脚本 307CATALINA_OPTS=" $CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true" 308 309 # ----- Execute The Requested Command ----------------------------------------- //填写的内容必须在这行上面 //port:监听的端口; ssl:关闭ssl安全传输 authenticate:开启用户认证 [root@localhost ~]# cd //usr/local/jdk1.8.0_211/jre/lib/management/ [root@localhost management]# cp jmxremote.password.template jmxremote.password [root@localhost management]# vim jmxremote.password //定义用户的文件并在文件末尾添加如下内容 64 lzj 123456 //64为行号,定义用户为lzj,密码为123456,使用“wq!”强制保存退出 [root@localhost management]# vim jmxremote.access //定义用户权限的文件 77 lzj readwrite \ //将本来的用户定义为刚才定义的用户lzj 78 create javax.management.monitor.*,javax.management.timer.* \ 79 unregister [root@localhost management]# chmod 600 jmxremote.access [root@localhost management]# chmod 600 jmxremote.password //更改这两个配置文件的权限为600 [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重启tomcat服务 [root@localhost ~]# netstat -anpt | grep 8888 tcp6 0 0 :::8888 :::* LISTEN 58760/java //确认刚才定义的端口8888在监听
因为其为图像化界面,因此须要在桌面环境下执行如下命令:
[root@localhost ~]# jconsole //调出图形化终端
[root@localhost ~]# keytool -genkey -v -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/tomcat.keystore -validity 36500 //alias:别名,这里设置为tomcat; //keyalg:证书算法,RSA; //validity:证书有效期,单位为天 //keystore:指定证书存放路径,能够自定义 输入密钥库口令: //实验环境,如下内容随意输入 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: lv 您的组织单位名称是什么? [Unknown]: lv 您的组织名称是什么? [Unknown]: lv\ 您所在的城市或区域名称是什么? [Unknown]: lv 您所在的省/市/自治区名称是什么? [Unknown]: lv 该单位的双字母国家/地区代码是什么? [Unknown]: lv CN=lv, OU=lv, O="lv\\", L=lv, ST=lv, C=lv是否正确? [否]: y 正在为如下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 36,500 天): CN=lv, OU=lv, O="lv\\", L=lv, ST=lv, C=lv 输入 <tomcat> 的密钥口令 (若是和密钥库口令相同, 按回车): 再次输入新口令: [正在存储/usr/local/tomcat/conf/tomcat.keystore] Warning: JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /usr/local/tomcat/conf/tomcat.keystore -destkeystore /usr/local/tomcat/conf/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。 [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml //内容能够自行编写,也可修改本来的配置,注意将其注释去掉 87 <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" //将本来的8443改成443 88 maxThreads="150" SSLEnabled="true" 89 keystoreFile="/usr/local/tomcat/conf/tomcat.keystore" //指定证书存放路径 90 keystorePass="123456"> //指定生成证书所输入的密码 91 </Connector> [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重启tomcat服务
客户端访问测试:
在访问Tomcat的默认首页界面时,有一个“Manager App”,如图:
接下来经过配置开启Tomcat的manager管理页面,方法以下:
[root@localhost ~]# vim /usr/local/tomcat/conf/tomcat-users.xml 45 <role rolename="manager-gui"/> 46 <user username="lzj" password="123456" roles="manager-gui"/> //自定义用户名和密码 47 </tomcat-users> //注意要写在这个闭合中 [root@localhost ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml 20 allow="192.168.1.253|192.168.1.8|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> //将须要访问的IP的地址添加到“allow=”后,以“|”进行分隔 [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //从新启动Tomcat服务
客户端访问测试:
准备war包添加到自定义的目录中!
[root@localhost ~]# echo "hello word" >> index.jsp [root@localhost ~]# jar -vcf index.war index.jsp //作成war包,并命名为index.war
在web图形页面进行添加war包:
方法跟开启manger管理页面差很少,方法以下:
修改服务器的配置文件:
[root@localhost ~]# vim /usr/local/tomcat/conf/tomcat-users.xml 45 <role rolename="admin-gui"/> 46 <user username="lzj" password="123456" roles="admin-gui"/> 47 </tomcat-users> //在末行的闭合标签中,添加以上内容,用户名和密码定义 [root@localhost ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml 19 <Valve className="org.apache.catalina.valves.RemoteAddrValve" 20 allow="192.168.1.253|192.168.1.8|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> //添加容许访问的IP地址 [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重启服务
客户端访问测试:
对Tomcat进行日志跟Apache作日志分割差很少,不过Tomcat自己并无日志分割工具,须要使用第三方日志分割工具——cronolog日志分割工具
操做以下:
[root@localhost ~]# tar zxf cronolog-1.6.2.tar.gz -C /usr/src [root@localhost ~]# cd /usr/src/cronolog-1.6.2/ [root@localhost cronolog-1.6.2]# ./configure && make && make install //编译安装cronolog工具 [root@localhost cronolog-1.6.2]# which cronolog //查询到该命令的绝对路径 /usr/local/sbin/cronolog [root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh 471 org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog /usr/local/tomcat/logs/test.%Y-%m-%d.out >> /dev/null & //将本来的内容修改成以上内容 472 473 #>> "$CATALINA_OUT" 2>&1 "&" //将这行内容进行注释 [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh [root@localhost ~]# ll /usr/local/tomcat/logs/ 总用量 380 -rw-r----- 1 root root 159033 12月 8 16:51 catalina.2019-12-08.log -rw-r----- 1 root root 140209 12月 8 16:51 catalina.out -rw-r----- 1 root root 162 12月 8 15:10 host-manager.2019-12-08.log -rw-r----- 1 root root 8722 12月 8 16:51 localhost.2019-12-08.log -rw-r----- 1 root root 6071 12月 8 15:10 localhost_access_log.2019-12-08.txt -rw-r----- 1 root root 1719 12月 8 14:41 manager.2019-12-08.log -rw-r----- 1 root root 18824 12月 8 16:51 test.2019-12-08.out //确认这个文件存在
默认状况下,客户端访问Tomcat服务器上一个不存在的目录时,就会提示404错误,并且会将咱们Tomcat的版本信息显示出来,这是很是危险的。默认的404返回的错误页面以下:
解决的方法也很简单,就是将404状态码进行重定向,以便咱们自定义返回的页面信息,方法以下:
[root@localhost ~]# echo "Access Error ..." >> /usr/local/tomcat/webapps/ROOT/error.jsp //自定义错误页面内容 [root@localhost ~]# vim /usr/local/tomcat/conf/web.xml 22 version="3.1"> //在这行内容的下面添加如下内容 23 <error-page> 24 <error-code>404</error-code> 25 <location>/error.jsp</location> 26 </error-page> [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh
客户端访问以下:
方法以下:
[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh 1 #!/bin/sh //在第一行下面添加如下内容 2 JAVA_OPTS="-Dfile.encoding=UTF-8 3 -server 4 -Xms1023M 5 -Xmx1024M 6 -XX:NewSize=512M 7 -XX:MaxNewSize=1020M 8 -XX:NewRatio=2 9 -XX:ParallelGCThreads=15 10 -XX:+DisableExplicitGC" [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重启Tomcat服务以后,能够实时监控JVM虚拟机资源进行验证
若是使用的是Tomcat8.0以前的版本,还需添加两个配置项,8.0之后的版本就被移除了:
-XX:PermSize=256M -XX:MaxPermSize=356M
配置文件中添加的各个配置项解释以下:
- -Xms:表示 JVM初始内存大小,也能够说是Java 初始化堆的大小,-Xms 与-Xmx 设成同样的值,避免 JVM 反复从新申请内存,致使性能大起大落,默认值为物理内存的 1/64;
- -Xmx:表示最大 Java 堆大小,当应用程序须要的内存超出堆的最大值时虚拟机就会提示内存溢出,而且致使应用服务崩溃,所以通常建议堆的最大值设置为可用内存的最大值的80%;
- -Xmn:设置JVM最小内存(128-256就够了,通常不设置);
- -XX:NewSize:设置新生代内存大小。 新生代,对象新建立的时候分配的内存空间,老生代在垃圾回收器回收事后该对象依然没有被回收,该对象就会移动到老生代;
- -XX:PermSize:设置持久代内存大小,用于存放静态文件,现在Java类、方法等。持久代对垃圾回收没有显著影响,可是有些应 用可能动态生成或者调用一些class,持久带也称为方法区,方法区存储每个java类的结构信息:好比运行时常量池,字段和方法数据,构造函数和普通方法的字节码内容以及类、实例、接口初始化时须要使用到的特殊方法等数据,JDK8中已经把持久代(PermGen Space) 干掉了,取而代之的元空间(Metaspace)。Metaspace占用的是本地内存,再也不占用虚拟机内存;
- -XX:MaxPermSize:设置最大值持久代内存大小,永久代不属于堆内存,堆内存只包含新生代和老年代;
- -XX:NewRatio:改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8);
- -XX:ParallelGCThreads 可用来增长并行度,须要多cpu;
- -XX:+DisableExplicitGC:关闭System.gc(),简单理解就是关闭java中的内存回收机制;
方法以下:
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml 53 <Service name="Catalina"> //在这行内容下添加如下内容 54 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads= "500" minSpareThread="4"/> 70 <Connector port="8080" protocol="HTTP/1.1" 71 executor="tomcatThreadPool" //调用刚才定义的规则,需手动添加 72 connectionTimeout="20000" 73 redirectPort="8443" /> 116 <!-- 117 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> //关闭AJPI接口本来存在,将其注释便可! 118 -->
Excutor重要参数说明:
- name:共享线程池的名字,这是connector为了共享线程池要引用的名字,该名称必须惟一
- namePrefix:在JVM上,每运行线程均可以有一个name字符串,这一属性为线程池中每一个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀后面,默认值为tomcat-exec-
- maxThreads:该线程池能够容纳的最大线程数,默认200
- minSpareThreads:Tomcat应该始终打开的最小不活跃线程数,默认25
Connector参数说明:- executor:表示使用参数值对应的线程池。
AJP是为Tomcat与HTTP服务器之间通讯而定制的协议,可以提供较高的通讯速度与效率。若是Tomcat前端放的Apache的时候,会使用到这个AJP链接器。
Tomcat支持的三种请求方式:
APR提供的主要功能模块包括:内存分配及内存池、原子操做、文件I/O、锁、内存映射、哈希表、网络I/O、轮询、进程及线程操做等等,经过采用APR,Tomcat能够得到高度可扩展性以及优越的性能,而且能够更好的与本地服务器技术集成,从而可使Tomcat做为一款通用的Web服务器使用,而不只仅做为轻量级应用服务器。在这种状况下,Java将再也不是一门侧重于后端的编程语言,也能够更多的用于成熟的Web服务器平台。
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" //修改本来的protocol内容 executor="tomcatThreadPool" //添加这行内容 connectionTimeout="20000" redirectPort="8443" /> [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh
查看其“catalina.out”日志,有如下字样,则表示是在nio接收请求处理方式,以下(因为上面对Tomcat日志进行了分割操做,因此须要查看test.2019-12-08.out日志文件):
启用这种凡是稍微麻烦一些,须要安装一些依赖(本人使用的CentOS 7.3版本)。
[root@localhost ~]#yum -y install apr-devel openssl-devel gcc make //安装所需依赖 [root@localhost ~]# tar zxf apr-1.5.2.tar.gz -C /usr/src [root@localhost ~]# cd /usr/src/apr-1.5.2/ [root@localhost apr-1.5.2]# ./configure --prefix=/usr/local/apr && make && make install //编译安装apr [root@localhost ~]# tar zxf apr-util-1.5.4.tar.gz -C /usr/src [root@localhost ~]# cd /usr/src/apr-util-1.5.4/ [root@localhost apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install //编译安装apr-util [root@localhost apr-util-1.5.4]# cd /usr/local/tomcat/bin/ [root@localhost bin]# tar zxf tomcat-native.tar.gz [root@localhost bin]# cd tomcat-native-1.2.18-src/native/ [root@localhost native]# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk1.8.0_211 && make && make install //编译安装tomcat自带的tomcat-native软件包 [root@localhost ~]# vim /etc/profile //编写环境变量,添加如下内容 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib [root@localhost ~]# source /etc/profile [root@localhost ~]# cd /usr/local/tomcat/ [root@localhost tomcat]# openssl genrsa -out ca.key 4096 //生成所需秘钥 [root@localhost tomcat]# openssl req -new -x509 -days 7304 -key ca.key -out ca.crt //经过所需秘钥生成数字证书 [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml //编写tomcat主配置文件 104 <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol" //更改端口为443 105 maxThreads="150" SSLEnabled="true" > 106 <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> //升级为http 2.0协议 107 <SSLHostConfig> 108 <Certificate certificateKeyFile="/usr/local/tomcat/ca.key" //更改秘钥存放路径 109 certificateFile="/usr/local/tomcat/ca.crt" //更改证书存放路径 110 type="RSA" /> 111 </SSLHostConfig> 112 </Connector> [root@localhost logs]# /usr/local/tomcat/bin/shutdown.sh [root@localhost logs]# /usr/local/tomcat/bin/startup.sh //从新启动tomcat服务 [root@localhost ~]# netstat -anpt | grep 443 //确认443端口在监听 tcp6 0 0 :::443 :::* LISTEN 17206/java
客户端使用https协议进行访问,如图:
[root@localhost ~]# cat /usr/local/tomcat/logs/test.2019-12-09.out | grep apr //根据查看tomat的日志来了解tomcat的工做模式
如图:
关于BIO模式,如今已经不多使用了,因此这里就不介绍了!
———————— 本文至此结束,感谢阅读 ————————