性能测试详解(三)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路径会自动生成。
apache-tomcat-9.0.29-windows-x64apache-tomcat-9.0.29conf
文件源代码纯英文阅读比较困难的话,去看tomcat主页的configration页面内容,它的属性的意思可以找到。Chrom浏览器可以翻译成中文。
http://localhost:8080/docs/config/server.html
tomcat顺序性加载lib里面的jar,为了启动更快,开发会把tomcat做成嵌入式启动,用代码直接启动,如果是微服务的集群,需要启动的tomcat数量很大,所以做成了嵌入式。
2.1 server.xml优化Connectors嵌入式部署
此组件的特定实例监听服务器上特定tcp端口号上的链接,可以定义端口号,比如把8080改成8081。在一个服务器上配置多个tomcat,每个不同的tomcat配置不同的端口号才可以正常访问。不过这与性能没有关系。
Protocal:bionionio2apr
与性能有关系的是 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为最大的等待数。超出的就拒绝掉,因为处理不过来了。暂时可抽象理解为排队的最大人数。
要考虑到服务端硬件资源的环境。资源也要避免浪费。
- namePrefix 每个线程在启动时会有一个名字,取“catalina-exec-”前缀
- catalina-exec-1catalina-exec-2catalina-exec-3
tomcat的内存与jvm的内存机制是关联的。无限放大线程池的大小时,服务端内存也会放大。
tomcat在运行时默认做了自动重载的
2.3 自动重载 (关闭自动重载) java代码更新后tomcat会自动重载。自动加载的过程可能会产生隐患,容易造成内存溢出,因为需要重载class文件更新,自动去读取。所以需要关闭自动重载。
- autoDeploy 是自动部署。
tomcat会关联jvm
在 **bincatalina.bat(windows系统)**中进行配置 ,JAVA_OPTS,去配置JVM的使用内存、初始化内存和最大内存等。可以准确定位到JVM的准确的内存值。(具体内容关注之后的JVM部分)tomcat与jvm需要协调。
CPU占用比越高,线程运行越多,系统表现越慢。测试的是什么业务,结合具体业务。合理调节系统的资源。结合实际业务场景,硬件资源来制定调优方案。不同场景下调优方向不同。比如nio,apr,可以根据试错来积累经验。5-7年的经验可能对于性能测试工程师是十分关键的。
对于开发人员,tomcat的调优,懂tomcat源码,底层逻辑,交互实现等一系列内容,从代码底层了解tomcat的运行机制。
对测试工程师来说,了解tomcat的配置,实现资源的最大化利用,最有效的执行,配置如何去调整。
不同的角度对性能的概念是不一样的。
3. 问题 1. 在不同肉机上压测同一个服务,吞吐量相差特别大,可能的原因有哪些?- 网络问题测试脚本服务端是否出现了问题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)