深入拆解Tomcat & Jetty
李号双
eBay技术主管
立即订阅
6067 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | Java程序员如何快速成长?
免费
模块一 必备基础 (4讲)
01 | Web容器学习路径
02 | HTTP协议必知必会
03 | 你应该知道的Servlet规范和Servlet容器
04 | 实战:纯手工打造和运行一个Servlet
模块二 整体架构 (9讲)
05 | Tomcat系统架构(上): 连接器是如何设计的?
06 | Tomcat系统架构(下):聊聊多层容器的设计
07 | Tomcat如何实现一键式启停?
08 | Tomcat的“高层们”都负责做什么?
09 | 比较:Jetty架构特点之Connector组件
10 | 比较:Jetty架构特点之Handler组件
11 | 总结:从Tomcat和Jetty中提炼组件化设计规范
12 | 实战:优化并提高Tomcat启动速度
13 | 热点问题答疑(1):如何学习源码?
模块三 连接器 (9讲)
14 | NioEndpoint组件:Tomcat如何实现非阻塞I/O?
15 | Nio2Endpoint组件:Tomcat如何实现异步I/O?
16 | AprEndpoint组件:Tomcat APR提高I/O性能的秘密
17 | Executor组件:Tomcat如何扩展Java线程池?
18 | 新特性:Tomcat如何支持WebSocket?
19 | 比较:Jetty的线程策略EatWhatYouKill
20 | 总结:Tomcat和Jetty中的对象池技术
21 | 总结:Tomcat和Jetty的高性能、高并发之道
22 | 热点问题答疑(2):内核如何阻塞与唤醒进程?
模块四 容器 (8讲)
23 | Host容器:Tomcat如何实现热部署和热加载?
24 | Context容器(上):Tomcat如何打破双亲委托机制?
25 | Context容器(中):Tomcat如何隔离Web应用?
26 | Context容器(下):Tomcat如何实现Servlet规范?
27 | 新特性:Tomcat如何支持异步Servlet?
28 | 新特性:Spring Boot如何使用内嵌式的Tomcat和Jetty?
29 | 比较:Jetty如何实现具有上下文信息的责任链?
30 | 热点问题答疑(3):Spring框架中的设计模式
模块五 通用组件 (4讲)
31 | Logger组件:Tomcat的日志框架及实战
32 | Manager组件:Tomcat的Session管理机制解析
33 | Cluster组件:Tomcat的集群通信原理
特别放送 | 如何持续保持对学习的兴趣?
模块六 性能优化 (8讲)
34 | JVM GC原理及调优的基本思路
35 | 如何监控Tomcat的性能?
36 | Tomcat I/O和线程池的并发调优
37 | Tomcat内存溢出的原因分析及调优
38 | Tomcat拒绝连接原因分析及网络优化
39 | Tomcat进程占用CPU过高怎么办?
40 | 谈谈Jetty性能调优的思路
41 | 热点问题答疑(4): Tomcat和Jetty有哪些不同?
结束语 (1讲)
结束语 | 静下心来,品味经典
深入拆解Tomcat & Jetty
登录|注册

35 | 如何监控Tomcat的性能?

李号双 2019-08-01
专栏上一期我们分析了 JVM GC 的基本原理以及监控和分析工具,今天我们接着来聊如何监控 Tomcat 的各种指标,因为只有我们掌握了这些指标和信息,才能对 Tomcat 内部发生的事情一目了然,让我们明白系统的瓶颈在哪里,进而做出调优的决策。
在今天的文章里,我们首先来看看到底都需要监控 Tomcat 哪些关键指标,接着来具体学习如何通过 JConsole 来监控它们。如果系统没有暴露 JMX 接口,我们还可以通过命令行来查看 Tomcat 的性能指标。
Web 应用的响应时间是我们关注的一个重点,最后我们通过一个实战案例,来看看 Web 应用的下游服务响应时间比较长的情况下,Tomcat 的各项指标是什么样子的。

