CentOS8中如何支配tomcat

windows系统中如何支配tomcat

tomcat的干系目录和文件的浸染

jsp使用telnettomcat安装与应用 Bootstrap

tomcat的管理界面如何利用

如何利用tomcat发布静态页面

tomcat动态页面的实现

tomcat多实例的实现

让nginx和tomcat协同事情

tomcat的运行模式

tomcat运行模式的调度

额外的优化参数

压力测试工具的利用

课程目标

能够知道什么是tomcat

能够在不同的系统上支配tomcat

能够记住tomcat的常用目录和文件

能够知道如何管理tomcat

能够在tomcat上支配静态网站和动态网站

能够将nginx和tomcat整合并实现多实例

能够对tomcat进行大略的调优

能够利用压力测试工具

Tomcat先容

Apache Tomcat最早是由Sun开拓的,在1999年被捐献给ASF(Apache 软件基金会 Apache Software Foundation),从属于Jakarta(雅加达)项目,现在已经独立为一个顶级项目。
由于Tomcat 技能前辈、性能稳定,同时也是一个免费的开放源代码的Web 运用做事器,因而深受Java 爱好者的喜好并得到了部分软件开拓商的认可,被很多企业普遍利用,也是开拓和调试JSP程序的首选。
成为目前比较盛行的Web 运用做事器。

官方网站:http://tomcat.apache.org/

tomcat的同类产品Resin 做事器

Resin是Caucho公司的产品,速率非常快。
可以显示动态内容,也可以显示静态内容,但是用户数量少,参考文档也少,利用起来不太方便,一旦涉及到干系文件和内容的更新,系统会自动重新支配并重启。

Jetty 做事器

Jetty是一个纯粹的基于Java的web做事器,也是一个开源项目。
架构大略,速率快,修正大略,但是对java的支持不如tomcat全面,

WebLogic 做事器

WebLogic 是BEA公司的产品,可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,个中 WebLogic Server 的功能特殊强大。
WebLogic 支持企业级的、多层次的和完备分布式的Web运用,并且做事器的配置大略、界面友好。
对付那些正在寻求能够供应Java平台所拥有的统统运用做事器的用户来说,WebLogic是一个十分空想的选择。
但是不开源且收费

JBoss、WebSphere

Apache nginx tomcat比较

Apache

优点:模块多,功能全面,性能稳定,适宜静态HTML

缺陷:配置相对繁芜,自身不支持动态页面

Nginx

优点:功能较多,负载均衡、反向代理等,速率比Apache快

缺陷:轻量级web做事器,功能不如Apache全面

Tomcat

优点:能够处理动态要求,可以独立于Apache运行,支持JSP

缺陷:对静态内容和大文件的支持有所欠缺

Apache是用C写的,Nigix是用C写的,Tomcat是用Java写的。
Tomcat是Apache的拓展,更本色的说是Java运用做事器,用于处理JSP后台措辞开拓的运用,紧张用于处理JSP动态网页。
Tomcat 做事器是一个免费的开放源代码的Web 运用做事器(紧张用于解析servlet/JSP,同时具备http做事),纯挚的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和HTTPS等,因此多数都是Apache+Tomcat+JavaSDK的集成。
严格的来说,Apache/Nginx 该当叫做「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」运用的容器(Ruby/Python 等其他措辞开拓的运用也无法直接运行在 Tomcat 上)。

安装支配Linux支配tomcat

下载软件包

tomcat:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.zip

jdk:https://www.oracle.com/java/technologies/javase-downloads.html

如何想利用tomcat9的话,官方哀求JRE的版本必须是8以上的,以是在安装之前,我们须要确认一下本机的版本,如果知足需求的话可以直接安装tomcat

