9.1、前文回顾
上一篇文章通过案例分析,向大家介绍了在准备上线新系统时,如何根据预估的业务量和访问量来推算系统每秒的并发量。接下来,我们将探讨如何根据这个并发量来估算每秒钟请求对内存空间的占用,进而得出整个系统运行期间的JVM内存运转模型。
在得到这个JVM内存运转模型后,我们需要在系统上线前选择一个合适的机器配置,包括所需的内存大小以及为JVM堆内存空间分配合理的大小。这实际上是一项非常基本的技能,因为对于大型互联网公司的工程师来说,每次上线新系统都可能面临巨大的访问压力。
因此,掌握如何合理预估内存压力并选择相应的机器配置以及分配合适的内存大小是至关重要的。希望大家能够熟练掌握这一技能。
9.2、探究不合理内存设置引发的灾难故事
在上一篇文章中,我们讨论了一个正面的例子,即如何合理地设置内存大小。今天,我们将讨论一个反面的不合理设置内存大小导致的问题。
为了便于大家理解,我们仍然以支付系统作为案例来说明,其实思路是一样的。假设我们现在有一个前提,就是支付系统因为没有经过合理的内存预估,所以直接选择了一台2核4G的虚拟机来部署线上系统,而且只使用了一个机器。
然后,线上JVM给的堆内存大小,仅仅只有1G。扣除老年代之后,新生代实际上只有几百MB的内存空间。大家看下图。
我们继续使用昨天讨论的业务压力模型,即每天处理100万笔交易。在高峰期,每秒大约需要处理100笔支付交易。对于每笔交易,我们需要创建核心的支付订单对象