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

2024-09-02 05:36

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

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

二、Tomcat专题 - Tomcat性能调优 - 性能测试结果说明

1、压力性能测试


# 打开另一个终端,切换目录 
[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

2、压力 性能测试结果说明

指标含义
Server Software服务器软件
Server Hostname主机名
Server Port端口号
Document Path测试的页面
Document Length测试的页面大小
Concurrency Level并发数
Time taken for tests整个测试持续的时间
Complete requests完成的请求数量
Failed requests失败的请求数量,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。
Write errors输出错误数量
Total transferred整个场景中的网络传输量,表示所有请求的响应数据长度总和,包括每个http响应数据的头信息和正文数据的长度。
HTML transferred整个场景中的HTML内容传输量,表示所有请求的响应数据中正文数据的总和
Requests per second每秒钟平均处理的请求数(相当于 LR 中的 每秒事务数)这便是我们重点关注的吞吐率,它等于:Complete requests / Time taken for tests
Time per request每个线程处理请求平均消耗时间(相当于 LR 中的 平均事务响应时间)用户平均请求等待时间
Transfer rate平均每秒网络上的流量
Percentage of the requests served within a certain time (ms)指定时间里,执行的请求百分比

3、压力 性能测试 重要指标

参数指数说明
Requests per second吞吐率:服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数,下单位时间内能处理的最大请求数,称之为最大吞吐率。这个数值表示当前机器的整体性能,值越大越好。
Time per request用户平均请求等待时间:从用户角度看,完成一个请求所需要的时间
Time per request:across all concurrent requests服务器平均请求等待时间:服务器完成一个请求的时间
Concurrency Level并发用户数

三、Tomcat专题 - Tomcat性能调优 - JVM内存参数调优

1、JVM 参数调优

Tomcat 是一款 Java 应用,那么 JVM 的配置便与其运行性能密切相关,而 JVM 优化的重点则集中在内存分配和 GC 策略的调整上,因为内存会直接影响服务的运行效率和吞吐量,JVM垃圾回收机制则会不同程度地导致程序运行中断。可以根据应用程序的特点,

选择不同的垃圾回收策略,调整 JVM 垃圾回收策略,可以极大减少垃圾回收次数,提升垃圾回收效率,改善程序运行性能。

2、JVM 内存参数

参数参数作用优化建议
-server启动Server,以服务端模式运行,服务端模式建议,开启
-Xms最小堆内存建议与-Xmx设置相同
-Xmx最大堆内存建议设置为可用内存的80%
-XX:MetaspaceSize元空间初始值
-XX:MaxMetaspaceSize元空间最大内存默认无限
-XX:MaxNewSize新生代最大内存默认16M
-XX:NewRatio年轻代和老年代大小比值,取值为整数,默认为2不建议修改
-XX:SurvivorRatioEden区与Survivor区大小的比值,取值为整数,默认为8不建议修改

3、 JVM 参数调优 示例演示


# 打开一个终端,切换目录 
[root@bogon ~]# cd /usr/local/tomcat# 关闭tomcat
[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/shutdown.sh # 查看本地内存使用情况
[root@bogon tomcat]# freetotal        used        free      shared  buff/cache   available
Mem:        1014756      441968      311420        1784      261368      432512
Swap:       2097148      178688     1918460# 设置 JVM 参数后,再次启动 tomcat 
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceS1ze=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8"# 打开并编辑 catalina.sh 文件
[root@bogon tomcat]# [root@bogon tomcat]# vim ./apache-tomcat-8.5.42/bin/catalina.sh# 在 catalina.sh 文件中,根据自己物理内存大小而设置。
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8"# 启动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 tomcat]# ab -n 1000 -c 100 -p data.json -T application/json http://localhost:8080/course/search.do?page=1&pageSize=10Requests per second:    11.76 [#/sec] (mean)
Time per request:       8506.271 [ms] (mean)# 第二次测试:
[root@bogon tomcat]# ab -n 1000 -c 100 -p data.json -T application/json http://localhost:8080/course/search.do?page=1&pageSize=10Requests per second:    11.97 [#/sec] (mean)
Time per request:       8354.323 [ms] (mean)# 第三次测试:
[root@bogon tomcat]# ab -n 1000 -c 100 -p data.json -T application/json http://localhost:8080/course/search.do?page=1&pageSize=10Requests per second:    12.94 [#/sec] (mean)
Time per request:       7730.400 [ms] (mean)# 查看当前 tomcat 运行的进程 id 
[root@bogon tomcat]# ps -ef | grep tomcat# 查看 堆内存使用情况(8021 是 tomcat 进程 id)
[root@bogon tomcat]# jmap -heap 8021

tomcat-60.png

四、Tomcat专题 - Tomcat性能调优 - JVM垃圾收集器介绍

1、 GC 垃圾回收 策略。JVM 垃圾回收性能有以下两个主要的指标:

  • 吞吐量:工作时间(排除Gc时间)占总时间的百分比,工作时间并不仅是程序运行的时间,还包含内存分配时间。
  • 暂停时间:测试时间段内,由垃圾回收导致的应用程序停止响应次数/时间。

2、在 sun 公司推出的 HotSpotJVM 中,包含以下几种不同类型的垃圾收集器:

垃圾收集器含义说明
串行收集器
(serial Collector)
采用单线程执行所有的垃圾回收工作, 适用于单核cpu服务器,无法利用多核硬件的优势
并行收集器
(Parallel Collector)
又称为吞吐量收集器, 以并行的方式执行年轻代的垃圾回收,该方式可以显著降低垃圾回收的开销(指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态)。适用于多处理器或多线程硬件上运行的数据量较大的应用
并发收集器
(Concurrent Collector)
以并发的方式执行大部分垃圾回收工作,以缩短垃圾回收的暂停时间。适用于那些响应时间优先于吞吐量的应用,因为该收集器虽然最小化了暂停时间(指用户线程与垃圾收集线程同时执行,但不一定是并行的,可能会交替进行),但是会降低应用程序的性能
CMS收集器
(Concurrent Mark sweep Collector)
并发标记清除收集器,适用于那些更愿意缩短垃圾回收暂停时间并且负担的起与垃圾回收共享处理器资源的应用
G1收集器
(Garbage-First Garbage Collector)
适用于伙容量内存的多核服务器可以在满足垃圾回收暂停时间目标的同时,以最大可能性实现高吞吐量(JDK1.7之后)

3、不同的应用程序,对于垃圾回收会有不同的需求。JVM 会根据运行的平台、服务器资源配置情况选择合适的垃圾收集器、堆内存大小及运行时编译器。如无法满足需求,参考以下准则:

  • A、程序数据量较小,选择串行收集器。
  • B、应用运行在单核处理器上且没有暂停时间要求,可交由 JVM 自行选择或选择串行收集器,
  • C、如果考虑应用程序的峰值性能, 没有暂停时间要求,可以选择并行收集器。
  • D、如果应用程序的响应时间比整体吞吐量更重要,可以选择并发收集器。[

4、串行、并行收集器工作线程、GC线程图。

tomcat-61.png

五、 Tomcat专题 - Tomcat性能调优 - 垃圾收集器配置调整

1、查看 tomcat 中的默认的垃圾收集器:

在 tomcat/bin/catalina.sh 的配置中,加入如下配置


# 打开一个终端,切换目录 
[root@bogon ~]# cd /usr/local/tomcat# 关闭tomcat
[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/shutdown.sh # 设置 GC 垃圾 参数后,再次启动 tomcat # 打开并编辑 catalina.sh 文件
[root@bogon tomcat]# [root@bogon tomcat]# vim ./apache-tomcat-8.5.42/bin/catalina.sh# 设置 GC 垃圾 参数JAVA_OPTS="-Djava.rmi.server.hostname=192.168.1.107 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.rmi.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m  -XX:SurvivorRatio=8  -Djava.rmi.server.hostname=192.168.1.107 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.rmi.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"# 启动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

2、打开 jconsole 查看远程的 tomcat 的概要信息( C:\Java\jdk1.8.0_131\bin\jconsole.exe )

连接远程 tomcat ( Java 监视和管理控制台-192.168.1.107:8999 )

tomcat-62.png

tomcat-63.png

tomcat-64.png

tomcat-65.png

3、GC 垃圾回收参数配置:

参数描述
-XX:+UseserialGC启用串行收集器
-XX:+UseParallelcC启用并行垃圾收集器,配置了该选项,那么-xx:+useparalleloldcc默认启用
-XX:+UseParalleloldGCFu11GC采用并行收集,默认禁用。如果设置了 -xx:+useparallelGc则自动启用
-XX:+UseParNewGC年轻代采用并行收集器,如果设置了-xx:+UseconcMarksweepcc选项,自动启用
-XX:ParallelGCThreads年轻代及老年代垃圾回收使用的线程数。默认值依赖于JVM使用的cpu个数
XX:+UseConcMarksweepGC对于老年代,启用cs垃圾收集器。 当并行收集器无法满足应用的延迟需求是,推荐使用cMs或G1收集器,
启用该选项后-Xx:+useParNewGc 自动启用,
-XX:+UseG1GC启用G1收集器。 G1是服务器类型的收集器 , 用于多核、大内存的机器。它在保持高吞吐量的情况下,高概率满足cc暂停时间的目标,

4、可以在 tomcat/bin/catalina.sh 的脚本中 ,追加如下配置,配置 GC 垃圾回收参数。


JAVA_OPTS="-XX:+UseConcMarkSweepGC -XX:+PrintGCDetails"

5、可以在测试的时候,将参数调整之后,将 GC 的信息打印出来,便于进行参数调整提供依据,具体参数如下:

选项描述
-XX:+PrintGC打印每次GC的信息
-XX:+PrintGCApplicationConcurrentTime打印最后一次暂停之后所经过的时间,即响应并发执行的时间
-XX:+PrintGcApplicationstoppedTime打印GC时应用暂停时间
-XX:+PrintGCDatestamps打印每次GC的日期戳
-XX:+PrintGcDetails打印每次GC的详细信息
-XX:+PrintGCTaskTimestamps打印每个GC工作线程任务的时间戳
-XX:+PrintGcTimestamps打印每次GC的时间截

6、设置 GC 垃圾回收参数,重新启动 tomcat 进行测试。


# 打开一个终端,切换目录 
[root@bogon ~]# cd /usr/local/tomcat# 查询 tomcat 进程的 PID 
ps -ef | grep tomcat # 杀死 tomcat 进程 
kill -9 PID# 关闭tomcat
[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/shutdown.sh # 设置 GC 垃圾 参数后,再次启动 tomcat # 打开并编辑 catalina.sh 文件
[root@bogon tomcat]# [root@bogon tomcat]# vim ./apache-tomcat-8.5.42/bin/catalina.sh# 设置 GC 垃圾 参数JAVA_OPTS="-XX:+UseConcMarkSweepGC -XX:+PrintGCDetails"JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m  -XX:SurvivorRatio=8  -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails   -Djava.rmi.server.hostname=192.168.1.107 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.rmi.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"# 启动 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-66.png

六、Tomcat专题 - Tomcat性能调优 - 链接器配置调整

1、Tomcat 配置调优

调整 tomcat/conf/server.xml 中关干链接器的配置可以提升应用服务器的性能,

参数说明
maxConnections最大连接数,当到达该值后,服务器接收但不会处理更多的请求, 额外的请求将会阻塞直到连接数低于maxconnections。可通过u1imit -a查看服务器限制。对于cpu要求更高(计算型)时,建议不要配置过大;对于cpu要求不是特别高时,建议配置在2000左右。当然这个需要服务器硬件的支持
maxThreads最大线程数,需要根据服务器的硬件情况,进行一个合理的设置
acceptCount最大排队等待数,当服务器接收的请求数量到达maxconnections,此时Tomcat会将后面的请求,存放在任务队列中进行排序,acceptcount指的就是任务队列中排队等待的请求数。-台Tomcat的最大的请求处理数量,是 maxConnections + acceptCount。

2、tomcat/conf/server.xml 中,设置参数,进行调优测试。


# 打开一个终端,切换目录 
[root@bogon ~]# cd /usr/local/tomcat# 查询 tomcat 进程的 PID 
ps -ef | grep tomcat # 杀死 tomcat 进程 
kill -9 PID# 关闭tomcat
[root@bogon tomcat]# ./apache-tomcat-8.5.42/bin/shutdown.sh # 设置 tomcat 链接器配置调整# 打开并编辑 tomcat/conf/server.xml 文件[root@bogon tomcat]# vim ./apache-tomcat-8.5.42/conf/server.xml <!-- tomcat 调优设置 --><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxConnections="1000"maxThreads="500"acceptCount="200"/># 启动 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 核心原理解析(九)

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

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



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

相关文章

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to