[root@manage01 ~]# java -versionbash: java: 未找到命令...文件搜索失落败: Cannot update read-only repo#系统提示没有找到命令,意味着没有安装干系软件包,以是我们要安装[root@manage01 ~]# rpm -ivh jdk-13.0.2_linux-x64_bin.rpm 警告:jdk-13.0.2_linux-x64_bin.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEYVerifying... ################################# [100%]准备中... ################################# [100%]正在升级/安装...1:jdk-13.0.2-2000:13.0.2-ga ################################# [100%]安装完成后再次查看[root@manage01 ~]# java -versionjava version "13.0.2" 2020-01-14Java(TM) SE Runtime Environment (build 13.0.2+8)#java的运行环境,也叫jreJava HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing) #JVM java的虚拟机,可以使Java措辞在不同平台上运行时不须要重新编译。
Java措辞利用Java虚拟机屏蔽了与详细平台干系的信息,使得Java措辞编译程序只需天生在Java虚拟机上运行的字节码就可以了,这样就可以在多种平台上不加修正地运行。
很多措辞都采取了这种类似的思路,才使得他们具有可移植性,比如说python安装tomcat我们可以看到tomcat软件包的名称包含有apache字样,缘故原由很大略,它是由apache帮助的项目[root@manage01 ~]# unzip apache-tomcat-9.0.31.zip -d /opt/[root@manage01 ~]# cd /opt/[root@manage01 opt]# mv apache-tomcat-9.0.31 tomcat1解压完成,改个名就可以利用了,由于tomcat是一个二进制包,什么意思呢?就类似于我们下载游戏的时候的硬盘版,什么是硬盘版?解压就能玩,以是这个tomcat我们就压之后就可以利用了,不须要安装。
[root@manage01 bin]# pwd/opt/tomcat1/bin[root@manage01 bin]# sh startup.sh Cannot find ./catalina.shThe file is absent or does not have execute permissionThis file is needed to run this program启动tomcat[root@manage01 bin]# chmod +x catalina.sh [root@manage01 bin]# sh startup.sh Using CATALINA_BASE: /opt/tomcat1Using CATALINA_HOME: /opt/tomcat1Using CATALINA_TMPDIR: /opt/tomcat1/tempUsing JRE_HOME: /usrUsing CLASSPATH: /opt/tomcat1/bin/bootstrap.jar:/opt/tomcat1/bin/tomcat-juli.jarTomcat started.[root@manage01 webapps]# netstat -antp | grep javatcp6 0 0 127.0.0.1:8005 ::: LISTEN 46987/java tcp6 0 0 :::8080 ::: LISTEN 46987/java tomcat的两个端口8005 是关闭tomcat利用的端口,可以利用telnet serverip 8005 然后输入大写的SHUTDOWN关闭tomcat,以是建议变动端口 或者把引号中了命令改成不随意马虎影象的,个人推举改命令,由于改端口没有见告卖力网络安全的同事就会给你屏蔽掉………8080 连接端口8009 AJP协议利用的端口,tomcat的上风是处理jsp页面 但是对付图片,静态页面处理能力特殊差,相对付apache来说,那么这个时候怎么办 做个分流 jsp页面由tomcat完成,静态的页面 图片由AJP来完成,AJP是定向包协议 利用二进制格式来传输可读性文本,在server.xml配置文件中默认不生效

把稳tomcat的访问端口是8080

提示:如果之前系统中安装过java环境的话,可能会涌现即便安装完成新的jdk之后,利用java -version命令所查询的结果依然是老版本的,这个问题是由于环境变量引起的,以是须要修正环境变量设置文件[root@manage01 ~]# vim /root/.bash_profile #####javaJAVA_HOME=/usr/java/jdk-13.0.2#对应自己安装的版本PATH=$JAVA_HOME/bin:$PATH:$HOME/binCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexport PATH JAVA_HOME CLASSPATH CATALINA_HOMEWindows支配tomcat

tomcat:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31-windows-x64.zip

jdk:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html

安装jdk11

如果利用java -version看到的还是以前的提示,重启一下系统

安装tomcat

解压tomcat的压缩包并进入到bin目录下

server status 查看做事器的状态,包括linux主机的信息,tomcat的版本信息,资源利用情形等

manager app 管理网站

host manager 虚拟主机的管理

