继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JAVA内存调优的KPI

小强聊架构
关注TA
已关注
手记 40
粉丝 9454
获赞 241

当我们在进行Java应用程序的内存和垃圾收集调优时,应该根据关键性能指标做出一系列的决定。但有大量的指标; 选择哪一个,抛弃哪一个?本文将解释内存调优正确的KPI。

内存调优的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。

你一次只能选择其中的两个:
如果你想要良好的吞吐量和响应时间,那么内存占用就会变差。
如果你想要良好的吞吐量和占用空间,那么响应时间就会变差。
如果你想要好的响应时间和占用空间,那么吞吐量将会变差。

打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP