在调整应用程序的“内存和垃圾收集”设置时,应根据以下情况做出明智的决定:关键绩效指标。但是,报告的指标很多。选择哪一个,离开哪一个?本文旨在说明正确的KPI和合适的KPI来源。
什么是正确的KPI?
- 吞吐
- 延迟
- 足迹
通量
吞吐量是您的应用程序在给定时间段内完成的生产工作量。这就带来了一个问题,什么是生产性工作?什么是非生产性工作?
生产性工作:这基本上是您的应用程序在处理客户交易中花费的时间。
非生产性工作: 这基本上是您的应用程序在整理工作(主要是垃圾收集)上花费的时间。
假设您的应用程序运行了60分钟。在这60分钟中,假设2分钟用于GC活动。
这意味着应用程序已在GC活动上花费了3.33%(即2/60 * 100)
这意味着应用程序吞吐量为96.67%(即100 – 3.33)。
现在的问题是:可接受的吞吐量百分比是多少?这取决于应用程序和业务需求。通常情况下,目标应该是超过95%的吞吐量。
延迟
这是一个垃圾收集事件运行所花费的时间。该指标应从三个方面进行研究。
平均GC时间:平均花费在GC上的时间是多少? 根据经验10~100ms吧
最大GC时间:一次GC事件最多要花费多少时间?您的应用程序可能具有服务级别协议,例如“任何事务都不能运行超过10秒”。在这种情况下,您的最大GC暂停时间无法运行10秒钟。因为在GC暂停期间,整个JVM都冻结了-不会处理任何客户交易。因此,了解最大GC暂停时间非常重要。
GC时间分布:您还应该了解在什么时间范围内完成了多少GC事件(即,在0 – 1秒内完成了200个GC事件,在1 – 2秒之间完成了10个GC事件…)
空间占用,基于成本的优化策略
占用空间基本上是CPU消耗的数量。根据您的GC算法,根据您的内存设置,CPU消耗会有所不同。一些GC算法将消耗更多的CPU(例如Parallel,CMS),而其他算法(例如Serial)将消耗更少的CPU。
根据内存调优Gurus,您一次只能选择2个。
- 如果您想要良好的吞吐量和延迟,那么占用空间将会降低。
- 如果您想要良好的吞吐量和占用空间,则延迟会降低。
- 如果您想要良好的延迟和占用空间,那么吞吐量将会降低。
正确的工具
通过分析垃圾收集日志可以获取吞吐量和延迟。在http://gceasy.io/工具中上传应用程序的垃圾收集日志文件。该工具可以解析垃圾收集日志并为您生成吞吐量和延迟指标。以下是http://gceasy.io/工具的屏幕截图,显示了吞吐量和延迟:

其他,可以从监视工具(Nagios,NewRelic,AppDynamics等)获得足迹(即CPU消耗)。
参考自
https://blog.gceasy.io/2016/10/01/garbage-collection-kpi/
网友评论