深入拆解 Tomcat & Jetty
李号双
eBay 技术主管
38890 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
深入拆解 Tomcat & Jetty
15
15
1.0x
00:00/00:00
登录|注册

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

结果分析
实验步骤
Thread Pool
Acceptors
拥塞控制
文件句柄数
端口
TCP队列大小
TCP缓冲区大小
课后思考
知识点回顾
性能测试
Jetty本身的调优
操作系统层面调优
总结
性能调优
Jetty
性能调优的思路

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

关于 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/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Jetty性能调优的思路主要包括操作系统层面调优和Jetty本身的调优。在操作系统层面,需要调整TCP缓冲区大小、TCP队列大小、端口范围、文件句柄数以及拥塞控制等参数。而对于Jetty本身的调优,则需要设置Acceptor和Thread Pool的数量,并通过有界队列来限制任务队列,以避免在高负载下积压大量待处理的请求。此外,文章还通过一个实验展示了如何确定Jetty的最佳线程数,指出对于CPU密集型应用,将最大线程数设置为CPU核数的1.5倍是最佳的。总的来说,本文通过实例和技术原理详细介绍了Jetty性能调优的思路和方法,为读者提供了实用的调优建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Tomcat & Jetty 》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(13)

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

    作者回复: 正解

    2019-08-13
    17
  • -W.LI-
    1.课后习题不矛盾。老师课上说了实力是纯CPU密集型没有IO阻塞,这种情况下线程数比核数多一点就好。正式环境,要连接各种缓存,数据库,第三方调用都会IO阻塞。IO阻塞越多可开的线程数越多。 老师好!服务器分配的端口号只是服务监听的端口号,然后服务器作为客户端调用别的服务时,会随机占用一个端口号建立TCP连接是么(同样需要fd)?rmi技术无法穿透防火墙,理由是端口号不固定随机生成。rmi技术服务提供方的端口号会变的意思么?不太理解谢谢李老师,课程快结束了不舍

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

    2019-08-13
    2
    6
  • 逆流的鱼
    系统相关调节和servlet容器强相关?

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

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

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

    2019-08-13
  • 花花大脸猫
    不矛盾呀,针对于CPU密集型的计算,一般建议都是略大于当前的cpu核数,如果是IO密集型的计算,就需要根据实际的计算公司来套用了。
    2022-07-20
    1
  • 小白哥哥
    别用tcp_tw_recycle,用tcp_tw_reuse
    2022-03-03
  • 桂桂
    hi,老师你好,碰到一个问题解决不了,inetaccess白名单无法获取实际client ip进行拦截,这个咋整,各种配置调了一个星期没解决,烦请提供一些idea, thanks
    2020-11-09
  • maybe
    课后思考:这里的例子只是cpu消耗,所以稍微大于或等于核心数比较合适。正常情况下会有各种io阻塞等,线程数大概公式可以是:(io时间+cpu时间)/ cpu时间
    2020-08-18
  • lorancechen
    无io操作时,工作线程设置成和cpu核数相等不是最少的线程上下文切换吗,为何是1.5倍吞吐最高呢?
    2020-06-18
  • 蚂蚁内推+v
    限制 Jetty 的任务队列非常重要。默认情况下,队列是无限的 Jetty 9.4 好像不是无限队列吧
    2020-03-28
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部