发布静态页面孔录解释

tomcat主目录

bin:命令,存放不同平台上启动或关闭的脚本BUILDING.txt&RUNNING.txt:利用文档,见告用户如何搭建conf:各种全局配置文件,最紧张的是server.xml和web.xml CONTRIBUTING.md:捐赠lib:tomcat须要用到的库,紧张是各种jar包LICENSE:容许logs:存放tomcat的日志NOTICE:关照信息README.md:读我文档RELEASE-NOTES:版本信息temp:临时文件 webapps:tomcat的web发布目录,类似于nginx或者apache的html目录 work:tomcat的事情目录,存放的是jsp编译后产生的.class文件及.java文件。
清空work目录,然后重启tomcat,可以达到打消缓存的浸染。

bin目录

bin目录下的文件紧张有两类,一个是Linux利用的.sh结尾的文件,其余一个是windows利用的.bat结尾的文件,

catalina tomcat的设置脚本,也可以启动&关闭tomcat

[root@manage01 bin]# sh catalina.sh helpUsing CATALINA_BASE: /opt/tomcat1Using CATALINA_HOME: /opt/tomcat1Using CATALINA_TMPDIR: /opt/tomcat1/tempUsing JRE_HOME: /usrUsing CLASSPATH: /opt/tomcat1/bin/bootstrap.jar:/opt/tomcat1/bin/tomcat-juli.jarUsage: catalina.sh ( commands ... )commands:debug Start Catalina in a debuggerdebug -security Debug Catalina with a security managerjpda start Start Catalina under JPDA debuggerrun Start Catalina in the current windowrun -security Start in the current window with security managerstart Start Catalina in a separate windowstart -security Start in a separate window with security managerstop Stop Catalina, waiting up to 5 seconds for the process to endstop n Stop Catalina, waiting up to n seconds for the process to endstop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still runningstop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still runningconfigtest Run a basic syntax check on server.xml - check exit code for resultversion What version of tomcat are you running?Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined[root@manage01 bin]# sh catalina.sh stop[root@manage01 bin]# sh catalina.sh helpstartup 启动脚本shutdown 关闭脚本

conf目录

这个目录下紧张存放的是与tomcat设置干系的文件,常用的配置文件紧张包含server.xml 可以设置端口号、设置域名或IP、默认加载的项目、要求编码 web.xml 可以设置tomcat支持的文件类型 context.xml 可以用来配置数据源之类的 tomcat-users.xml 用来配置管理tomcat的用户与权限 Catalina 此目录下可以设置默认加载的项目

webapps目录

ROOT tomcat默认的页面docs 利用解释文档examples 例子--tomcat首页中的examples按钮对应的内容host-manager 首页Host Manager按钮对应的内容manager 首页 Manager App按钮对应的内容

tomcat干系配置文件简介

server.xml

元素名

属性

阐明

server

port

指定一个端口,这个端口卖力监听关闭tomcat的要求

shutdown

指定向端口发送的命令字符串

service

name

指定service的名字

Connector(表示客户端和service之间的连接)

port

指定做事器端要创建的端口号,并在这个断口监听来自客户真个要求

minProcessors

做事器启动时创建的处理要求的线程数

maxProcessors

最大可以创建的处理要求的线程数

enableLookups

如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户真个实际主机名,若为false则不进行DNS查询,而是返回其ip地址

redirectPort

指定做事器正在处理http要求时收到了一个SSL传输要求后重定向的端口号

acceptCount

指定当所有可以利用的处理要求的线程数都被利用时,可以放到处理行列步队中的要求数,超过这个数的要求将不予处理

connectionTimeout

指定超时的韶光数(以毫秒为单位)

Engine(表示指定service中的要求处理引擎,吸收和处理来自Connector的要求)

defaultHost

指定缺省的处理要求的主机名,它至少与个中的一个host元素的name属性值是一样的

Context(表示一个web运用程序,常日为WAR文件,关于WAR的详细信息见servlet规范)

docBase

