# 利刃出鞘_Tomcat 核心原理解析(十)-- Tomcat 性能调优--1

2024-09-01 12:36

本文主要是介绍# 利刃出鞘_Tomcat 核心原理解析(十)-- Tomcat 性能调优--1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利刃出鞘_Tomcat 核心原理解析(十)-- Tomcat 性能调优–1

一、Tomcat专题 - Tomcat性能调优 - 性能测试

1、tomcat 性能测试:

对于系统性能,用户最直观的感受就是系统的加载和操作时间,即用户执行某项操作的耗时。从更为专业的角度上讲,性能测试可以从以下两个指标量化。

1) 响应时间:如上所述,为执行某个操作的耗时。大多数情况下,我们需要针对同一个操作测试多次,以获取操作的平均响应时间。

2)吞吐量:即在给定的时间内,系统支持的事务数量,计算单位为 TPS。

通常情况下,我们需要借助于一些自动化工具来进行性能测试,因为手动模拟大量用户的并发访问几乎是不可行的,而且现在市面上也有很多的性能测试工具可以使用,如:ApacheBench、ApacheJMeter、WCAT、WebPolygraph、LoadRunner。

2、免费的工具:ApacheBench 使用。

ApacheBench(ab)是一款 ApacheServer 基准的测试工具,用户测试 Apache Server 的服务能力(每秒处理请求数),它不仅可以用户 Apache 的测试,还可以用于测试 Tomcat、Nginx、lighthttp、IIS 等服务器。

3、环境准备:打开一个虚拟机 CentOS7,提前安装好 jdk8 和 mysql

tomcat-49.png

4、安装 免费的工具:ApacheBench


# 安装 免费的工具:ApacheBench
yum install httpd‐tools# 查看 ApacheBench 版本号
ab -V

tomcat-50.png

5、下载 并上传至 CentOS7 服务器上。并解压。

tomcat-51.png

6、解压 apache-tomcat-8.5.42.tar.gz


# 切换目录 
[root@bogon tomcat]# cd /usr/local/tomcat/# 解压 
[root@bogon tomcat]# tar -zxvf apache-tomcat-8.5.42.tar.gz 

7、上传 ROOT.war 包到 /usr/local/tomcat/apache-tomcat-8.5.42.tar.gz/webapps/


# 切换目录 
[root@bogon tomcat]# cd /usr/local/tomcat/# 删除 /usr/local/tomcat/apache-tomcat-8.5.42.tar.gz/webapps/ 目录下的所有原文件和文件夹。[root@bogon tomcat]# ll ./apache-tomcat-8.5.42/webapps/                       
总用量 8
drwxr-x---. 14 root root 4096 831 19:19 docs
drwxr-x---.  6 root root   83 831 19:19 examples
drwxr-x---.  5 root root   87 831 19:19 host-manager
drwxr-x---.  5 root root  103 831 19:19 manager
drwxr-x---.  3 root root 4096 831 19:19 ROOT[root@bogon tomcat]# rm -rf ./apache-tomcat-8.5.42/webapps/*[root@bogon tomcat]# ll ./apache-tomcat-8.5.42/webapps/     
总用量 0# 上传 ROOT.war 包到 /usr/local/tomcat/apache-tomcat-8.5.42.tar.gz/webapps/
[root@bogon tomcat]# ll
总用量 38060
drwxr-xr-x. 9 root root      220 831 19:19 apache-tomcat-8.5.42
-rw-r--r--. 1 root root  9711748 89 08:16 apache-tomcat-8.5.42.tar.gz
-rw-r--r--. 1 root root 29257264 89 08:08 ROOT.war
[root@bogon tomcat]# 
[root@bogon tomcat]# 
[root@bogon tomcat]# mv ROOT.war ./apache-tomcat-8.5.42/webapps/
[root@bogon tomcat]# 
[root@bogon tomcat]# 
[root@bogon tomcat]# ll ./apache-tomcat-8.5.42/webapps/
总用量 28572
-rw-r--r--. 1 root root 29257264 89 08:08 ROOT.war
[root@bogon tomcat]# 

tomcat-52.png

8、上传 course_db.sql 到 CentOS7 服务器 /usr/local/tomcat/ 目录。

并登录 mysql 执行 mysql> source /usr/local/tomcat/course_db.sql


# 切换目录 
[root@bogon tomcat]# cd /usr/local/tomcat/[root@bogon tomcat]# ll
总用量 9508
drwxr-xr-x. 9 root root     220 831 19:19 apache-tomcat-8.5.42
-rw-r--r--. 1 root root 9711748 89 08:16 apache-tomcat-8.5.42.tar.gz
-rw-r--r--. 1 root root   19789 89 08:08 course_db.sql

tomcat-53.png

9、在 CentOS7 服务器 /usr/local/tomcat/ 目录。登录 mysql 执行 mysql> source /usr/local/tomcat/course_db.sql


