`
weitao1026
  • 浏览: 1053491 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 应用发布后,需要关注的7个性能指标

阅读更多

在某个重大发布之后,都需要记录相应的指标,本文介绍了最重要的几个Java性能指标,包括响应时间和平均负载等。为理解应用程序在生产环境中如何运行,就需要遵循一些 Java性能指标。 

在以前,当软件被发布后,开发者是没有方法去了解它在生产环境中的运行情况;而现在,几乎任一个你可以想到的指标都可以被监测和报告。时下,开发者面临的问题并不是缺乏信息,而是信息过载、过大。因此在数百台服务器同时工作的情景下,跟踪记录信息就变得越来越困难,虽然多数开发者为了深刻理解产品系统仍旧需要利用日志文件,但依然阻挡不了它们逐步被取代的命运。 

本文整理了一些重要的指标,使开发者在不借助任何日志文件的情况下,便于理解应用程序在生产环境中运行的具体过程。谈到对 Java 性能的影响,除了像用户负载(或者 AWS 云服务器停机)这样的外部因素,新功能发布可能是最常见的诱因。所以在那些新功能发布之后的敏感时段,遵循相应准则变得更为关键。 

数字至上 
在逐个讨论指标之前,先来强调一个重要问题。有这样一个观点:如果某个观点可以得到数字支持,那么它一定是毋庸置疑的。但是这里存在的问题是,当给你呈现时,很多因素会歪曲你对数据的理解。这么说可能有点抽象,这里可以对比这两个测量用例:首先,在一个简单的时间序列中,观察某一个特定基本指标如何随着时间推移而变化;其次,从不同的角度观察数据,并保存关注的性能百分比,底线就是一定要关心留意的那个指标所产生的影响,并给以完整性检查以便对其评估。 

例如,假设我们正在观察中值/50百分点处的事务响应时间,因为该点的响应时间已被广泛用作指示符,很多公司将其作为主要KPI之一。在实际中,若单个页面浏览人数达到几十及以上(一般远远超过40),就意味着该用户有99.999...%的可能会经受比中值更差的结果(数学公式可简单的表示为:1 –(0.5 ^ 40) 。因此什么百分点更有意义呢?即使观察点设在第95的百分点,然后你的单页面浏览人数远大于40,那么大部分的用户仍会经受比之前更糟糕的响应时间。若符合多个页面浏览量,事情会更加复杂。想阅读更多关于百分点的知识,了解其对数据的误导,可点击此处进入Gil Tene 的博客。 

接下来我们来仔细解读指标的选择,看看它们各自代表什么,并学习如何来理解这些指标。 

1. 响应时间与吞吐量 
响应时间用来衡量应用程序中的事务处理速度,它也可以从 HTTP 请求层和数据库层来观察。有些最慢的查询需要最优化解决,而响应时间可以缩小该查询的范围。吞吐量从另一个角度观察处理过程,并显示应用程序在给定时间域中处理多少请求,通常单位为每分钟(cpm)。 

测量响应时间的方法之一就是使用像 New Relic 或者 AppDynamics(就是曾在以前的博客讨论的)那种 APM(应用性能监控工具),通过这些工具,可以追踪平均响应时间,并可以直接在主报告仪表板上与昨日或者上周的平均响应时间作比较,这些比较有助于查看新的部署如何对应用程序造成了影响。另一种方法是通过测量网页处理的百分位数,来测量 HTTP 请求完成响应所需的时间。 

也可以内部监测响应时间,但是需要硬代码,例如通过 Dropwizard 指标发送数据并在 Graphite 上发布。尽管看来将这些数据和其他标准关联时会出现最有用的见解,但更多的见解仍涵盖在接下来的方法中。 

要点1: 确保所使用的采集方法可以实现从不同角度观测数据,并开始进入百分位层面。 

可行工具: 

 


 

 

图为 OneAPM 上监控到的 Java 应用程序响应时间和吞吐量


2.平均负载 
第二个广泛使用的衡量指标就是服务器的平均负载。平均负载习惯上分成3部分,在最后的1、5和15分钟(从左到右)显示其结果。只要分数低于机器内核的数量,就是无压力状态,一旦超过内核数,就意味着机器处于压力状态。 

平均负载除了可以简单测量 CPU 利用率,更着重于考量每个内核目前在队列中有多少进程。某内核利用率达100%,但是却即将结束任务,而另一内核在队列中还有6个进程要处理,这两种情况是截然不同的。CPU 这一概念并没有涵盖其区别,但是平均负载却可以从大局中考虑此问题。 

若在 linux 系统上跟踪平均负载情况,一个极好的方式就是通过 Hisham Muhammad 利用 htop 完成。丰富的色彩加上生动的视觉化效果,瞬间使得命令行有了 NASA 仪表板的即视感。 

要点2: 要确定负载,仅靠资源利用率是不够的,还需要格外注意以便充分了解队列中的进程。 

可行工具: 

 


 

 

图为在一台服务器上运行 htop 以检测负载,平均负载显示在界面的右上角。


3. 错误率(及如何处理) 
错误率观测有多种方法,而多数开发人员都利用高层次标准——在整个应用层考察错误率,比如在所有 HTTP 请求中考察失败的 HTTP 处理总数。但是还有一个经常被忽视的具体点:特定事务的错误,这与应用程序的运行状况有直接的影响。代码中某一特定方法失败、生成日志错误及发生异常的次数占总调用次数的比重,也要予以显示。 

 

图为 OneAPM 对事务中的错误率监控,随时间监控应用错误率情况。


但是这些数据对其本身并没有太大的意义。第一步,从正在处理的事件中优选出最紧急的一件,找到日志错误或异常;第二步,从实际根源处着手,并予以修复。而且基于此问题,已有相应的解决办法。有了OneAPM ,就没有必要根据日志文件去找错误提示,因为关于服务器状态的所有信息都会在同一界面显示,包括堆栈踪迹、实源代码、变量值及每个错误调用的应用实例。 

要点3: 要解决错误率增长的根本原因,仅靠日志文件是不够的,为了得到大量关于我们所需指标的数据,还需要利用一些错误率监控工具。 
4. GC率和中止时间 
垃圾回收器行为异常,是导致应用吞吐量和响应时间突然下降的主要原因之一。读者想要了解关于垃圾回收过程的更多知识和相关的标准,可阅读 深入理解Java虚拟机(第2版)。 

分析 GC 日志文件是理解 GC 中止时间和频率的关键。如果不自行分析,或者使用类似于 jClarity 的工具,这种指标是没有办法直接使用的。所以要确保使用合适的 JVM 参数打开 GC 日志采集,以便分析。 

要点4: 请记住,分析不同指标的相关数据,要保持开阔的思维,这样容易发现它们之间的互相影响。 

可行工具: 


4. GC率和中止时间 
垃圾回收器行为异常,是导致应用吞吐量和响应时间突然下降的主要原因之一。读者想要了解关于垃圾回收过程的更多知识和相关的标准,可阅读深入理解Java虚拟机(第2版)。 

分析 GC 日志文件是理解 GC 中止时间和频率的关键。如果不自行分析,或者使用类似于 jClarity 的工具,这种指标是没有办法直接使用的。所以要确保使用合适的 JVM 参数打开 GC 日志采集,以便分析。 

要点4: 请记住,分析不同指标的相关数据,要保持开阔的思维,这样容易发现它们之间的互相影响。 

可行工具: 


5. 业务指标 
应用的性能不是仅仅依赖于快速响应,也非错误率,另一个方面就是业务指标。其业务责任也不是只由产品/销售人员全权负责。收入、用户数、与应用中特定区域的互动等,这些都对理解软件的运行极为关键。若要从业务角度观察,你所配置的修复方法和新功能是如何影响底线的,以上因素与新部署的时间标记一起作用这一点至关重要。我们固然希望情况向好的方向发展,但假如事态恶化,一旦你把所有数据都存在同一位置,要想知道哪里出了问题需要修复,这就相当容易了。 

此外,将业务指标与错误率、延时等数据实时连接起来,这种能力是极有力度的。然后会让人不由自主地深入研讨到底是什么错误或异常造成了这次最主要的问题,接着就可以按照对业务目的影响优先考虑它们。想要搞清楚遍布各处的所有异常及日志错误,就得使用集成开放的监测工具。所以,保持数据开放,使其可以输出到选择服务中,这是极其重要的。 

假如你要利用 Graphite 将汇报的业务指标集中化,这就要求你所使用的工具对发送数据开放。例如,我们的工程组就将汇报指标通过StatsD发布出来,因此相应数据就可以指向任一用户选择使用的仪表板上。 

要点5: 先入先出式数据已是过去式,在使用指标时,也需要让它们和其他来源的数据相关联。 
可行工具: 


6.正常运行时间和服务运行状况 
该指标为整体的工作定下基调。除用作警示媒介外,它还可用于在一段时间内自定义 SLA,以便观察当为用户提供功能完备的服务时所用时间的百分比。 

我们通过运行使用 servlet 的 Pingdom 来解决这个问题,它会对所有应用程序事务中参与的服务进行检查,包括数据库和 S3 等。 

要点6: 正常运行时可能是二进制指标,但是通过聚合多个值的方式在堆栈中定位薄弱点。 

可行工具: 

 


 

 

图为用 Pingdom 监测正常运行时和应用运行状况。


7.日志规模 
以上讨论到的指标除了 GC 都没有提到日志,但这个仍然不可忽略。日志文件的副作用就是它们一直在增长,如果不留意其大小以及抑制,那么后果不堪设想。当日志不受控制,磁盘驱动器很可能被撑爆,服务器中会充斥着垃圾文件,运行缓慢,因此,一定要密切关注日志规模,否则随时会崩溃。 

一个广泛使用的解决办法就是,使用 logstash 等将服务器上的日志分块,再将其送入Splunk、ELK 等其他日志管理工具中存储,或者直接简单地存入 S3。另一种方法就是在某一时间将日志文件翻转再截断,但此法要冒信息丢失的风险。和大部分开发人员一样,目前我们还必须依赖于日志。 

要点7: 日志会给人带来很大的困扰,尤其是当你用某些外部服务来处理日志时,你会被 GB 指控。这时就要重新考虑一下这个问题,还应该开始降低日志大小。 

最后的思考 
我们可以看到这一趋势:目前在产品中,应用里的数据采集器正逐渐脱离对日志文件的依赖。软件分析的新世界越来越开放,数据更加智能化,已不再是以前枯燥的数字,而是带有丰富的情境。我们很兴奋地看着世界的改变,并期待和你们一起共建崭新的未来。 

分享到:
评论

相关推荐

    企业级Java应用重要的4个性能指标

    【企业级Java应用重要的4个性能指标】 在企业级应用领域,Java仍然是许多关键业务系统的核心,尤其是在银行、政府等大型项目中。为了确保这些应用的稳定性和性能,应用性能管理(APM)成为了必不可少的工具。APM...

    精品专题资料(2021-2022年收藏)基于Java语言开发的个性化股票分析技术能量潮指标OBV.docx

    【Java语言开发个性化股票分析技术:能量潮指标(OBV)】 能量潮指标(On-Balance Volume,简称OBV)是一种技术分析工具,由美国投资分析家Joe Granville提出,主要用于通过观察股票成交量的变化来预测股价的趋势。...

    javamelody资料包

    JavaMelody是一款强大的Java应用程序性能监控工具,它可以帮助开发者实时监测和分析应用的运行状态,包括请求量、响应时间、内存使用、线程状态、数据库查询等关键指标。本资料包包含了搭建JavaMelody监控所需的全部...

    2021-2022收藏的精品资料基于Java语言开发的个性化股票分析技术能量潮指标OBV.docx

    ### 基于Java语言开发的个性化股票分析技术:能量潮指标(OBV) #### 一、能量潮指标(OBV)概述 能量潮指标(On Balance Volume, OBV)是一种技术分析工具,用于评估市场情绪及资金流向,进而预测价格趋势。此...

    JAVA性能瓶颈和漏洞检测

    JProbe Suite是一种能节省开发时间、降低开发费用、改善Java应用运行速度及和扩展能力的强大工具套件,在全球各地拥有大量用户。通过JProbe Suite,开发和测试小组可以全面诊断应用性能、内存使用、线程及代码覆盖等...

    JAVA,CRM客户关系管理系统

    在这个基于JAVA开发的CRM系统中,我们可以看到JAVA技术在企业级应用中的强大功能。 **JAVA技术在CRM系统中的应用** JAVA作为一种跨平台的编程语言,因其稳定性和安全性在企业级应用中备受青睐。在CRM系统中,JAVA...

    基于Java的数据库应用框架的研究设计.pdf

    首先,我们需要明确基于Java的数据库应用框架的设计目标,即提高数据库操作的效率和安全性。Java语言因其跨平台特性、良好的安全性以及成熟的社区支持,在开发企业级应用中占据了重要的地位。通过利用Java语言,该...

    Java销售管理系统源码+程序

    Java销售管理系统是一款基于Java编程语言开发的业务应用软件,它主要设计用于帮助企业高效地管理和跟踪销售...通过学习和理解这个系统的源码,开发者不仅可以提升Java编程技能,还能深入了解企业级应用的设计和实现。

    Java面试简历项目及模板

    在Java开发领域,面试是求职过程中至关重要的一环。一份精心准备的简历和具有说服力的项目经验能够大大提升你的竞争力。下面将详细讨论如何构建一个突出的Java面试简历以及如何展示项目经验。 首先,让我们从简历的...

    K_means推荐算法的java实现

    在Java中实现KMeans算法,通常需要关注以下几个核心步骤和关键组件: 1. **初始化簇中心**:随机选择一部分数据点作为初始的簇中心。这通常是算法的第一步,因为簇中心的选择会影响最终的聚类结果。 2. **数据分配...

    个推java代码

    1. **SDK集成**:首先,开发者需要在项目中引入个推的Java SDK,这通常通过Maven或Gradle等构建工具完成。添加依赖后,需要配置相应的AppID、AppKey和MasterSecret,这些信息是开发者在个推官网注册应用后获得的。 ...

    java基于c/s的图书管理系统

    在这个图书管理系统中,Java语言被选为开发工具,因为它具有跨平台性、丰富的类库和强大的面向对象特性,非常适合开发这种需要与用户交互的桌面应用。 图书管理系统的核心功能之一是借书与还书。借书功能涉及到读者...

    Java项目CRM(客户关系管理系统)

    【Java项目CRM(客户关系管理系统)】是一个基于Java技术栈的软件应用,旨在帮助企业管理和优化与客户的交互。CRM系统的核心目标是提高效率,提升客户满意度,最终促进业务增长。在这个项目中,开发者采用SSH...

    Java书籍借阅管理系统

    **Java书籍借阅管理系统**不仅能够有效地提升图书管理的工作效率,还能为用户提供更好的服务体验。通过采用先进的Java技术和成熟的开发工具,结合软件工程的最佳实践,该系统为图书馆和书店提供了一个强大、可靠的...

    Java_APM应用性能管理工具,用于大规模分布式系统.zip

    3. **丰富的兼容性**:支持多种框架和中间件,如Spring、Hibernate、MyBatis、Tomcat、Dubbo等,覆盖了大部分Java应用场景。 4. **强大的可视化**:提供Web界面展示监控数据,包括服务拓扑、事务分布、调用链详情等...

    java实现推荐系统源码

    推荐系统是现代大数据应用中的重要组成部分,特别是在电商、媒体、音乐和电影等领域,它通过分析用户的历史行为和偏好,为用户提供个性化的内容推荐。本项目基于Java实现了一个推荐系统,主要聚焦于用户基的推荐算法...

    JFreeChart Java仪表盘制作,源码,类包,效果图整体打包

    **JFreeChart:Java中的数据可视化利器** JFreeChart 是一个功能强大的开源Java库,用于创建高质量的数据可视化图表。...对于任何需要在Java应用中实现数据可视化的开发者,这都是一个不可多得的学习和实践资源。

    java毕业设计之个性化影片推荐系统源码(ssm+mysql+说明文档+LW).zip

    本项目是一个基于Java技术的个性化影片推荐系统,采用Spring、SpringMVC和MyBatis(SSM)框架进行开发,并结合MySQL数据库存储数据。这个毕业设计涵盖了前后端完整的源码和数据库文件,确保项目能够正常运行,同时也...

    Java8版本协同过滤算法.zip

    在IT领域,推荐系统是大数据应用的一个重要方向,主要用于为用户个性化推荐感兴趣的内容或产品。协同过滤(Collaborative Filtering, CF)算法是推荐系统中最常用的一种方法,它基于用户行为历史数据,寻找用户之间...

Global site tag (gtag.js) - Google Analytics