运用程序的路径或者是WAR文件存放的路径

path

表示此web运用程序的url的前缀,这样要求的url为http://localhost:8080/path/

reloadable

这个属性非常主要,如果为true,则tomcat会自动检测运用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变革,自动装载新的运用程序,我们可以在不重起tomcat的情形下改变运用程序

host(表示一个虚拟主机)

name

指定主机名

appBase

运用程序基本目录,即存放运用程序的目录

unpackWARs

如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行运用程序

Logger(表示日志,调试和缺点信息)

className

指定logger利用的类名,此类必须实现org.apache.catalina.Logger 接口

prefix

指定log文件的前缀

suffix

指定log文件的后缀

timestamp

如果为true,则log文件名中要加入韶光,如下例:localhost_log.004-mm-dd.txt

Realm(表示存放用户名,密码及role的数据库)

className

指定Realm利用的类名,此类必须实现org.apache.catalina.Realm接口

Valve(功能与Logger差不多,其prefix和suffix属性阐明和Logger 中的一样)

className

指定Valve利用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录运用程序的访问信息

directory

指定log文件存放的位置

pattern

有两个值,common办法记录远程主机名或ip地址,用户名,日期,第一行要求的字符串,HTTP相应代码,发送的字节数。
combined办法比common办法记录的值更多

web.xml

默认Web运用的首页文件的设置

报错文件的设置

session 会话过期韶光的设置,单位是分钟

servlet的设置(Java Servlet的简称,称为小做事程序或做事连接器,用Java编写的做事器端程序,具有独立于平台和协议的特性,紧张功能在于交互式地浏览和天生数据,天生动态Web内容。
)

tomcat-users.xml

管理用户配置文件

rolename 定义角色,不同的角色管理权限不同,相称于组

manager-gui 许可访问html接口(即URL路径为/manager/html/)manager-script 许可访问纯文本接口(即URL路径为/manager/text/)manager-jmx 许可访问JMX代理接口(即URL路径为/manager/jmxproxy/)manager-status 许可访问Tomcat只读状态页面(即URL路径为/manager/status/)admin-gui 许可访问html管理界面admin-script 许可访问文本管理界面

user 定义用户名

username 定义用户名password 设置密码roles 属于那些角色/组

登录管理tomcat

在提示登录的界面点击取消,会看到提示

[root@manage01 ~]# vim /opt/tomcat1/conf/tomcat-users.xml <role rolename="manager-gui"/><role rolename="manager-script"/><role rolename="manager-jmx"/><role rolename="manager-status"/><role rolename="admin-gui"/><role rolename="admin-script"/><user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>

设置完成之后重启tomcat就可以登录后台管理页面了,个中在manager app中紧张管理的是网站是否发布的操作,start=发布网站

stop=停滞发布网站,reload=重新加载,undeploy=卸载/删除网站(慎用),expire session=会话过期韶光

与war文件支配干系的设置,包括定义war文件存放的位置,和上传war文件

war是一个可以直接运行的web模块,常日用于网站,打包支配。
以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相称于发布了。
war包是Sun提出的一种web运用程序格式,与jar类似,是很多文件的压缩包。
war包中的文件按照一定目录构造来组织。
大略来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。
一个war包可以理解为是一个web项目,里面是项目的所有东西。

configuration 定义TLS(安全传输协议)配置文件

diagnostics 检讨网站在启动,重新加载或卸载时,是否造成内存溢出,这个操作会触发垃圾回收机制,生产环境中慎用

TLS connector configuration diagnostics 加密诊断,可以帮助用户诊断加密是否有问题

firefox设置中文

[root@manage01 ~]# dnf install ibus -y

添加完全的中文环境后重启

重启完成为浏览器添加中文后重启浏览器

再次访问tomcat管理界面就会变成中文

发布静态页面

[root@manage01 webapps]# pwd/opt/tomcat1/webapps[root@manage01 webapps]# mkdir test[root@manage01 webapps]# echo '<%= new java.util.Date() %>' > test/index.jsp

