你的位置:首页 > Java教程

[Java教程]从 4 个维度剖析:影响 Java 性能的那些因素


随着互联网行业的高速发展,现在的网站界面设计变得越来越酷炫。诚然,视觉上给我们带来的冲击,会对网站流量起到很大的作用。但是,如果后端服务满足不了突增的并发量,那么用户体验就会变得极差。

众所周知,做一个网站非常不容易。现在,Java 也是开发者最常用的编程语言之一,而且很多企业级的 IT 公司对 Java 的依赖程度也非常之高。太多的网站由于 Java 的性能问题导致了商业前景破灭,听起来很残酷,但这是一个不争的事实。那么问题来了,是什么原因导致了这些性能问题? 如何才能快速发现导致性能问题的根源呢?

对 Java 开发者来说,OneAPM 的 Application Insight 就是一款必备的 Java 性能优化工具 ,它可以从4个维度「1. Web 事务;2. 数据库;3. 外部服务;4.后台任务」来剖析系统在运行期间应用程序的一举一动。比如说,用户在访问应用时,每步操作都给你剖析的很清楚,耗时多少,占用多少资源,并且提供了历史数据供你做参考对比,让你对应用的运行情况一目了然,清清楚楚。

一般而言,我们对于性能的管理要经过两个步骤:1. 性能问题发现;2. 性能问题优化。Application Insight 首先就是找到产生性能问题的根源,接下来的性能优化过程就会变的非常简单。 OneAPM 也能够从多个维度准确定位出影响性能问题的根源,并给提供最终的解决方案。如图所示:

从 4 个维度剖析:影响 Java 性能的那些因素

我们可以在响应时间的总览视图中,清晰地看到4个维度「Web 事务,数据库,外部服务,后台任务」所对应的响应时间消耗情况,接下来,我们就可以针对每个维度对时间消耗情况进行深度分析。

1. Web 事务

从 4 个维度剖析:影响 Java 性能的那些因素

我们可以从视图中看到缓慢 Web 事务的响应时间占比、平均响应时间、性能指数、吞吐量等等,同时,会按照耗时长短给 Web 事务做一个排序,以列表的形式展示出来,这样你就可以轻松地找出哪些 Web 事务在执行过程耗时比较长,并且可以看到所提供的 Top5 Web 事物响应时间折线图。

然后,我们根据提供 Web 事务的性能指数数据就可以初步判断,用户在操作时的体验。到底 Web 事务在执行的过程中,时间都消耗在了什么地方。更重要的是,Application Insight 还提供了慢事务跟踪功能,点击慢事务跟踪列表中的名称,就可以查看详情,如下图:

从 4 个维度剖析:影响 Java 性能的那些因素

通过这张数据视图,展示了所跟踪到的慢事务的「 概要,详情,参数,SQL 」4 个指标的详情,我们通过点击详情这个指标,整个 Web 事务组件的调用关系以及每个步骤耗时的整体情况将直接展现在你的眼前,我们还可以看到每个步骤业务的调用关系,并以树形结构的方式进行展示,同时,可以展开方法跟踪功能,找到耗时比较严重的代码行,包括 HTTP 请求都可以清晰的看到。在整 Web 事务执行的过程中,我们将性能剖析结果以视图的方式进行展现,看清楚每段代码在执行中一举一动,以及它所占用资源的使用情况。

2. 数据库

从 4 个维度剖析:影响 Java 性能的那些因素

从数据库的视图中,我们会把对数据库操作以 Table Name 和 SQL 操作类型的格式,按照响应时间耗时长短进行排序,将耗时较长的数据以列表形式展示出来,并且可以看到每次数据库操作时的平均响应时间、总响应时间以及吞吐量情况,这样就可以找出排除 Web 事务的维度外,还会有哪些耗时较长的 SQL,让你尽收眼底。OneAPM 还给提供了 Top 5 数据库操作响应时间的视图,如下图所示:

从 4 个维度剖析:影响 Java 性能的那些因素

通过这些图表数据,我们可以动态的看到每次数据库操作对应用性能消耗的整体情况。除此之外,我们还针对慢的数据库操作,提供了慢 SQL 的跟踪功能,如图:

从 4 个维度剖析:影响 Java 性能的那些因素

从这张视图列表中,我们可以看到慢 SQL 的时间戳以及耗时情况。你还可以点击慢 SQL 的名称继续跟踪这条 SQL 的详细情况,如下图:

从 4 个维度剖析:影响 Java 性能的那些因素

在这里,我们就可以看到详细的 SQL 语句以及其执行的次数和范围,有了慢 SQL 跟踪功能提供的这些数据,那么找到 SQL 缓慢原因就会变的非常容易。当然,因为这些 SQL 都是跟业务建立者有关系,所以很容易判断出是程序的问题还是运维的问题。如果是程序问题,OneAPM 提供了此次操作的 Web 事务,如果是运维问题,也提供了慢 SQL 的跟踪功能。总的来讲,我们可以根据问题的原因,来优化我们的应用程序,这样效率必然会得到大大的提升。

3. 外部服务

从 4 个维度剖析:影响 Java 性能的那些因素

通过这张图表,我们可以看到通过 WebService、Rest 等方式调用的第三方服务的平均响应时间、吞吐量,还可以看到在调用接口时所消耗的时间,并且每个外部服务调用也会提供数据视图,如下图所示:

从 4 个维度剖析:影响 Java 性能的那些因素

响应时间和吞吐量图:展示该外部服务的响应时间和吞吐量变化情况

从 4 个维度剖析:影响 Java 性能的那些因素

调用者时间占比图:展示调用该外部服务的事务执行时间

从 4 个维度剖析:影响 Java 性能的那些因素

事务列表:展示调用该条外部服务的事务执行时间占比、响应时间和调用次数

从以上数据,我们可以得出结论,在性能消耗的角度上,耗时是主要发生在方法的调用方面,还是发生在接口那边。通过这些性能数据,我们就能够很快定位到导致应用性能问题的根本原因,再去解决问题话就会变得很轻松。

4. 后台任务

从 4 个维度剖析:影响 Java 性能的那些因素

从后台任务的视图中,我们可以看到在应用程序中比较耗时的任务,包括每个任务的平均响应时间、性能指数、吞吐量、响应时间占比等等。然后,我们在后台任务这个维度中,就可以发现那些比较耗时的执行任务,并提供相应的 Top 5 后台任务响应时间,吞吐量,CPU 使用率等动态折线视图。

从 4 个维度剖析:影响 Java 性能的那些因素

从上图中,我们可以找出非 HTTP 请求方法对于大量占用系统性能的瓶颈点,然后根据后台任务提供的 Top 5 响应视图,就能够直观的看到严重消耗性能的后台任务以及 CPU 的使用率和内存使用情况了。

通过后台任务性能消耗的剖析,我们还可以找出消耗资源比较严重的定时任务,对耗时的任务进行合理优化,那么应用就会变的更加流畅。

综合来讲,

通过对「Web 事务,数据库,外部服务,后台任务」 4 个维度的深度剖析,我们很容易找到影响 Java 系统缓慢的原因。在发现这些原因后,我们再去进行系统优化,整个处理问题的过程就会变的简单很多。

如果你非常关心系统性能消耗在哪个维度,或者是现在你的应用已经发生严重的性能问题,还迟迟找不到原因所在,那么赶紧注册一个 OneAPM 账号,安装 Application Insight 来感受一下吧! 不管你是做运维、开发还是测试 ,我们相信,使用 Application Insight 之后,一定会给你的工作带来惊喜和收获。

 

转自 http://news.oneapm.com/oneapm-java/