Tomcat 的关键指标

Tomcat 的关键指标有吞吐量、响应时间、错误数、线程池、CPU 以及 JVM 内存
我来简单介绍一下这些指标背后的意义。其中前三个指标是我们最关心的业务指标,Tomcat 作为服务器,就是要能够又快有好地处理请求,因此吞吐量要大、响应时间要短,并且错误数要少。
而后面三个指标是跟系统资源有关的,当某个资源出现瓶颈就会影响前面的业务指标,比如线程池中的线程数量不足会影响吞吐量和响应时间;但是线程数太多会耗费大量 CPU,也会影响吞吐量;当内存不足时会触发频繁地 GC,耗费 CPU,最后也会反映到业务指标上来。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入拆解Tomcat & Jetty 》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

  • 许童童
    使用prometheus + grafana 监控各种指标,每天上班前看一下昨天的情况,设置好阈值,如果达到就报警。
    2019-08-01
    5
  • nightmare
    先查看日志,那些方法耗时较大,用阿里爸爸开源arthas监控有问题的方法,排查问题
    2019-08-01
    1
    4
  • 旭东
    文中线程数的配置是否重复了
    2019-08-09
    1
  • Geek_28b75e
    老师,springboot内嵌tomcat怎么使用jmx?
    2019-08-07
    1
    1
  • 桔子
    processingTime处理这些请求共花费的时间。

    2019-10-11
  • dingdongfm
    请教一个细节,Timeout 设置为 1000 毫秒,接口延迟4S,那么ERROR不是100%么?

    作者回复: 这里是特意这么做的,目的是让Jmeter把流量压上去,因为上一个请求没有返回,Jmeter不会发下一个请求。

    2019-09-29
  • 仙道
    如果这样类型的内容能够再深入点、再广一点就好了。因为作为普通开发,很难有机会接触到这方面的知识,也无从学起
    2019-09-27
  • 疯狂咸鱼
    内存泄露的原因是什么呢?代码写的有问题?

    作者回复: 对的

    2019-08-16
  • Geek_ebda96
    老师请问一下,windows机器上用jconsole工具,不能看到tomcat的进程,是什么原因

    作者回复: 嵌入式tomcat进程一般是你的应用程序的名字,独立Tomcat进程你可以找bootstrap关键字

    2019-08-13
  • Geek_28b75e
    老师,通过监控工具看到了有哪些线程,但是发现有些线程大部分都在等待,怎么找到这些线程创建位置,进而调整线程池初始化大小?

    作者回复: 通过线程栈查看,jstack

    2019-08-07
  • 陆离
    老师,不是很明白线程sleep时间越长,为什么tomcat启动的线程就越多

    作者回复: 这是Tomcat需要从线程池拿出一个工作线程来处理请求,请求处理(休眠)的时间越长,这些线程被阻塞,休眠时间越长,被阻塞的线程越多,这些线程无法被线程池回收,Tomcat线程池不得不创建更多的线程来处理新的请求。

    2019-08-01
  • echo_陈
    生产环境网络隔离……没办法适用jmx
    2019-08-01
  • -W.LI-
    李老师好。
    第二三阶段,有很多TIME_WAIT状态的线程。可是CPU使用率并没有增加很多。老师说CPU使用率和吞吐量有关,吞吐量由JMETER控制一直没变。频繁线程切换会消耗很多CPU支援,如果只是阻塞,切换不频繁。对CPU使用率还是比较小的是么?

    作者回复: 对的

    2019-08-01
  • a、
    监控系统会每隔一段时间,ping下我们系统,我们系统会pong回监控系统,并带上ip地址,jvm当前使用率,cpu使用率等信息,如果超过一定数值,监控系统就会发出预警信息,我们就需要去生产管理通过日志和命令查看,到底出了什么问题。
    2019-08-01
收起评论
14
返回
顶部