Tomcat摆设、优化、压力测试

打印 上一主题 下一主题

主题 1639|帖子 1639|积分 4917

目次
Tomcat概念
焦点组件
Web容器
Web服务器之间解析请求的区别
Apache HTTP Server
Nginx
Tomcat
Servlet容器
JSP容器
字节码文件
Tomcat表面处理请求的过程
Tomcat底层处理请求的过程
内部布局
Tomcat摆设
JRE情况设置
PATH冒号位置的区别
安装Tomcat
目次布局
常见端口号
发布站点
JMeter压力测试
Tomcat优化
优化前后对比


Tomcat概念



  • 免费、开源的Web应用服务器
  • Apache软件基金会(Apache Software Foundatio)Jakarta项目中的一个焦点项目
  • 由Apache、Sun和一些公司及个人共同开辟而成
  • 深受Java爱好者的喜爱,并得到部分软件开辟商的承认
  • 目前比力流行的Web应用服务器
焦点组件

Tomcat 由一系列的组件构成,此中焦点的组件有三个:
web容器:完成web服务器的功能。
Servlet容器:名字为catalina,用于处理Servlet代码。
JSP 容器:用于将 JSP动态网页翻译成Servlet代码。

Web容器

Web 容器负责接收所有HTTP请求,根据请求的URL调用对应的Servlet映射来确定哪个Servlet来处理特定请求,或直接解析静态资源,然后将结果返回给客户端
Web服务器之间解析请求的区别

Apache HTTP Server

Apache HTTP Server服务器本身是可以独立处理静态资源请求,而对于动态资源的解析,Apache必要通过开启mod_php等模块才气动态请求
Nginx

Nginx服务器本身也可以独立处理静态资源请求,对于动态资源的解析,Nginx必要借助FastCGI等接口大概反向代理,将动态资源请求通报给后端服务器来解析,好比php-fpm、Node.js等服务器
Tomcat

Tomcat可以独立处理静态资源和动态资源的请求,Tomcat内置了Servlet和JSP的解析引擎,无需借助额外的模块或接口解析动态请求。
在实际摆设中,因为Tomcat的静态解析效率不高,所以通常会将静态资源的处理交给专门的前端服务器,好比 Apache 或 Nginx,而将动态内容交给 Tomcat 这样的应用服务器,实现动静分离。

Servlet容器

在Java程序运行的时候,必要一个根本的JRE(Java运行时情况)情况,JRE不是一个单独的历程,而是一个容器,Tomcat是跑在JRE容器的情况里运行的
Servlet有一个名字:Catalina(卡特琳娜),负责加载和执行Servlet代码,并处理Servlet相干的请求。
好比将JSP代码通过JSP容器翻译成Servlet代码,然后由Servlet容器解析,最后将解析的结果返回Web容器,再由Web容器返回给用户

JSP容器

负责将JSP文件中的静态代码和Java代码编译成Servlet类。
一旦JSP文件被编译为Servlet类,它会被编译成字节码文件(.class)并可以在Servlet容器中执行。
JSP页面中包含的Java代码必要被编译成字节码,以便在Servlet容器中运行。这样做可以确保在每次请求时不必要重新解析和编译JSP页面,而是直接执行已经编译好的字节码
字节码文件

什么是字节码文件,好比使用记事本编写一个使用Main方法执行输出语句"HelloWord"的.java文件
然后在命令行使用javac命令对该文件进行编译,得到了.class为后缀的字节码(bytecode)文件。
这个.class文件就是字节码文件,可以在任何支持了JVM(Java假造机)的平台上运行,而无需重新编译
总结
字节码文件是Java代码终极编译的目标,它允许Java程序在JVM(Java假造机)上跨平台运行。

Tomcat表面处理请求的过程




  • tomcat默认端口号:8080

  • 当用户在浏览器中输入服务器的IP地点和端口向客户端发送一个请求
  • Tomcat服务器收到请求后通过JSP容器将请求页面的代码转换为Servlet代码
  • 再转交给Servlet容器,Servlet基于JRE(Java运行时情况)解析请求
  • 如果请求的内容涉及到数据库必要在Servlet代码中连接数据库获取数据
  • 最后返回给用户
   如果该服务器实现了动静分离,好比Nginx和Tomcat,当用户向Nginx的80端口发送动态解析请求时,Nginx通过反向代理将动态请求通报给Tomcat,由Tomcat处理后返回给Nginx再返回给用户
  Tomcat底层处理请求的过程



  • 当用户通过浏览器向服务器特定端口发送请求
  • Connector接收请求后,交给Container中的Engine容器
  • 通过用户输入的域名判断要访问的站点
  • 确定了要访问的站点就会将找到对应Host
  • Host收到请求后再交给Context
  • 由Context当中的Servlet将代码进行解析
  • 解析完成后,将请求返回给上层容器,直到返回给Connector,由连接器返回给用户
