24 | 跨层案例:如何优化程序、OS和存储系统的交互?
庄振运
该思维导图由 AI 生成,仅供参考
你好,我是庄振运。
我们前面几讲介绍了性能优化的原则和策略,并且集中探讨了 CPU、内存和存储三个最关键的领域。
今天我们来讲一个比较复杂的 JVM 场景和超大延迟的性能问题;这是本模块,也就是性能优化模块的最后一讲。
我们会一步步地探讨这个性能问题的表象、问题的重现、性能分析的过程和解决方案。这个性能问题的复杂性,表现在它牵扯了计算机技术的很多层次——从最上层的应用程序,到中间层 JVM 的机制,再到操作系统和文件系统的特性,最后还涉及到硬件存储的特点。
更重要的是,这几个层次互相影响,最后导致了平时我们不容易看到的严重性能问题——非常大的 JVM 卡顿。
生产环境下偶尔很大的响应延迟是怎么回事?
我们先来看看这个性能问题的表象:就是在生产环境中,偶尔会出现非常大的响应延迟。
由于大多数互联网业务都是面向在线客户的(例如在线游戏和在线聊天),所以,确保客户相应的低延迟非常重要。各种研究也都表明,200 毫秒延迟,是多数在线用户可以忍受的最大延迟。因此,确保低于 200 毫秒(甚至更短)的延迟,已经成为定义的 SLA(服务水平协议)的一部分。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了程序、操作系统和存储系统之间的交互优化,重点关注了JVM场景和超大延迟的性能问题。作者描述了生产环境中偶尔出现的非常大的响应延迟,强调了低延迟对于在线客户服务的重要性。通过实验数据清晰地展示了问题的复杂性和影响,为读者提供了深入了解程序、操作系统和存储系统交互优化的实际案例和分析过程。文章提出了三种解决方案,包括修改JVM、减少后台IO和将GC日志记录与其他IO分开,并详细阐述了这些方案的优缺点。最后,通过将GC日志文件放在SSD文件系统上的实验验证了将GC日志记录与其他IO分开的有效性。这篇文章对于需要深入了解程序性能优化和解决延迟问题的技术人员具有重要参考价值。文章内容涉及跨层的性能分析和优化案例,通过合理的性能测试和性能分析,最终提出了解决方案,为读者提供了深入了解程序、操作系统和存储系统交互优化的实际案例和分析过程。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能工程高手课》,新⼈⾸单¥59
《性能工程高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- 岁月神偷这个性能优化案例非常有代入感,讲解的十分详细,感谢庄老师的分享
作者回复: 谢谢!
2020-02-034 - 黄海峰听的过程打算问怎么把gc日志和其他io分开,看到最后发现这是个思考题。。。老师后面会搞个思考题汇总解答吗
作者回复: 哦,这个问题的答案其实就是JVM的一个参数 -Xloggc:<gc-log-file-path>。 也不奇怪,如果没有使用过这个参数,的确不知道它的存在。 思考题汇总解答也是个好主意,我们考虑一下。谢谢建议。
2020-01-202 - 张翠山gc 日志不能异步刷盘么?
作者回复: GC日志的写入操作的确是异步调用的,但是有意思的地方就是这里。特殊情况下,异步写入还是会被block。
2020-04-252 - 肖飞码字那是不是不设置这个 -Xloggc jvm参数就不会有这个io导致的问题?
作者回复: 是的。如果不设置这个参数,就不会有log,自然就不会有这个IO的问题了。
2020-04-09 - 钱这个案例分享好,同时也表明了计算机基础知识不牢固,确实干不了,需要从上往下一直深入的找原因。2020-03-114
- 明宝延迟的根本原因是JVM,把JVM干掉就好2021-06-141
- 罗辑思维平常:「JVM 写入 GC 日志文件--->文件缓存页面--->硬盘文件」 但是:「文件缓存页面处于 OS 回写状态,则对该页面的 write() 必须等待回写完成。」 然后:「可以在JVM,OS,硬件层面进行优化。」2020-03-07
收起评论