JVM优化之Tomcat8优化

Tomcat优化从两个方面入手,1、Tomcat自身的配置;2、Tomcat运行的JVM环境进行优化;
环境准备:linux 和tomcat8

linux安装jdk和tomcat

进入目录 /etc/local/user 新建java 文件夹

mkdir  usr/local/java

将准备好的jdk上传至java 目录 并且安装

tar -xvf jdk-8u171-linux-x64.tar.gz

查看修改profile 文件

vi etc/profile

在这里插入图片描述
可以看到 环境变量已经配置 如果没有配置 在这个文件中新增以下内容

echo "export JAVA_HOME=/usr/local/java/jdk1.8.0_201" >> /etc/profile;
echo "export JRE_HOME=${JAVA_HOME}/jre" >> /etc/profile;
echo "export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib" >> /etc/profile;
echo "export  PATH=${JAVA_HOME}/bin:$PATH" >> /etc/profile;

profile 文件有了环境变量后回到用户目录下 生效 profile文件

 source  ../../etc/profile

查看是否安装成功‘

java -version

在这里插入图片描述
1、将jdk-8u171-linux-x64.tar.gz 上传

安装tomcat
1、新建一个tomcat目录,将tomcat8 上传至该目录
执行命令解压并且安装 执行命令:如果没有tomcat 执行以下命令 在线下载

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.34/bin/apache- tomcat-8.5.34.tar.gz

在这里插入图片描述

tar -xvf apache-tomcat-8.5.34.tar.gz

进入tomcat bin 目录启动tomcat

./startup.sh

启动成功
在这里插入图片描述

配置tomcat 用户和角色

cd apache-tomcat-8.5.34/conf
#修改配置文件,配置tomcat的管理用户
vim tomcat-users.xml
#写入如下内容:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
#保存退出

#如果是tomcat7,配置了tomcat用户就可以登录系统了,但是tomcat8中不行,还需要修改另一个配置文件,否则访 问不了,提示403

vim webapps/manager/META-INF/context.xml

#将<Valve的内容注释掉
<Context antiResourceLocking="false" privileged="true" > <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

#保存退出即可
#启动tomcat cd /tmp/apache-tomcat-8.5.34/bin/ ./startup.sh && tail -f ../logs/catalina.out

#打开浏览器进行测试访问 访问8080端口 ,
在这里插入图片描述
点击“Server Status”,输入用户名、密码进行登录,tomcat/tomcat
在这里插入图片描述
进入之后即可看到服务的信息;

Tomcat 主要从三个方面

1、禁用AJP连接
2、设置Tomcat线程池
3、使用nio2
4、调整jvm运行参数

调整Tomcat参数进行优化测试

下载安装Apache JMeter

使用Apache JMeter进行测试,下载地址:http://jmeter.apache.org/download_jmeter.cgi
在这里插入图片描述
下载完成之后进入bin目录,找到jmeter.bat文件,双机打开即可启动
在这里插入图片描述
可以修改工具页面的主题和语言,修改黑色主题
在这里插入图片描述
在这里插入图片描述
修改页面语言方便查看
在这里插入图片描述

Apache JMeter测试web应用

创建及保存应用首页的测试用例(应用为web应用,将war包放入tomcat并启动)
在这里插入图片描述
添加线程组,使用线程模拟用户的并发,1000个线程,每个线程循环10次,也就是tomcat会接收到10000个请求。

在这里插入图片描述
在这里插入图片描述
添加http请求
在这里插入图片描述
在这里插入图片描述
添加请求监控,这里选择了聚合报告,结果树,使用表格查看
在这里插入图片描述
在这里插入图片描述
启动并且测试
在这里插入图片描述
可以在聚合报告中查看吞吐量
在这里插入图片描述

禁用Tomcat AJP协议

进行测试查看表格可以看到吞吐量会有所提升
在这里插入图片描述

设置线程池

设置线程池进行测试对比,对打线程500,初始线程50

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true"/>

吞吐量明显提升
在这里插入图片描述
设置最大线程1000 初始线程200

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="200" prestartminSpareThreads="true"/>

在这里插入图片描述

最大线程5000初始线程1000 ,

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="5000" minSpareThreads="1000" prestartminSpareThreads="true"/>

在这里插入图片描述
虽然最大线程已经设置到5000,但是实际测试效果并不理想,并且平均的响应时间也边长了,所以单
纯靠提升线程数量是不能一直得到性能提升的

设置最大等待队列数

在默认的情况下,请求发送到tomcat,如果tomcat正忙,这个请求就会一直等待,这样可以保证每个请求到可以请求到,但是这样的话请求时间会变长,有的时候也不一定需要长时间的等待可以通过设置最大的等待队列的大小如果超时就不用等待,这样虽然请求失败了 但是不需要一直等待,最典型的例子就是12306登陆

<!--最大等待数为100-->
 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="100" prestartminSpareThreads="true" maxQueueSize="100"/>

在这里插入图片描述
测试结果正
平均响应时间:3.1秒,明显缩短,错误率:49.88%错误率提升到一半也可以理解,超过1000就会一直等待,吞吐量:238次/秒,吞吐量明显提升所以响应时间、吞吐量这2个指标需要找到平衡才能达到更好的性能。

设置nio2的运行模式

默认为nio

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true"/> 
<!-- 设置nio2 --> 
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />

在这里插入图片描述

调整JVM参数进行优化

设置并行垃圾回收器

进入tomcat,bin目录下修改cataila.sh脚本加入以下生成gc日志文件

#年轻代、老年代均使用并行收集器,初始堆内存64M,最大堆内存512M 
JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms64m -Xmx512m - XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC - Xloggc:../logs/gc.log"

测试与默认的参数几乎没有区别,
在这里插入图片描述
可以将gc.log文件上传到gceasy.io查看gc中是否存在问题。

在这里插入图片描述
可以关键指标中可以看出,吞吐量表现不错,但是gc时,线程的暂停时间稍有点长。
在这里插入图片描述
年轻代的gc有74次,次数稍有多,说明年轻代设置的大小不合适需要调整
FullGC有8次,说明堆内存的大小不合适,需要调整
在这里插入图片描述
从GC原因的可以看出,年轻代大小设置不合理,导致了多次GC。

调整年轻代大小在测试
将初始堆大小设置为128m,最大为1024m
初始年轻代大小64m,年轻代最大256m

JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms128m -Xmx1024m -XX:NewSize=64m -XX:MaxNewSize=256m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps - XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"

在这里插入图片描述
从测试结果来看,吞吐量以及响应时间均有提升。查看gc日志
在这里插入图片描述
GC次数要明显减少,说明调整是有效的。
在这里插入图片描述

设置G1垃圾回收器
#设置了最大停顿时间100毫秒,初始堆内存128m,最大堆内存1024m
 JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms128m -Xmx1024m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC - Xloggc:../logs/gc.log"

在这里插入图片描述
吞吐量有所提升,平均响应时间也有所缩短
可以总结出,对tomcat性能优化就是需要不断的进行调整参数,然后测试结果,可能会调优也可能会调差,这时就需要借助于gc的可视化工具来看gc的情况。再帮我我们做出决策应该调整哪些参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值