性能测试实战 30 讲
高楼
前 HP 高级性能专家,7DGroup 创始人
45941 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
性能测试实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

21丨Tomcat:中间件监控及常用计数器解析

测试结果
测试结果
测试结果
测试结果
带宽消耗
目标
测试结果
判断线程是否够用
监控计数器拆解
性能测试分析
Tomcat优化关键环节
connectionTimeout="200"
connectionTimeout="20000"
acceptCount="100"
acceptCount="10000"
测试结果
压缩功能
禁用AJP
最大最小空闲线程数
线程数配置
HTTPS
HTTP
监控图表
访问日志配置
APR
NIO
BIO
思考题
总结
connectionTimeout
acceptCount
压缩
AJP
线程池
协议
请求量、请求时间、响应时间
运行模式
架构
Tomcat
性能分析

该思维导图由 AI 生成,仅供参考

在当今 Spring Cloud 微服务架构盛行的时代,Tomcat 仍然作为应用最广的应用服务器而存在着,所以我们不得不说一说对它的性能分析。
很多时候,我们做性能测试分析时,都会把 Tomcat 这类的应用弄混淆。对它的监控和分析,总是会和 JDK、框架代码、业务代码混合来看,这就导致了分析上的混乱。我们应该把这些分析内容分隔开来,哪些是 tomcat,哪些是 JDK 等。
在我看来,Tomcat、WebLogic、WebSphere、JBoss 等,它们都具有同样的分析思路。因为 Tomcat 的市场范围更大,所以,今天,我们以它为例来说明这类应用应该如何分析。
首先我们得知道它的架构是什么样的。
这是一个在网上随处可见的架构图,它能告诉我们 Tomcat 内部如何运作。如果你有兴趣,还可以看一下官方对它的架构描述。
然而,我们做性能分析的人真的要完全掌握这些细节吗?当然不是。从经验上来说,基本上有几大方面,是 Tomcat 优化时需要关注的。
如下图所示:
最上面,我放了两个框,分别是操作系统和 JDK。因为要调优 Tomcat,和这两者非常相关,但是操作系统和 JDK 又各自有独立的分析逻辑,而在本篇中,我专门讲 Tomcat 类型的组件,所以上面两块的内容我将尽量不涉及,以免混乱。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Tomcat性能分析的关键内容,重点讨论了中间件监控和常用计数器解析。作者首先强调了在性能分析中需要将Tomcat、JDK、框架代码和业务代码的分析内容分隔开来,以避免混乱。随后,文章详细介绍了Tomcat的架构和优化时需要关注的几个重要技术点,包括运行模式选择、请求量、请求时间、响应时间等。此外,还介绍了SSL证书对性能的影响以及Tomcat线程池的调优策略。 在测试场景一中,作者通过压力线程数远小于服务端线程数的情况下的测试结果和线程监控结果,展示了典型的线程足够用的状态。而在测试场景二中,通过逐渐增加压力线程数直至超过服务端线程数的测试结果和线程监控结果,展示了典型的线程配置不够的状态。这些实际场景的测试结果生动地展现了Tomcat性能分析中线程使用情况的变化,为读者提供了直观的参考。 文章还通过具体的测试场景和线程监控结果,帮助读者理解了压力线程对Tomcat性能的影响,强调了压力工具中的线程数增加并不一定对服务端性能有益,并且阐述了并发用户数不能用压力线程来描述的观点。整体而言,本文为读者提供了清晰的性能分析方法和优化建议,对于需要深入了解Tomcat性能分析的技术人员具有重要的参考价值。 文章还提出了两个思考题,引发读者对类似应用服务器的监控计数器拆解和应用服务器线程是否够用的思考。这些问题将有助于读者深入思考和交流,促进技术进步。整体而言,本文内容丰富,涵盖了Tomcat性能分析的多个关键方面,对读者具有较高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能测试实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • Geek_f93234
    1.如何判断代码快不快,我的理解是,压力工具中的线程数设置低于中间件的线程数,看看测试过程中服务器返回响应是否足够快 2.如何判断应用服务器线程是否够用? 测试过程中应用监控工具如jvisualvm监控线程同一时刻是否有空闲状态,如果一直是run那able状态,同时响应时间不断增加,说明线程数不够用 3.类似 Tomcat 的应用服务器,应该如何拆解监控计数器呢? 从以下几个方面的计数器来分析:协议(http,https),运行模式(BIO,AIO,APR),线程池;超时时间,压缩,TCP不延迟,禁用DNS查询,禁用AJP

    作者回复: 非常认真的同学呀。

    2020-02-11
    2
    11
  • 麦兜布熊
    老师教案中的NIO和AIO没看懂,图中poller的画着是NIO,下面的文字又说成AIO了。是说两个的原理都是基于poller吗

    作者回复: 这里应该都写成NIO,已经修改了。 在写本文的时候,我一定走神了。 多谢提醒。 发现了错误,应该有奖励。加我微信:Zee_7D,领取大额红包。哈哈。

    2020-02-27
    2
    7
  • ldm
    高老师,你好,想请问下,压力线程和服务器线程的区别?看了文章后有点弄不清楚了。并发用户数理解的意思是在同一时间点对同一事务做同一个操作的用户数;压力线程数是指的压力工具上配置的vuser数?服务器线程数是指tomcat上配置的maxthreads数吗?

    作者回复: 并发用户数其实也是指一个单位时间内的事务操作数,不会是“时间点”。 压力线程数是指的压力工具上配置的vuser数?服务器线程数是指tomcat上配置的maxthreads数吗? 这两个问题答案都是“对”。

    2022-06-17
    2
  • 小老鼠
    1,如何判断问题是Tomcat发生还是自己写的代码发生的。2,tomcat的log日志太多,会影响性能的吧?3,JBoos、Weblogic是不是自身性能会更好?

    作者回复: 1,看调用栈。 2,什么日志多了都影响性能。 3,没看懂问的是什么。自身性能更好是跟谁比呢?

    2020-02-25
    2
    1
  • 信大捷安
    高老师好,%D 就是请求时间,%F 是响应时间这两个不太明白,可以详细解释一下吗?

    作者回复: 这个在官网中是有解释的。 %D - Time taken to process the request, in millis %F - Time taken to commit the response, in millis

    2023-03-14归属地:河南
  • 追风筝的人
    我需要说明的是,以下场景均基于以下配置:acceptCount=“10000”。这个值对我们来说,也是非常关键的数据,因为它影响着 KeepAlive 的超时和 connection 的超时。我们在性能分析的时候,会遇到一种情况是,很多应用都用默认超时,而在压力大的时候,会有少量的报错是因为前端的超时已经到了,而后端还没到,因为毕竟后端是后接收到的请求。这就导致了大压力下少量的错误是因为超时配置导致的。

    作者回复: 说的对呀。

    2021-12-20
  • Geek_13df3b
    高老师,请问执行压测前服务器的内存使用率30%,对服务器持续加压后,内存使用率升到80%,压测结束后,内存使用率一直保持在80%左右,不会将下来。这是正常的吗?该如何排查,请您指导下,感谢了

    作者回复: 正常的,你要看一下linux内存原理就会明白了。

    2021-08-06
    2
  • johnny
    应该如何拆解监控计数器呢? 根据对性能指标影响程度,最重要的三类计数器为协议、运行模式(用默认的就行)、线程池,线程池下的几个重要的计数器为maxThreads、minSpareThreads、maxSpareThreads、acceptCount。 我们应该如何判断应用服务器的线程是否够用? 可以通过jvisuavlvm工具查看线程是否忙碌来判断。 另外根据“服务端能处理的压力线程必然不会超过自身的线程上限”这句话,从服务器线程是否够用的角度来看,将tomcat的线程数设置为大于或者等于压力机线程数,一般是够用的,但是也要根据硬件资源情况而定,不能盲目增大tomcat线程数,比如将tomcat线程设置为4000。 我的回答正确吗? 我有个问题,老师所说的“计数器”的概念是不是就是指的tomcat的配置参数(acceptCount、maxThreads、minSpareThreads等)呢?

    作者回复: 1,压力工具线程数通常和服务端线程数之前要测试才知道哪个应该大,因为代码运行快慢不一定。 2,计数器不是配置参数,而是动态记录数据的值。比如实时堆大小等。

    2021-06-23
  • 陈诚
    疑问: 1、设置不同的压力线程,对服务器来讲压力不同,势必响应时间会有不同,这如何判断是代码运行快慢的问题呢? 麻烦老师解疑,谢谢

    作者回复: 代码运行快慢不是性能分析的起点。应该先判断系统容量是否达到需求再根据证据链分析代码够不够快。

    2021-05-26
  • sunny
    操作系统的CS,CS指的是什么呢

    作者回复: context switch,在本专栏的18讲中,有说明。 从这个问题来看,这位同学似乎是跳着看的呀。 哈哈。

    2021-05-18
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部