你好,我是庄振运。
我们来继续学习生产实践中的案例。在生产实践中,为了降低公司运营成本,更好地利用系统容量,并提高资源使用率,我们经常会让多个应用程序,同时运行在同一台服务器上。
但是,万事有利就有弊。这几个共存的应用程序,有可能会互相影响;有时还会导致严重的性能问题。我就遇到过,几个程序同时运行,最后导致吞吐量急剧下降的情况。
所以,今天我们就来探讨,当多个 Java 应用程序共存在一个 Linux 系统上的时候,会产生哪些性能问题?我们又该怎么解决这些问题?
怎样理解多程序互相干扰?
为了更好地理解后面的性能问题,你需要先了解一下应用程序内存管理机制的背景知识。我们运行的是 Java 程序,所以先快速复习一下 Java 的 JVM 内存管理机制。
Java 程序在 Java 虚拟机 JVM 中运行,JVM 使用的内存区域称为堆。JVM 堆用于支持动态 Java 对象的分配,并且分为几个区域,称为“代”(例如新生代和老年代)。Java 对象首先在新生代中分配;当这些对象不再被需要时,它们会被称为 GC(Garbage Collection)的垃圾回收机制收集。发生 GC 时,JVM 会从根对象开始,一个个地检查所有对象的引用计数。如果对象的引用计数降为零,那就删除这个对象,并回收使用这个对象相应的存储空间。