性能工程高手课
庄振运
Facebook 性能优化和容量管理高级专家
24631 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
性能工程高手课
15
15
1.0x
00:00/00:00
登录|注册

27 | 多任务环境中的Java性能问题,怎样才能不让程序互相干扰?

THP
页面交换
页面扫描
页面回收
STW
GC
THP机制
页面交换活动
JVM暂停
Linux内存管理机制
JVM内存管理机制
运行中互相干扰
启动时互相干扰
操作系统的其他机制
动态调整THP
保护JVM的堆空间不被唤出到外部存储
预分配JVM的堆空间
多程序共存
思考题
解决方案
性能问题
性能问题分析与解决

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

你好,我是庄振运。
我们来继续学习生产实践中的案例。在生产实践中,为了降低公司运营成本,更好地利用系统容量,并提高资源使用率,我们经常会让多个应用程序,同时运行在同一台服务器上。
但是,万事有利就有弊。这几个共存的应用程序,有可能会互相影响;有时还会导致严重的性能问题。我就遇到过,几个程序同时运行,最后导致吞吐量急剧下降的情况。
所以,今天我们就来探讨,当多个 Java 应用程序共存在一个 Linux 系统上的时候,会产生哪些性能问题?我们又该怎么解决这些问题?

怎样理解多程序互相干扰?

为了更好地理解后面的性能问题,你需要先了解一下应用程序内存管理机制的背景知识。我们运行的是 Java 程序,所以先快速复习一下 Java 的 JVM 内存管理机制
Java 程序在 Java 虚拟机 JVM 中运行,JVM 使用的内存区域称为。JVM 堆用于支持动态 Java 对象的分配,并且分为几个区域,称为“代”(例如新生代和老年代)。Java 对象首先在新生代中分配;当这些对象不再被需要时,它们会被称为 GC(Garbage Collection)的垃圾回收机制收集。发生 GC 时,JVM 会从根对象开始,一个个地检查所有对象的引用计数。如果对象的引用计数降为零,那就删除这个对象,并回收使用这个对象相应的存储空间。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

多个Java应用程序共存于一个Linux系统可能导致性能问题,主要涉及内存管理机制、JVM的堆内存分配、GC暂停、Linux的页面回收和页面交换机制等。实验表明,当启动第二个程序时,其吞吐量急剧下降,GC暂停时间增加,可用内存下降,CPU空闲百分比降低。这是因为操作系统在分配内存时会不断检查空闲页面列表,当可用内存不足时,会触发页面回收,导致CPU开销和大量GC暂停。解决方案包括预分配JVM的堆空间、保护JVM的堆空间不被唤出到外部存储、动态调整THP。这些设计元素协同工作,才能获得最好的效果。文章重点在分析问题产生的复杂根因,对于读者快速了解文章概览并体现文章技术特点有很好的指导意义。

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

全部留言(7)

  • 最新
  • 精选
  • 罗辑思维
    老师的文笔也让想到两句诗:随风潜入夜,润物细无声。

    作者回复: 赞活学活用。哈哈

    2020-03-07
    2
  • 好吃不贵
    老师讲的非常赞,又重温了Linux的page reclaim部分。学到了好多,比如何时控制THP的开关,以及THP的缺点。习题猜测是文件系统预先读取很多小文件时有影响,比如小于4kB的文件,而通常预读有128kB,可能会造成浪费,比如大量读写磁盘,导致D状态,影响性能?不过只是猜测,希望到时候看到老师的统一习题解答:)

    作者回复: 基本靠谱。预读文件会占用Page Cache (or file cache),也浪费IO和Memory带宽;如果预读的数据没有被用到,就得不偿失了。

    2020-01-28
    1
  • 张翠山
    java应用程序运行时,发现一个现象cpu sys偏高,大约4到5,遇到这种问题。如何着手排查和优化?

    作者回复: CPU sys 高一般和OS的机制相关,比如我们曾经发现THP(Transparent huge pages) 会导致CPU sys变得很高。

    2020-05-04
  • 若镜
    老师 有经验说 非ibm系的jvm 堆内存 xms xmx最好设置成一样 以减少内存碎片 影响gc 不知是不是靠谱说? 内存碎片说 是不是和THP有关?

    作者回复: 这个建议:”xms xmx最好设置成一样“是有道理的,我也是这样建议的。我的理解是这个设置和THP不是直接相关的,应该是不同方面的考虑。

    2020-02-04
  • Joe Black
    请问文中说的程序吞吐量是什么意思?比如那个12K/秒,具体指的什么?是分配内存的调用吗?另外THP可以随时打开或关闭吗?我以为只能在系统启动时设定呢

    作者回复: 这里的吞吐量就是应用程序分派对象的速度,12K每秒,就是每秒钟能分配12K个对象。 THP是可以动态调整的,包括打开和关闭,也包括所包含参数的微调。

    2020-01-31
  • 黄海峰
    这篇干货了,以前看过好多关于jvm调优的文章或教程都没有提到这些知识点。。
    2020-01-28
    4
  • 这篇厉害,多个应用程序在同一台机器上,由于一台机器的各种资源都是有限的,多个应用程序之间即使不会发生争抢的现象,但是也会是一种彼消此涨的使用模式,老师讲的很细致,开眼了!
    2020-03-11
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部