深入拆解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
登录|注册

40 | 谈谈Jetty性能调优的思路

李号双 2019-08-13
关于 Tomcat 的性能调优,前面我主要谈了工作经常会遇到的有关 JVM GC、监控、I/O 和线程池以及 CPU 的问题定位和调优,今天我们来看看 Jetty 有哪些调优的思路。
关于 Jetty 的性能调优,官网上给出了一些很好的建议,分为操作系统层面和 Jetty 本身的调优,我们将分别来看一看它们具体是怎么做的,最后再通过一个实战案例来学习一下如何确定 Jetty 的最佳线程数。

操作系统层面调优

对于 Linux 操作系统调优来说,我们需要加大一些默认的限制值,这些参数主要可以在/etc/security/limits.conf中或通过sysctl命令进行配置,其实这些配置对于 Tomcat 来说也是适用的,下面我来详细介绍一下这些参数。
TCP 缓冲区大小
TCP 的发送和接收缓冲区最好加大到 16MB,可以通过下面的命令配置:
sysctl -w net.core.rmem_max = 16777216
sysctl -w net.core.wmem_max = 16777216
sysctl -w net.ipv4.tcp_rmem =“4096 87380 16777216”
sysctl -w net.ipv4.tcp_wmem =“4096 16384 16777216”
TCP 队列大小
net.core.somaxconn控制 TCP 连接队列的大小,默认值为 128,在高并发情况下明显不够用,会出现拒绝连接的错误。但是这个值也不能调得过高,因为过多积压的 TCP 连接会消耗服务端的资源,并且会造成请求处理的延迟,给用户带来不好的体验。因此我建议适当调大,推荐设置为 4096。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入拆解Tomcat & Jetty 》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(7)

  • 许童童
    但是我们的实验中测试发现,最大线程数为 6 时最佳,这是不是矛盾了?
    不矛盾,老师已经说了,这个案例里面没有IO操作。
    有IO操作的时候,用这个公式:(线程IO阻塞时间+线程CPU时间) / 线程CPU时间

    作者回复: 正解

    2019-08-13
    2
  • -W.LI-
    1.课后习题不矛盾。老师课上说了实力是纯CPU密集型没有IO阻塞,这种情况下线程数比核数多一点就好。正式环境,要连接各种缓存,数据库,第三方调用都会IO阻塞。IO阻塞越多可开的线程数越多。

    老师好!服务器分配的端口号只是服务监听的端口号,然后服务器作为客户端调用别的服务时,会随机占用一个端口号建立TCP连接是么(同样需要fd)?rmi技术无法穿透防火墙,理由是端口号不固定随机生成。rmi技术服务提供方的端口号会变的意思么?不太理解谢谢李老师,课程快结束了不舍

    作者回复: 对的,网络通信的客户端会随机选用一个可用的端口

    2019-08-13
    1
    2
  • 静水流深
    看来老师对4096这个数情有独钟啊,哈哈😄
    2019-12-01
  • 郭浩
    老师您好:
    Acceptor 的个数 accepts 应该设置为大于等于 1,并且小于等于 CPU 核数。
    这个是在哪里配置呢?有没有示例分享出来呢?
    2019-11-07
  • Winter
    李老师好:tomcat的应用发生内存溢出为何会导致tomcat假死,我的理解是tomcat的应用内存溢出应该直接释放内存,不影响其他请求才对,期望老师回复,感谢哈。
    2019-10-13
  • 逆流的鱼
    系统相关调节和servlet容器强相关?

    作者回复: 无关,这个是操作系统层面

    2019-08-13
  • 门窗小二
    测试中的最大线程数指的是接入线程类似netty的boss eventloop,50到500处理线程类似work eventloop!猜测是这样?

    作者回复: 最大线程数就是jetty的全局线程池所能创建的最大线程数

    2019-08-13
收起评论
7
返回
顶部