性能测试详解(三)Tomcat性能调优
文章目录
- 性能测试详解(三)Tomcat性能调优
- 1. 文件目录
- 2.server.xml
- 2.0 文件内容 (后面分标签详解)
- 2.1 server.xml优化Connectors
- 四种传输形态
- 2.2 server.xml优化线程池 Executer 线程与请求的配置。
- 2.3 自动重载 (关闭自动重载)
- 3. 问题
- 1. 在不同肉机上压测同一个服务,吞吐量相差特别大,可能的原因有哪些?
性能测试详解(三)Tomcat性能调优
tomcat是一款servlet容器。tomcat暂时选择绿色版的。
服务器搭建tomcat之后,会把app的jar包放到webapps里面,重启tomcat,编译jar包就可以访问项目了。tomcat是应用服务器。
启动时tomcat会检查它的环境。查看启动文件源码发现它启动的是catalina,这个文件是核心文件,conf是配置文件夹,在做性能调优的时候主要调优server.html文件。其中有性能的参数设定。
1. 文件目录
conf文件夹下。
logging.properties
tomcat在启动时有乱码的情况需要在logging.properties中修改日志输出的编码方式。
把encoding的格式utf-8都换成gbk就ok了。
logs文件夹下。
catalina.log
记录了启动信息的日志。
localhost_access_log.时间.txt
用户请求tomcat的访问日志。请求方式,http/https+状态码。
localhost.time.txt
web应用的内部程序日志。
webapp文件下
tomcat下存放web系统的目录,它下面每个文件夹都是一个工程项目,自己的项目可以以文件夹的形式上传,也可以使用war包,jar包等。
- 如果使用war包,运行时会解析编译,会生成war包对应的文件夹。部署时一般一个tomcat管理一个项目,比较好操作。
- 在工作中会经常在webapps中部署新的版本
work路径
- 运行过程中生成的文件,work路径会自动生成。
2.server.xml
2.0 文件内容 (后面分标签详解)
\apache-tomcat-9.0.29-windows-x64\apache-tomcat-9.0.29\conf
<?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><!--APR library loader. Documentation at /docs/apr.html --><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><!-- Prevent memory leaks due to use of particular java/javax APIs--><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><!-- Global JNDI resourcesDocumentation at /docs/jndi-resources-howto.html--><GlobalNamingResources><!-- Editable user database that can also be used byUserDatabaseRealm to authenticate users--><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources<Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><!-- Define an AJP 1.3 Connector on port 8009 --><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service>
</Server>
文件源代码纯英文阅读比较困难的话,去看tomcat主页的configration页面内容,它的属性的意思可以找到。Chrom浏览器可以翻译成中文。
http://localhost:8080/docs/config/server.html
tomcat顺序性加载lib里面的jar,为了启动更快,开发会把tomcat做成嵌入式启动,用代码直接启动,如果是微服务的集群,需要启动的tomcat数量很大,所以做成了嵌入式。
2.1 server.xml优化Connectors
<Connector excutor="tomcatThreadPool"port="8080"protocol="org.apache.http11.Http11NioProtocol"connectionTimeout="20000"redirectPort="8443"acceptCount="100"compression="on"compressionMinSize="50"/>
嵌入式部署
此组件的特定实例监听服务器上特定tcp端口号上的链接,可以定义端口号,比如把8080改成8081。在一个服务器上配置多个tomcat,每个不同的tomcat配置不同的端口号才可以正常访问。不过这与性能没有关系。
Protocal:bio\nio\nio2\apr
与性能有关系的是 Connector标签的protacol,tomact基于怎么的网络协议去接收
四种传输形态
- bio是同步阻塞型的交互方式。把请求排队,同一时间只能处理一个请求,当要用数据库的读写操作可能需要2秒,那后面的请求就堵塞了,响应时间被无限延长
- nio是同步非阻塞的传输,类似云文件的多人编辑,文件运行中不操作文件,生成一个管道,生成一个buffer缓存区,缓存区操作完后再修改实际文件。一般默认为nio。伪异步的实现。
- Nio2是异步非阻塞。同步是线性的,从请求到响应都是同步。异步的话,等待环节取消了,有一个缓冲区,发起请求后完成特定的操作后持续接收大量请求。吞吐量大。
- Apr系统级别的异步,apr是高并发大吞吐量数据形态的首选方式。应用访问度不频繁的话直接用nio就可以了,linux环境推荐用nio,nio2不太好用。系统访问量很大用apr,但是linux系统下使用apr要安装相关apr的包(关联的库),windows不用安装。
compression=“on”,把请求和数据进行压缩,把空间缩小。compressionMinSize,如果为“on”,则此属性可用于指定压缩输出之前的最小数据量。
acceptCount=“100”,当我的线程池满了以后,后续进来的请求如何处理,acceptCount为最大的等待数。超出的就拒绝掉,因为处理不过来了。暂时可抽象理解为排队的最大人数。
2.2 server.xml优化线程池 Executer 线程与请求的配置。
要考虑到服务端硬件资源的环境。资源也要避免浪费。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" ## 每个线程在启动时会有一个名字,取“catalina-exec-”前缀maxThreads="150" ## 线程池的最大数量minSpareThreads="4" ## Executor执行时,创建的线程数maxIdleTime="60000" ## 60秒 一个线程的最大存活时间,以毫秒为单位prestartminSpareThreads="true"maxQueueSize="100" ## 最大线程等待数。 与线程挂钩。/>
- namePrefix 每个线程在启动时会有一个名字,取“catalina-exec-”前缀
- catalina-exec-1
- catalina-exec-2
- catalina-exec-3
- maxThreads 是线程池的最大数量。支撑最大线程的运行数。根据实际业务走。
- minSpareThreads Executor执行时,创建的线程数,线程是一个一个创建的,默认启动线程池的时候,先创建一批默认的线程数,来处理请求。
- maxIdleTime 一个线程的最大存活时间,以毫秒为单位,有些线程因为没有请求,没有任务的下发,线程进入了空闲状态,一直运行会消耗很多资源,所以就释放掉。
- prestartminSpareThreads 是否启动minSpareThreads,决定它是否生效,没有的话默认为false。
- maxQueueSize=“100” 最大线程等待数。
tomcat的内存与jvm的内存机制是关联的。无限放大线程池的大小时,服务端内存也会放大。
tomcat在运行时默认做了自动重载的
2.3 自动重载 (关闭自动重载)
java代码更新后tomcat会自动重载。自动加载的过程可能会产生隐患,容易造成内存溢出,因为需要重载class文件更新,自动去读取。所以需要关闭自动重载。
<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 修改为 false--> <Host name="localhost" appBase="webapps"unpackWARs="flase" autoDeploy="flase">
- autoDeploy 是自动部署。
tomcat会关联jvm
在 **bin\catalina.bat(windows系统)**中进行配置 ,JAVA_OPTS,去配置JVM的使用内存、初始化内存和最大内存等。可以准确定位到JVM的准确的内存值。(具体内容关注之后的JVM部分)tomcat与jvm需要协调。
CPU占用比越高,线程运行越多,系统表现越慢。测试的是什么业务,结合具体业务。合理调节系统的资源。结合实际业务场景,硬件资源来制定调优方案。不同场景下调优方向不同。比如nio,apr,可以根据试错来积累经验。5-7年的经验可能对于性能测试工程师是十分关键的。
对于开发人员,tomcat的调优,懂tomcat源码,底层逻辑,交互实现等一系列内容,从代码底层了解tomcat的运行机制。
对测试工程师来说,了解tomcat的配置,实现资源的最大化利用,最有效的执行,配置如何去调整。
不同的角度对性能的概念是不一样的。
3. 问题
1. 在不同肉机上压测同一个服务,吞吐量相差特别大,可能的原因有哪些?
- 网络问题
- 测试脚本
- 服务端是否出现了问题
性能测试详解(三)Tomcat性能调优相关推荐
- 千字详解:“Java性能调优六大工具”之JConsole工具
JConsole工具是JDK自带的图形化性能监控工具. 通过JConsole工具, 可以查看Java应用程序的运行概况, 并监控堆信息. 永久区使用情况及类的加载情况等. 本文主要介绍JConsole ...
- 让你眼前一亮的3. Tomcat 性能调优 (值得收藏)
目录 3. Tomcat 性能调优3.1 Tomcat 性能测试3.2 Tomcat 性能优化3.2.1Tomcat配置调优1.禁用AJP连接2.Connector 连接器的选择3.Executor线 ...
- tomcat 性能调优
tomcat 性能调优 *************** tomcat 调优 ServerProperties:server 配置,直接在配置文件(application.yml)中设置 @Config ...
- Tomcat性能调优-JVM监控与调优
参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...
- PHP 性能分析第三篇: 性能调优实战
注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或 PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...
- php xingnengfenxi_PHP 性能分析第三篇: 性能调优实战
在本系列的 第一篇 中,我们介绍了 XHProf .而在 第二篇 中,我们深入研究了 XHGui UI, 现在最后一篇,让我们把 XHProf /XHGui 的知识用到工作中! 性能调优 不用运行的代 ...
- 【转】tomcat性能调优
一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü 吞吐量 ü Responsetime ü Cpuload ü ...
- 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü 吞吐量 ü Responsetime ü Cpuload ü ...
- win7查看tomcat端口_想研究Tomcat性能调优,看这篇就够了
一.下载地址 https://tomcat.apache.org/download-80.cgi 二.安装步骤 将安装包 apache-tomcat-8.5.39.tar.gz 上传至服务器 /usr ...
- tomcat性能调优 大赞
从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是:ü 吞吐量ü Responsetimeü Cpuloadü MemoryUsage我 们也在第三天的学习 ...
最新文章
- python3 not 用法
- 新版数采仪问题解决全记录-升级失败问题
- pandas基础(part2)--DataFrame
- 现代软件工程 学生阅读和调查作业
- 线性表之简介及顺序表
- 转:判断Caps Lock键是否打开,如果打开则关闭
- 阻尼衰减曲线用python_阻尼的反击 | 被半篇论文爆脑两次是一种什么体验
- 51nod-1131: 覆盖数字的数量
- android下在屏幕适配小总结
- 【图像压缩】基本matlab DCT+量化+huffman JPEG图像压缩【含Matlab源码 1217期】
- Shapefile属性操作之删
- 【Codeforces613D】Kingdom and its Cities【虚树】【Tree DP】
- 王炸!10分钟把ChatGPT部署成24小时微信机器人!
- 福昕阅读器常用快捷键
- maven下载jar包时lastUpdated问题
- 为了性能,别再用pip安装TensorFlow了
- linux snap exe,在Linux系统上安装官方Snap Store应用程序
- Hardware/Firmware/Software的区别
- JS toFixed的使用误差,银行家算法(四舍六入五取偶)实现
- 我的七年,可能也是你的七年