利用浏览器访问http://ip:8080/test,每次刷新韶光都会改变

发布动态页面

我们知道tomcat是用来发布jsp网站的,jsp的网站,页面俊秀还安全,上节课我们已经知道如何发布静态页面了,本节课我们一起来看一下如何发布动态页面,我们通过jpress一个利用java开拓的建站软件来实现jsp页面

jpress下载地址:http://jpress.io/download

step1 准备jsp页面

[root@manage01 ~]# mv jpress-v3.2.1.war jpress.war[root@manage01 ~]# cp jpress.war /opt/tomcat1/webapps/#重启tomcat[root@manage01 ~]# cp jpress.war /opt/tomcat1/webapps/[root@manage01 ~]# sh /opt/tomcat1/bin/shutdown.sh [root@manage01 ~]# sh /opt/tomcat1/bin/startup.sh #重启之后tomcat会自己将这个war的压缩包解压,天生一个同名的目录

step2 准备数据库

[root@manage01 yum.repos.d]# dnf install mariadb mariadb-server -y[root@manage01 yum.repos.d]# systemctl restart mariadb.service [root@manage01 ~]# mysql -u root -pEnter password: MariaDB [(none)]> create database jpress charset utf8;MariaDB [(none)]> grant all on jpress. to jpress@'localhost' identified by '123456';

step3 安装jpress

tomcat多实例

tomcat是一个单进程多线程的软件,在很早之前,我们都认为这种模式挺好的,由于早些年的CPU都是单核的,但是现在都是多核心的CPU了,如果还是一个进程的话呢,就比较摧残浪费蹂躏CPU资源,以是本节课我们要谈论下如果多开几个tomcat,也便是我们本节课要实现的是tomcat的多实例,这样可以提高资源的利用率,在之前的课程中我们提到过tomcat有三个端口8005 8009 8080,个中8005是用来关闭tomcat的端口,8080是访问端口,8009是ajp协议利用的端口,如果我想在一台机器上开启多个tomcat的话,首先要担保的便是端口不能冲突,否则开不了。

step1 将之前支配好的tomcat复制一份

[root@manage01 webapps]# cd /opt/[root@manage01 opt]# lstomcat1[root@manage01 opt]# cp -r tomcat1 tomcat2[root@manage01 opt]# lstomcat1 tomcat2

step2 修正刚刚支配完成的tomcat的干系配置文件

[root@manage01 opt]# vim tomcat2/conf/server.xml <Server port="8006" shutdown="SHUTDOWN"><Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8444" />#修正端口

step3 启动tomcat

[root@manage01 opt]# sh /opt/tomcat1/bin/startup.sh [root@manage01 opt]# sh /opt/tomcat2/bin/startup.sh [root@manage01 opt]# netstat -atnpActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 127.0.0.1:8005 ::: LISTEN 16801/java tcp6 0 0 127.0.0.1:8006 ::: tcp6 0 0 :::8080 ::: LISTEN 16801/java tcp6 0 0 :::8081 ::: LISTEN 17776/java

step4 打开浏览器访问测试

把稳:如果是不同用户利用的话,考虑到安全方面的问题,记得修正tomcat的用户管理文件。
[root@manage01 conf]# pwd/opt/tomcat2/conf[root@manage01 conf]# vim tomcat-users.xml <role rolename="manager-gui"/><role rolename="manager-script"/><role rolename="manager-jmx"/><role rolename="manager-status"/><role rolename="admin-gui"/><role rolename="admin-script"/><user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
nginx+tomcat

之前我们在访问的时候利用的都是类似http://serverip/test或者http://serverip/jpress这种字样的URL,利用起来比较麻烦,以是呢,我们可以将tomcat和nginx结合在一起

step1 调度tomcat1

[root@manage01 ~]# cd /opt/tomcat1/webapps/[root@manage01 webapps]# mv ROOT tomcat[root@manage01 webapps]# mv jpress ROOT

step2 调度tomcat2