内部布局

容器

说明

Tomcat

可以看作是一个Tomcat服务器
Service

Tomcat服务器里有一个Service容器,每一个Tomcat只有一个Service容器,是其他子容器的聚集
Connector

Service的子容器,当用户在浏览器中向Tomcat发起请求,Tomcat通过Connector(连接器)接收请求,Tomcat可以有多个连接器,每个连接器可以监听特定的端口。如果要在Tomcat摆设基于端口的假造主机,就要添加连接器,每个连接器监听不同端口
Container

Service的子容器,最多只能有一个Container,负责终极为用户提供代码的解析,但是Container又包含了很多子容器
Engine

Container的子容器,最多只能有一个Engine,负责管理基于域名的假造主机
Host

Engine的子容器,Host可以有多个,每个Host都是一个假造主机
Context

上下文,负责每一个Host对应站点的代码运行
Servlet

Context可以包含多个Servlet,负责处理来自客户端的HTTP请求,执行一些逻辑(好比业务逻辑、数据处理等),然后生成符合HTTP尺度的相应返回给客户端。
必要留意的是,Tomcat只支持基于端口和基于域名的假造主机,而没有基于IP的假造主机。

Tomcat摆设

导入jdk的rpm软件包,使用rpm -ivh jdk-8u171-linux-x64.rpm命令安装jdk情况
装完可以使用java -version命令测试是否正常表现版本信息,还可以在/usr/下看到名为java的文件夹,就是安装目次
JRE情况设置

为了确保Java能够正常运行,必要设置设置情况变量,在全局情况变量文件中使用export将Java家目次的路径和类库路径的添加为全局变量
并且将Java命令添加到体系查找命令的$PATH变量中,也就是echo $PATH表现的多个路径,体系会在这些路径下查找和用户输入内容所匹配的命令
最后使用source命令重新加载存放情况变量的文件,然后再输出$PATH变量的值,就可以看到Java命令的路径已经被追加到末尾了
此时JRE(Java运行时情况)就设置好了
  1. [root@localhost ~]# vim /etc/profile
  2. export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
  3. export CLASSPATH=$JAVA_HOME/lib
  4. export PATH=$PATH:$JAVA_HOME/bin
  5. [root@localhost jdk1.8.0_171-amd64]# source /etc/profile
  6. [root@localhost jdk1.8.0_171-amd64]# echo $PATH
  7. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/java/jdk1.8.0_171-amd64/bin
复制代码
PATH冒号位置的区别

这里使用的PATH变量不是新建了一个PATH变量,而是调用了体系已有的变量,冒号(:)表现在该变量的值末尾,追加指定值,这里追加了Java命令的路径,让体系可以在终端中识别Java命令
如果将PATH变量的冒号放到末尾去追加行不可呢?
就酿成了:export PATH=$JAVA_HOME/binPATH
实际上是可行的,但是实现的效果相反,好比当你执行了export PATH=$JAVA_HOME/binPATH
这个命令会将$JAVA_HOME/bin的路径放在现有$PATH变量的开头,就不是追加了,但是$PATH会把$JAVA_HOME/bin放在$PATH的最前面,在体系识别命令_时,优先搜刮Java命令
如果当你执行了export PATH=$PATHJAVA_HOME/bin,则会把$JAVA_HOME/bin放到$PATH变量的末尾,当体系识别命令时,会先搜刮现有路径再搜刮$JAVAHOME/bin

安装Tomcat

导入Tomcat的tar.gz包,由于该包是直接解压使用的,所以使用tar zxvf apache-tomcat-9.0.8.tar.gz命令直接解压,然后通过mv apache-tomcat-9.0.8 /usr/local/tomcat命令将该包移动到/usr/local/下,重命名为tomcat
目次布局

进入tomcat目次,使用ll命令可以查看tomcat的目次布局

目次或文件

说明

bin

用于存放Tomcat的可执行文件,好比启动和制止脚本 (startup.sh、shutdown.sh)
以及其他管理和维护 Tomcat 服务器的工具
conf

用于存放Tomcat的设置文件
lib

用于存放Tomcat运行时必要Java类库和依赖的JAR文件
logs

用于存储Tomcat的日志文件
temp

用于存放 Tomcat 运行时生成的暂时文件,好比编译后的 JSP 文件等。
webapps

