#干货文:JAVA内存调优的KPI

当我们在进行Java应用程序的内存和垃圾收集调优时,应该根据关键性能指标做出一系列的决定。但有大量的指标; 选择哪一个,抛弃哪一个?本文将解释内存调优正确的KPI。
写这篇文章之前,我推荐下自己创的一个交流裙,每天群内直播分享课!我是一名从事了5年java开发的全栈工程师,目前在做线上教育讲师,年初整理了一份最适合2018年学习的java干货,有想要学习Java的同学,关注小编vx公众号“java梦想”,私信【学习】即可免费领取本文一整套系统的Java学习教程!
在这里插入图片描述

内存调优的KPI包括: 吞吐量,响应时间和内存空间占用.

A. 吞吐量

吞吐量是指应用程序在给定的时间段内完成的生产性工作数量。这就带来了一个问题什么是生产性工作?非生产性的工作又是什么?

生产性工作: 应用程序在处理客户事务上花费的时间。

非生产性工作: 应用程序在程序本身事务管理工作(主要是垃圾收集)上花费的时间。

假设你的应用程序运行10分钟。在这10分钟里,假设1分钟用于GC活动。

这意味着应用程序在GC活动上花费了10%(即1 / 10 * 100)

这意味着应用程序吞吐量为90%(即100 - 10)。

现在的问题是:你可接受的吞吐量百分比是多少?它取决于应用程序和业务需求。通常,应该将目标设置为95%以上的吞吐量。
在这里插入图片描述

B. 响应时间

这是单个垃圾收集事件运行所花费的时间。这个指标应该从三个方面来研究。

平均GC时间:在GC上花费的平均时间是多少?

最大GC时间:在单个GC事件上花费的最大时间是多少?你的应用程序可能是服务级别协议,例如“任何事务都不能超过10秒”。在这种情况下,你的最大GC暂停时间不能运行10秒。因为在GC暂停期间,整个JVM会冻结——不会处理任何客户事务。因此,了解最大GC暂停时间非常重要。

GC时间分布:你还应该了解在什么时间范围内(即在0 - 1秒内完成300个GC事件,在1 - 2秒内完成20个GC事件…)

在这里插入图片描述
C. 内存空间占用

内存占用基本上就是CPU消耗的总量。基于你选择的GC算法和内存设置,CPU消耗将会有所不同。一些GC算法将消耗更多的CPU(如Parallel, CMS),而其他一些算法(如Serial)将消耗更少的CPU。

你一次只能选择其中的两个:

如果你想要良好的吞吐量和响应时间,那么内存占用就会变差。

如果你想要良好的吞吐量和占用空间,那么响应时间就会变差。

如果你想要好的响应时间和占用空间,那么吞吐量将会变差。

猜你喜欢

转载自blog.csdn.net/javam16/article/details/82817497
今日推荐