文章目录

  • 性能测试详解(三)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文件夹下。

  1. logging.properties

    tomcat在启动时有乱码的情况需要在logging.properties中修改日志输出的编码方式。

    把encoding的格式utf-8都换成gbk就ok了。

logs文件夹下。

  1. catalina.log

    记录了启动信息的日志。

  2. localhost_access_log.时间.txt

    用户请求tomcat的访问日志。请求方式,http/https+状态码。

  3. localhost.time.txt

    web应用的内部程序日志。

webapp文件下

​ tomcat下存放web系统的目录,它下面每个文件夹都是一个工程项目,自己的项目可以以文件夹的形式上传,也可以使用war包,jar包等。

  1. 如果使用war包,运行时会解析编译,会生成war包对应的文件夹。部署时一般一个tomcat管理一个项目,比较好操作。
  2. 在工作中会经常在webapps中部署新的版本

work路径

  1. 运行过程中生成的文件,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 &quot;%r&quot; %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"/>
  1. 嵌入式部署

    此组件的特定实例监听服务器上特定tcp端口号上的链接,可以定义端口号,比如把8080改成8081。在一个服务器上配置多个tomcat,每个不同的tomcat配置不同的端口号才可以正常访问。不过这与性能没有关系。

  2. Protocal:bio\nio\nio2\apr

    与性能有关系的是 Connector标签的protacol,tomact基于怎么的网络协议去接收

    四种传输形态

    1. bio是同步阻塞型的交互方式。把请求排队,同一时间只能处理一个请求,当要用数据库的读写操作可能需要2秒,那后面的请求就堵塞了,响应时间被无限延长
    2. nio是同步非阻塞的传输,类似云文件的多人编辑,文件运行中不操作文件,生成一个管道,生成一个buffer缓存区,缓存区操作完后再修改实际文件。一般默认为nio。伪异步的实现。
    3. Nio2是异步非阻塞。同步是线性的,从请求到响应都是同步。异步的话,等待环节取消了,有一个缓冲区,发起请求后完成特定的操作后持续接收大量请求。吞吐量大。
    4. Apr系统级别的异步,apr是高并发大吞吐量数据形态的首选方式。应用访问度不频繁的话直接用nio就可以了,linux环境推荐用nio,nio2不太好用。系统访问量很大用apr,但是linux系统下使用apr要安装相关apr的包(关联的库),windows不用安装。
  3. compression=“on”,把请求和数据进行压缩,把空间缩小。compressionMinSize,如果为“on”,则此属性可用于指定压缩输出之前的最小数据量。

  4. 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" ## 最大线程等待数。 与线程挂钩。/>
  1. namePrefix 每个线程在启动时会有一个名字,取“catalina-exec-”前缀

    1. catalina-exec-1
    2. catalina-exec-2
    3. catalina-exec-3
  2. maxThreads 是线程池的最大数量。支撑最大线程的运行数。根据实际业务走。
  3. minSpareThreads Executor执行时,创建的线程数,线程是一个一个创建的,默认启动线程池的时候,先创建一批默认的线程数,来处理请求。
  4. maxIdleTime 一个线程的最大存活时间,以毫秒为单位,有些线程因为没有请求,没有任务的下发,线程进入了空闲状态,一直运行会消耗很多资源,所以就释放掉。
  5. prestartminSpareThreads 是否启动minSpareThreads,决定它是否生效,没有的话默认为false。
  6. 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">
  1. 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. 在不同肉机上压测同一个服务,吞吐量相差特别大,可能的原因有哪些?

  1. 网络问题
  2. 测试脚本
  3. 服务端是否出现了问题

性能测试详解(三)Tomcat性能调优相关推荐

  1. 千字详解:“Java性能调优六大工具”之JConsole工具

    JConsole工具是JDK自带的图形化性能监控工具. 通过JConsole工具, 可以查看Java应用程序的运行概况, 并监控堆信息. 永久区使用情况及类的加载情况等. 本文主要介绍JConsole ...

  2. 让你眼前一亮的3. Tomcat 性能调优 (值得收藏)

    目录 3. Tomcat 性能调优3.1 Tomcat 性能测试3.2 Tomcat 性能优化3.2.1Tomcat配置调优1.禁用AJP连接2.Connector 连接器的选择3.Executor线 ...

  3. tomcat 性能调优

    tomcat 性能调优 *************** tomcat 调优 ServerProperties:server 配置,直接在配置文件(application.yml)中设置 @Config ...

  4. Tomcat性能调优-JVM监控与调优

    参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...

  5. PHP 性能分析第三篇: 性能调优实战

    注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或  PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...

  6. php xingnengfenxi_PHP 性能分析第三篇: 性能调优实战

    在本系列的 第一篇 中,我们介绍了 XHProf .而在 第二篇 中,我们深入研究了 XHGui UI, 现在最后一篇,让我们把 XHProf /XHGui 的知识用到工作中! 性能调优 不用运行的代 ...

  7. 【转】tomcat性能调优

    一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   ...

  8. 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔

    一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   ...

  9. win7查看tomcat端口_想研究Tomcat性能调优,看这篇就够了

    一.下载地址 https://tomcat.apache.org/download-80.cgi 二.安装步骤 将安装包 apache-tomcat-8.5.39.tar.gz 上传至服务器 /usr ...

  10. tomcat性能调优 大赞

    从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是:ü 吞吐量ü Responsetimeü Cpuloadü MemoryUsage我 们也在第三天的学习 ...

最新文章

  1. python3 not 用法
  2. 新版数采仪问题解决全记录-升级失败问题
  3. pandas基础(part2)--DataFrame
  4. 现代软件工程 学生阅读和调查作业
  5. 线性表之简介及顺序表
  6. 转:判断Caps Lock键是否打开,如果打开则关闭
  7. 阻尼衰减曲线用python_阻尼的反击 | 被半篇论文爆脑两次是一种什么体验
  8. 51nod-1131: 覆盖数字的数量
  9. android下在屏幕适配小总结
  10. 【图像压缩】基本matlab DCT+量化+huffman JPEG图像压缩【含Matlab源码 1217期】
  11. Shapefile属性操作之删
  12. 【Codeforces613D】Kingdom and its Cities【虚树】【Tree DP】
  13. 王炸!10分钟把ChatGPT部署成24小时微信机器人!
  14. 福昕阅读器常用快捷键
  15. maven下载jar包时lastUpdated问题
  16. 为了性能,别再用pip安装TensorFlow了
  17. linux snap exe,在Linux系统上安装官方Snap Store应用程序
  18. Hardware/Firmware/Software的区别
  19. JS toFixed的使用误差,银行家算法(四舍六入五取偶)实现
  20. 我的七年,可能也是你的七年

热门文章

  1. 未受信任的企业级开发者怎么设置
  2. 服务发现框架 —————— 开开开山怪
  3. Maccms8.x 命令执行漏洞分析
  4. 到底什么是SPA、SEO、SSR?
  5. 汽车开发节点 ET、PT、SOP
  6. scrapy爬虫项目的建立
  7. Linux如何磁盘分区
  8. laravel文档——文件夹结构
  9. Python(初学者):调用函数输出
  10. Linux 引导过程与服务控制