存放Tomcat的默认web应用程序摆设目次,将你的WAR包放入后,Tomcat 会自动解压并运行这些应用。
work

用于存放Tomcat运行时生成的servlet编译文件。
LICENSE

这是 Tomcat 的允许证文件,包含了软件使用和分发的允许条款。
RELEASE-NOTES

这是该版本 Tomcat 的发行说明,形貌了新功能、改进和已知问题等信息。
RUNNING.txt

这个文件提供了关于如何运行 Tomcat 服务器的简要说明和提示。
常见端口号

打开/usr/local/tomcat/conf/server.xml文件,在Tomcat的设置文件中可以看到多个容器的标签内都有Port的属性
这个Port属性就定义了在某个阶段监听的端口号,下面一一列出重要的端口号
端口号

说明

8005

只能在本地用命令行关闭Tomcat服务的端口
8009

Tomcat服务器通过Connector连接器组件与客户程序建立连接使用的端口
8080

Tomcat的web服务端默认端口号(HTTP)
8443

访问Tomcat的HTTPS的端口
发布站点

这里我们要通过基于域名的假造主机发布两个站点,先创建存放第一个站点的目次www,新建index.jsp文件,添加www.benet.com内容
再创建bbs站点,步调同上
  1. [root@localhost tomcat]# cd webapps/
  2. [root@localhost webapps]# mkdir www
  3. [root@localhost webapps]# cd www
  4. [root@localhost www]# vim index.jsp
  5. www.benet.com
  6. [root@localhost www]# cd ..
  7. [root@localhost webapps]# mkdir bbs
  8. [root@localhost webapps]# cd bbs
  9. [root@localhost bbs]# vim index.jsp
  10. bbs.benet.com
  11. 打开配置文件
  12. [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
复制代码
在tomcat的设置文件中添加站点,在第148行可以看到Host容器,修改name属性的域名为www.benet.com,添加Context(上下文)标签,指定该域名的网页文件位置,开启自动重载,然后再创建一个Host标签,修改name等参数,用于第二个站点的发布


  • Context标签内的path属性的作用是:假造路径,指定了在Web服务器上访问该Web应用程序的路径,如果 path 设置为 ""(空),则该应用程序将作为根应用程序处理。如果设置为 "/myapp",则用户访问http://www.benet.com/myapp地点时,该站点才会可用
  • reloadable:当类的内容发行改动时,会自动重载,而不必要人为重启
  1.       <Host name="www.benet.com"  appBase="webapps"
  2.             unpackWARs="true" autoDeploy="true">
  3.             <Context docBase="/usr/local/tomcat/webapps/www" path="" reloadable="true" />
  4.             <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  5.                prefix="www_access_log" suffix=".txt"
  6.                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  7.       </Host>
  8.       <Host name="bbs.benet.com"  appBase="webapps"
  9.             unpackWARs="true" autoDeploy="true">
  10.             <Context docBase="/usr/local/tomcat/webapps/bbs" path="" reloadable="true" />
  11.         
  12.             <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  13.                prefix="bbs_access_log" suffix=".txt"
  14.                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  15.       </Host>
复制代码
首先关闭防火墙,允许tomcat流量通过。最后运行tomcat的bin目次下的startup.sh,启动tomcat
  1. [root@localhost tomcat]# systemctl stop firewalld
  2. [root@localhost tomcat]# cd bin/
  3. [root@localhost bin]# ./startup.sh
  4. [root@localhost bin]# netstat -anpt | grep java
  5. tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      19470/java         
  6. tcp6       0      0 :::8009                 :::*                    LISTEN      19470/java         
  7. tcp6       0      0 :::8080                 :::*                    LISTEN      19470/java
复制代码
使用Linux或Windows主机都可以测试,但前提是在主机上的Hosts文件添加对应解析条目
  1. 192.168.10.101 www.benet.com bbs.benet.com
复制代码
使用域名:端口号的方式来访问Tomcat服务器



JMeter压力测试

JMeter是基于JAVA开辟的压力测试软件。用于在Windows体系上运行,在短时间内向服务器发送大量请求,来测试服务器压力承受的本事
打开一台Win10假造机或直接在宿主机上测试,解压apachejmeter31.zip软件包,进入bin目次下,双击运行jmeter.bat批处理文件启动该工具
首先添加一个用户线程组

线程数:每个线程代表一个假造用户,将线程组的历程数设置为100,JMeter将会模仿100个并发用户同时对目标体系进行请求,这里用我们使用4000个线程
Ramp-up Period(in seconds):每秒钟,1个线程发送多少个请求
那么请求总量就是4000 * 20 = 80000,也就是说总共向服务器在短时间内发送80000个请求让服务器来相应

右键测试操持是针对整个测试操持添加聚合陈诉和图形结果,用于表现整个测试操持的测试结果


添加测试的请求

写入要测试的域名和端口号

测试该线程组时时可以把针对整个测试操持的图形结果和聚合陈诉删除,右键线程组,添加只针对线程组的聚合陈诉和图形结果
终极效果如下

然后右键线程组,选Start

如果是第一次测试,会提示你保存该线程组,方便以后使用,然后压力测试就已经开始了
当上方的箭头图标变绿了以后,代表测试已经竣事,可以查看结果陈诉

打开聚合陈诉会表现出测试结果,把优化前的测试结果截图保存,用于和一会优化后的结果对比

Tomcat优化

打开tomcat设置文件
  1. [root@localhost ~]# cd /usr/local/tomcat/conf/
  2. [root@localhost conf]# vim server.xml
复制代码
将连接器改为以下内容,进行优化
  1. <Connector port="8080" protocol="HTTP/1.1"
  2.                connectionTimeout="20000"
  3.                redirectPort="8443"
  4.                minSpareThreads="50"
  5.                enableLookups="false"  
  6.                disableUploadTimeout="true"
  7.                acceptCount="300"
  8.                maxThreads="500"
  9.                processorCache="500"
  10.                URIEncoding="UTF-8"
  11.                compression="on"
  12.                compressionMinSize="2048"
  13.                compressableMimeType="text/html,text/xml,text/javascript,text/css,tex t/plain,image/gif,image/jpg,image/png" />
复制代码
参数

说明

connectionTimeout="20000"

指定了连接超时时间,单元是毫秒。在20秒内如果连接没有建立乐成,则超时。
redirectPort="8443"

指定了当必要进行重定向时使用的端口号,一样平常用于HTTPS协议的情况,这里是8443端口
minSpareThreads="50"

指定了最小空闲线程数。Tomcat会尽量保持至少这么多个线程处于空闲状态,以备处理新的请求。
enableLookups="false"

设置是否允许DNS查询。这里设置为false,表现不允许Tomcat对客户端的IP地点进行DNS查询。
disableUploadTimeout="true"

禁用上传超时。设置为true时,Tomcat将不会对上传操作设置超时限定。
acceptCount="300"

指定了在处理满负荷的情况下,能接受的最大连接请求数。当到达这个数目后,新的连接请求将会被拒绝。
maxThreads="500"

指定了连接器处理的最大线程数。当到达这个数目时,新的连接请求会进入等待队列(如果已满则会拒绝连接)
processorCache="500"

指定了处理器缓存的大小。Tomcat在内部使用处理器对象池来重复使用已经创建的处理器。这里设置为500,表现最多可以缓存500个处理器对象。
URIEncoding="UTF-8"

指定了URL的编码格式。这里设置为UTF-8
compression="on"

启用相应内容的压缩功能
compressionMinSize="2048"

设置触发压缩的最小相应内容大小,单元是字节。当相应内容大于这个值时才会进行压缩
compressableMimeType

指定可以进行压缩的MIME范例
重启tomcat
  1. [root@localhost conf]# ../bin/shutdown.sh
  2. [root@localhost conf]# ../bin/startup.sh
复制代码
先访问tomcat可否在浏览器正常访问,确保修改后的设置文件能够正常运行tomcat
优化前后对比

确保修改的设置文件能够正常运行tomcat后,可以进行优化的压力测试,此时打开JMeter工具
第二次测试之前先清除全部,否则第二次测试的结果会和第一次的重叠

右键线程组 ——》Start
开始压力测试

待上方箭头图标酿成绿色之后,表现测试竣事

此时将优化后的聚合陈诉也截图保存,然后放到Word文档里,可以进行对比

参数

说明

Label

表现每个HTTP请求或事务的名称或标识。用来区分不同请求或事务的名称。
Samples

表现测试中一共发出了多少个请求,单元一样平常为毫秒
Average

平均相应时间,越小越好
Median

中位数,也就是 50% 用户的相应时间
90% Line

90% 用户的相应时间
95% Line

95% 用户的相应时间
99% Line

99% 用户的相应时间
Min

最小相应时间
Max

最大相应时间
Error %

本次测试中出现错误的请求的数量/请求的总数
Throughput

吞吐量,表现每秒完成的请求数。单元是请求/秒
Received KB/sec

每秒接收的数据量,单元是KB/秒。
Sent KB/sec

每秒发送的数据量,单元是KB/秒。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表