# 切换目录 
[root@bogon ~]# cd /usr/local/tomcat[root@bogon tomcat]# ll
总用量 9508
drwxr-xr-x. 9 root root     220 831 19:19 apache-tomcat-8.5.42
-rw-r--r--. 1 root root 9711748 89 08:16 apache-tomcat-8.5.42.tar.gz
-rw-r--r--. 1 root root   19789 89 08:08 course_db.sql# 登录 mysql [root@bogon tomcat]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.39 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.# 执行 mysql>  source /usr/local/tomcat/course_db.sql 导入数据表。mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.05 sec)mysql> source /usr/local/tomcat/course_db.sqlQuery OK, 0 rows affected, 1 warning (0.01 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 1 row affected (0.02 sec)Database changed
Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected, 5 warnings (0.11 sec)Query OK, 55 rows affected (0.07 sec)
Records: 55  Duplicates: 0  Warnings: 0Query OK, 0 rows affected (0.02 sec)Query OK, 0 rows affected, 4 warnings (0.08 sec)Query OK, 14 rows affected (0.02 sec)
Records: 14  Duplicates: 0  Warnings: 0Query OK, 0 rows affected (0.01 sec)Query OK, 0 rows affected, 3 warnings (0.04 sec)Query OK, 23 rows affected (0.02 sec)
Records: 23  Duplicates: 0  Warnings: 0Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected, 1 warning (0.04 sec)Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)# 再次查看数据库mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| course_db          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)# 查看数据库中的数据表mysql> use course_db;
Database changed
mysql> 
mysql> 
mysql> show tables;
+---------------------+
| Tables_in_course_db |
+---------------------+
| course              |
| emp                 |
| operation_log       |
| user                |
+---------------------+
4 rows in set (0.01 sec)

tomcat-54.png

tomcat-55.png

10、先启动 tomcat ,再关闭 tomcat , 这时会生成文件夹 /webapps/ROOT/WEB-INF/。

打开 修改 usr/local/tomcat/apache-tomcat-8.5.42/webapps/ROOT/WEB-INF/classes/jdbc.properties 文件。进行编辑修改。


# 切换目录 
[root@bogon ~]# cd /usr/local/tomcat[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/startup.sh [root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/shutdown.sh # 修改 usr/local/tomcat/apache-tomcat-8.5.42/webapps/ROOT/WEB-INF/classes/jdbc.properties 文件。
[root@bogon tomcat]# vim ./apache-tomcat-8.5.42/webapps/ROOT/WEB-INF/classes/jdbc.properties   # 修改 mysql 登录用户、密码和 数据库名,如下:jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/course_db?characterEncoding=utf8&useSSL=false
jdbc.username=root
jdbc.password=12311# 再次启动 tomcat 
[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/startup.sh # 查看 tomcat 启动日志
[root@bogon tomcat]# tail -f ./apache-tomcat-8.5.42/logs/catalina.out

tomcat-56.png

tomcat-57.png

tomcat-58.png

11、克隆会话,切换到 cd /usr/local/tomcat/ 目录下,进行性能测试。

1)进行压力性能测试

ab ‐n 1000 ‐c 100 -p data.json -T application/json http://localhost:8080/course/search.do?page=1&pageSize=10

2)性能测试,参数说明:

参数含义描述
-n在测试会话中所执行的请求个数,默认只执行一次请求
-c一次产生的请求个数,默认一次一个
-p包含了需要POST的数据文件
-t测试所进行的最大秒数,默认没有时间限制
-TPOST数据所需要使用的Content-Type头信息
-v设置显示信息的详细程度
-w以HTML表的格式输出结果,默认是白色背景的两列宽度的一张表

# 切换目录 
[root@bogon ~]# cd /usr/local/tomcat/# 创建并编辑 data.json 文件。
vim data.json # 内容如下:{"name":"", "teacherName":""}# 按 ESC 切换到阅读模式,再按 :wq 保存退出。# 打开另一个终端,切换目录 
[root@bogon ~]# cd /usr/local/tomcat
# 关闭tomcat
[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/shutdown.sh 
# 启动tomcat
[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/startup.sh 
# 查看tomcat运行日志
[root@bogon tomcat]# tail -f ./apache-tomcat-8.5.42/logs/catalina.out# 打开另一个终端,切换目录 
[root@bogon ~]# cd /usr/local/tomcat# 进行压力性能测试[root@bogon tomcat]# ab -n 1000 -c 100 -p data.json -T application/json http://localhost:8080/course/search.do?page=1&pageSize=10
[1] 3469
[root@bogon tomcat]# This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
[root@bogon tomcat]# Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requestsServer Software:        
Server Hostname:        localhost
Server Port:            8080Document Path:          /course/search.do?page=1
Document Length:        2141 bytesConcurrency Level:      100
Time taken for tests:   85.063 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      2304000 bytes
Total body sent:        188000
HTML transferred:       2141000 bytes
Requests per second:    11.76 [#/sec] (mean)
Time per request:       8506.271 [ms] (mean)
Time per request:       85.063 [ms] (mean, across all concurrent requests)
Transfer rate:          26.45 [Kbytes/sec] received2.16 kb/s sent28.61 kb/s totalConnection Times (ms)min  mean[+/-sd] median   max
Connect:        0    0   1.1      0       7
Processing:   600 8015 1336.4   8250   16415
Waiting:      595 8014 1337.4   8250   16415
Total:        603 8015 1335.8   8250   16415Percentage of the requests served within a certain time (ms)50%   825066%   848775%   858180%   863990%   877595%   891598%   910699%   9438100%  16415 (longest request)
[root@bogon tomcat]# 
[1]+  完成                  ab -n 1000 -c 100 -p data.json -T application/json http://localhost:8080/course/search.do?page=1

tomcat-59.png

上一节关联链接请点击
# 利刃出鞘_Tomcat 核心原理解析(九)

这篇关于# 利刃出鞘_Tomcat 核心原理解析(十)-- Tomcat 性能调优--1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126954

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