[root@manage01 ~]# cd /opt/tomcat2/webapps/[root@manage01 webapps]# mv ROOT tomcat[root@manage01 webapps]# mv test ROOT利用rewrite实现

step1 支配nginx

[root@manage01 ~]# dnf install nginx -y

step2 调度nginx配置文件

[root@manage01 ~]# vim /etc/nginx/nginx.conf[root@manage01 ~]# sed -i '/#/d' /etc/nginx/nginx.conf[root@manage01 ~]# sed -i '/^$/d' /etc/nginx/nginx.confserver {listen 80;listen [::]:80;server_name www.a.com;location / {rewrite ^/$ http://127.0.0.1:8080/jpress break;}}server {listen 80;listen [::]:80;127.0.0.1server_name www.b.com;location / {rewrite ^/$ http://127.0.0.1:8081/test break;}}[root@manage01 ~]# systemctl restart nginx

step 3 修正测试机的hosts文件

[root@manage01 conf]# vim /etc/hosts192.168.98.200 www.a.com192.168.98.200 www.b.com

step4 打开浏览器直接访问域名测试

利用反向代理实现

调度nginx配置文件

user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules/.conf;events {worker_connections 1024;}http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;include /etc/nginx/conf.d/.conf;server {listen 80;listen [::]:80;server_name www.a.com;location / {proxy_pass http://127.0.0.1:8080;}}server {listen 80;listen [::]:80;server_name www.b.com;location / {proxy_pass http://127.0.0.1:8081;}}}tomcat调优

tomcat的优化可以提高网站的并发能力,表示个人的代价,tomcat在java项目中的利用率非常高,以是在生产环境对tomcat的优化也就变得非常必要了,一样平常情形下tomcat的优化紧张从两个方面入手,一个是自身配置,另一个是tomcat所运行的jvm虚拟机的优化,优化的事情可以从安装完tomcat就开始动手

AJP优化

在前面的课程中我们提到了一个叫AJP的协议,同时我们也知道了这个AJP的浸染,但是在生产环境中一样平常利用的是nginx+tomcat的架构,以是大多数时候用不到AJP协议,以是我们可以禁用它,而在我们的server.xml文件中这个AJP默认便是禁用的,如果是其它版本最好看一下

[root@manage01 conf]# vim /opt/tomcat1/conf/server.xml <!--<Connector protocol="AJP/1.3"address="::1"port="8009"redirectPort="8443" />-->###运行模式优化

tomcat的运行模式有3种:

bio

性能非常低下,没有经由任何优化处理和支持,适用于连接数目比较小且固定的架构,这种办法对做事器资源哀求比较高,并发局限于运用中,JDK1.4以前的唯一选择,但程序直不雅观大略易理解。

nio

nio(new I/O),是Java SE 1.4及后续版本供应的一种新的I/O操作办法它拥有比传统I/O操作(bio)更好的并发运行性能。
Tomcat9默认利用nio运行模式。
适用于连接数目多且连接比较短(轻操作)的架构,比如谈天做事器,并发局限于运用中,编程比较繁芜。
AIO(NIO2)利用于连接数目多且连接比较长(重操作)的架构,比如相册做事器,充分调用OS参与并发操作,编程比较繁芜,JDK7开始支持。

apr

安装起来最困难,但是从操作系统级别来办理异步的IO问题,大幅度的提高性能

进入tomcat的做事器状态页面查看默认的模式

如果默认利用的是bio模式

设置利用nio模式[root@manage01 logs]# vim /opt/tomcat1/conf/server.xml<Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443" />apr

APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,紧张为上层的运用程序供应一个可以超过多操作系统平台利用的底层支持接口库。
可以大大地提高Tomcat对静态文件的处理性能。
也是在Tomcat上运行高并发运用的首选模式。

系统自带的软件包不是最新的,且短缺干系软件包,以是我们选择源码包安装

所需软件包

apr-1.7.0.tar.gz 主程序包 包含了通用开拓组件

apr-iconv-1.2.2.tar.gz 用于实现iconv编码

apr-util-1.6.1.tar.gz 额外的开拓组件

tomcat-native.tar.gz 关联tomcat和apr的组件

arp干系软件包下载 https://mirrors.cnnic.cn/apache/apr/

tomcat-native在tomcat安装目录的bin下

支配apr环境

step1 环境准备

[root@manage01 ~]# dnf install -y apr-devel openssl-devel gcc make expat-devel libtool

step2 安装apr主程序包

[root@manage01 ~]# tar fx apr-1.7.0.tar.gz [root@manage01 ~]# cd apr-1.7.0/[root@manage01 ~]# ./configure --prefix=/usr/local/apr[root@manage01 apr-1.7.0]# make -j4 && make install

step3 安装apr-iconv

[root@manage01 ~]# tar fx apr-iconv-1.2.2.tar.gz [root@manage01 ~]# cd apr-iconv-1.2.2/[root@manage01 ~]# ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-iconv[root@manage01 apr-iconv-1.2.2]# make -j4 && make install

step4 安装apr-util

[root@manage01 ~]# tar fx apr-util-1.6.1.tar.gz [root@manage01 ~]# cd apr-util-1.6.1/[root@manage01 ~]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv[root@manage01 apr-util-1.6.1]# make -j4 && make install

step5 安装tomcat-native

[root@manage01 ~]# cd /opt/tomcat1/bin/[root@manage01 bin]# tar fx tomcat-native.tar.gz [root@manage01 bin]# cd tomcat-native-1.2.23-src/native[root@manage01 tomcat-native-1.2.23-src]# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk-13.0.2[root@manage01 tomcat-native-1.2.23-src]# make -j4 && make install

step5 修正并加载环境变量

[root@manage01 ~]# echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/libexport LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib' >> /etc/profile[root@manage01 ~]# source /etc/profile

step6 修正tomcat配置文件

[root@manage01 ~]# vim /opt/tomcat1/conf/server.xml protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"redirectPort="8443" />

step7 测试

#为了避免滋扰先实行关闭[root@manage01 ~]# sh /opt/tomcat1/bin/shutdown.sh #测试[root@manage01 ~]# sh /opt/tomcat1/bin/catalina.sh run#如果没有问题可以看到14-Mar-2020 00:22:23.894 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-apr-8080"]

把稳:如果非root用户启动失落败,把apr环境变量在当前用户的.bash_profile中写一份[root@manage01 ~]# echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/libexport LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib' >> /root/.bash_profile[root@manage01 ~]# source /root/.bash_profile其它优化参数

[root@manage01 logs]# vim /opt/tomcat1/conf/server.xml <Connector port="8080" protocol="HTTP/1.1 enableLookups="false" maxThreads="1000" minSpareThreads="100" acceptCount="900" disableUploadTimeout="true" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443"compression="on" compressionMinSize="1024" useSendfile="false" noCompressionUserAgents="mozilla, traviata" compressibleMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript " />maxThreads:最大线程数,默认150。
增大值避免行列步队要求过多,导致相应缓慢。
minSpareThreads:最小空闲线程数。
acceptCount:当处理要求超过此值时,将后来要求放到行列步队中等待。
disableUploadTimeout:禁用上传超时时间connectionTimeout:连接超时,单位毫秒,0代表不限定URIEncoding:URI地址编码利用UTF-8enableLookups:关闭dns解析,提高相应韶光compression:启用压缩功能compressionMinSize:最小压缩大小,单位BytecompressibleMimeType :压缩的文件类型官方参数文档:http://tomcat.apache.org/tomcat-9.0-doc/config/http.html
压力测试工具的利用

Apache JMeter是Apache组织开拓的基于Java的压力测试工具。
用于对软件做压力测试,它最初被设计用于Web运用测试,但后来扩展到其他测试领域。
它可以用于测试静态和动态资源,例如静态文件、Java 小做事程序、CGI 脚本、Java 工具、数据库、FTP 做事器, 等等。
JMeter 可以用于对做事器、网络或工具仿照巨大的负载,来自不同压力种别下测试它们的强度和剖析整体性能

JMeter的浸染

能够对HTTP和FTP做事器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。

完备的可移植性和100% 纯java。

完备多线程 框架许可通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。

精心的GUI设计许可快速操作和更精确的计时。

缓存和离线剖析/回放测试结果。

下载地址:http://jmeter.apache.org/download_jmeter.cgi

JMeter安装利用

将下载好的压缩包在windows中解压(须要先安装JDK),解压后进入到bin目录双击jmeter.bat,等待启动

设置中文

创建测试

添加线程组,利用线程仿照用户的并发

1000个线程循环10次,tomcat会收到10000个要求

添加并设置http要求

添加监控

启动测试

查当作果

标签:解释是要求类型,如Http,FTP等要求。
样本总数:也便是图形报表中的样本数目,统共发送到做事器的样本数目。
均匀值:也便是图形报表中的均匀值,是总运行韶光除以发送到做事器的要求数。
居中的数值:也便是图形报表中的中间值,是代表韶光的数字,有一半的做事器相应韶光低于该值而另一半高于该值。
90%&95%&99%:有多少要求的相应韶光比给出的数值还要小。
最小:是代表韶光的数字,是做事器相应的最短韶光。
最大: 是代表韶光的数字,是做事器相应的最永劫光。
非常%:要求的缺点百分比。
吞吐量:也便是图形报表中的吞吐量,这里是做事器每单位韶光处理的要求数,把稳查看是秒或是分钟。
发送/吸收KB/sec:是每秒钟发送/吸收的字节数。

(韶光的单位为ms)

通过上面测试可以看出,tomcat在不做任何调度时,吞吐量为587次/秒。
这个吞吐量跟接口的业务逻辑关系很大,如果业务逻辑繁芜,须要比较永劫光打算的,可能吞吐量只有几十次/秒,我这里测试的时候没有添加任务业务逻辑,才会涌现吞吐量为587次/秒的情形。
这里的吞吐量最好是经由多次测试取均匀值,由于单次测试具有一定的随机性

调度tomcat线程池

[root@manage01 bin]# vim /opt/tomcat1/conf/server.xml <Connector port="8080" protocol="HTTP/1.1" maxThreads="1000" minSpareThreads="200" prestartminSpareThreads="true" connectionTimeout="20000" redirectPort="8443" />#调度最大线程数为1000,最小为200,这个线程的数量要反复调度,然后比拟测试结果,找出一个适宜自己的值

调度行列步队

[root@manage01 bin]# vim /opt/tomcat1/conf/server.xml <Connector port="8080" protocol="HTTP/1.1" maxThreads="1000" minSpareThreads="200" prestartminSpareThreads="true" maxQueueSize="100" connectionTimeout="20000" redirectPort="8443" />默认情形下,要求发送到tomcat,如果tomcat正忙,那么该要求会一贯等待。
这样虽然可以担保每个要求都能要求到,但是要求韶光就会边长。
有些时候,我们也不一定哀求要求一定等待,可以设置最大等待行列步队大小,如果超过就不等待了。
这样虽然有些要求是失落败的,但是要求韶光会虽短。
范例的是12306。

3分钟理解打算机发展历史-组团学12306。

参数先容可以辞官网查看:https://tomcat.apache.org/tomcat-9.0-doc/config/executor.html

章总结

tomcat的安装支配

tomcat的干系文件先容

tomcat的管理

静态页面和动态页面的发布

如何实现tomcat多实例

如何将tomcat和nginx整合

tomcat的调优及压力测试工具的利用

重点:tomcat如何安装、干系目录的浸染、如何利用tomcat发布网站,后台管理功能的利用,多实例的实现,如何与nginx整合,tomcat的调优及压力测试工具的利用

难点:不同操作系统的安装,干系文件的浸染,利用tomcat发布页面,与nginx的整合方法,调优的办法及压力测试工具

本日东西超级多,我看有几个能从头到尾看完的,哈哈哈哈哈