5. tomcat优化及编码优化

1. tomcat优化

涉及到两个方面:

  • tomcat自身的配置;
  • tomcat所运行的jvm虚拟机调优。

1.1 配置优化

1.1.1 下载安装部署

[root@localhost java]# cd apache-tomcat-8.5.40/conf/
[root@localhost conf]# ll
总用量 224
drwxr-x---. 3 root root     23 9月  13 17:17 Catalina
-rw-------. 1 root root  13548 4月  10 22:33 catalina.policy
-rw-------. 1 root root   7661 4月  10 22:33 catalina.properties
-rw-------. 1 root root   1338 4月  10 22:33 context.xml
-rw-------. 1 root root   1149 4月  10 22:33 jaspic-providers.xml
-rw-------. 1 root root   2313 4月  10 22:33 jaspic-providers.xsd
-rw-------. 1 root root   3916 4月  10 22:33 logging.properties
-rw-------. 1 root root   7511 4月  10 22:33 server.xml
-rw-------. 1 root root   2373 9月  16 21:20 tomcat-users.xml
-rw-------. 1 root root   2633 4月  10 22:33 tomcat-users.xsd
-rw-------. 1 root root 171082 4月  10 22:33 web.xml
[root@localhost conf]# vi 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"/>
保存退出

tomcat8还需要改个地方。

[root@localhost apache-tomcat-8.5.40]# vi webapps/manager/META-INF/context.xml 
# 注释掉
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
# 重新启动tomcat
[root@localhost bin]# ./startup.sh && tail -f ../logs/catalina.out

在这里插入图片描述
点击,用tomcat/tomcat登录即可。
在这里插入图片描述

1.1.2 禁用AJP

[root@localhost apache-tomcat-8.5.40]# vi conf/server.xml 
 <!-- Define an AJP 1.3 Connector on port 8009 -->
 <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->

重启看效果
在这里插入图片描述

1.1.3 执行器(线程池)

在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
修改server.xml文件:

 <!-- 打开注释 -->
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100" />
<!‐‐
参数说明:
maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业
务来判断
minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的
参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
maxQueueSize,最大的等待队列数,超过则拒绝请求
‐‐>
   <!-- 在Connector中设置executor属性指向上面的执行器-->
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

在这里插入图片描述
在页面中显示最大线程数为-1,这个是正常的,仅仅是显示的问题,实际使用的指定的值。
也有人遇到这样的问
题:https://blog.csdn.net/weixin_38278878/article/details/80144397

1.1.4 3种运行模式

tomcat的运行模式有3种:

  1. bio
    默认的模式,性能非常低下,没有经过任何优化处理和支持.
  2. nio
    nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
  3. apr
    安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

推荐使用nio,不过,在tomcat8中有最新的nio2,速度更快,建议使用nio2.
设置nio2:

<Connector executor="tomcatThreadPool" port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" />

在这里插入图片描述

1.2 部署测试用的javaweb项目

使用一个新的tomcat用于测试。

[root@localhost java]# rm -rf apache-tomcat-8.5.40

1.2.1 创建数据库

执行脚本

cat xxx.sql | mysql ‐uroot ‐proot

1.2.2 部署应用

部署完,重启tomcat,访问:http://192.168.66.129:8080/index

1.3 用Apache JMeter测试

1.3.1 下载安装

地址:http://jmeter.apache.org/download_jmeter.cgi
在这里插入图片描述
解压后进入bin目录双击打开jmeter.dat即可。
在这里插入图片描述

1.3.2 修改主题和语言

在这里插入图片描述
修改语言
在这里插入图片描述

1.3.3 创建首页的测试用例

  1. 保存测试用例
    在这里插入图片描述
  2. 添加线程组,使用线程模拟用户并发
    在这里插入图片描述
    在这里插入图片描述
  3. 添加http请求
    在这里插入图片描述
    在这里插入图片描述
  4. 添加请求监控
    在这里插入图片描述
    在这里插入图片描述

1.3.4 启动测试

在这里插入图片描述

1.3.5 聚合报告

在这里插入图片描述

1.4 参数优化

1.4.1 禁用AJP

在这里插入图片描述

1.4.2 设置线程池

  1. 最大线程500,最小50
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50"
prestartminSpareThreads="true"/>

在这里插入图片描述
2. 最大线程1000,最小200

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

在这里插入图片描述
3. 设置最大等待队列数
默认情况下,请求发送到tomcat,如果tomcat正忙,那么该请求会一直等待。这样虽然可以保证每个请求都能请求到,但是请求时间就会边长。
有些时候,我们也不一定要求请求一定等待,可以设置最大等待队列大小,如果超过就不等待了。这样虽然有些请求是失败的,但是请求时间会虽短。典型的应用:12306。

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

在这里插入图片描述
4. 设置nio2运行模式

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

在这里插入图片描述

1.5 调整jvm参数

在tomcat的bin目录下,修改catalina.sh, 添加如下参数:
使用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"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值