Java性能调优调查结果(第三部分)

这是该系列文章的第三篇,我们将分析2014年10月进行的调查的结果。如果您尚未这样做,我建议从该系列的前两篇文章开始: 问题严重性分析和监视域分析 。 这篇文章着重于故障排除/根本原因检测。

本调查部分的背景:意识到性能问题并了解其对最终用户的影响足以采取行动后,请执行以下过程:

  • 重现问题。 您很少从足够的信息开始,因此第一步通常涉及重现问题以开始收集更多证据。
  • 收集证据。 要了解实际情况,您需要收集更多信息(例如,通过日志记录,线程/堆转储等)来了解情况。
  • 解释证据。 在收集了证据之后,对其进行任何理解可能仍然很棘手。 查看您的第一个堆转储并尝试找出导致内存泄漏的实际原因是一个很好的示例,其中解释部分可能会花费很多时间。
  • 将证据与实际根本原因联系起来。 在最终弄清证据之后,您可以开始查找导致实际问题的实际代码或配置项的链接。

上述过程通常是完全非正式的,但是在大多数情况下还是存在的。 为了了解情况,我们通过询问受访者以下问题来分析当前状况:

  • 您能够重现该问题吗?
  • 您如何收集证据以找到根本原因?
  • 您使用了哪些工具来收集证据?
  • 真正的根本原因是什么?

重现问题。

因此,正如我们所见,为了获得证据,您首先需要重现问题(最好随意)。 当我们问这个问题时,受访者说:

复制问题的能力

我们可以看到9%的受访者甚至不需要重现该问题,这可能是因为已经有足够的证据。 但是,有27%的听众无法重现该问题 ,这为解决问题的道路设置了一个非常讨厌的障碍–无法重现该问题,大多数故障排除工具会让您空手而归。 在这种情况下,整个过程常常成为痛苦的反复试验的噩梦。

用于收集证据的工具和技术

当您能够重现问题时,下一步的目标是收集更多证据。 为此,存在各种各样的工具和技术。 在我们的调查中,我们要求受访者列出其武器库。 284位受访者列出了以下1,101个选项:

用于找到根本原因的工具

最常见的证据来源显然是申请日志-71%的受访者确认这是使用的来源之一。 这不会让任何人感到惊讶,尤其是当您回想起大多数受访者具有工程背景时。 毕竟,应用程序日志是由开发人员自己编写的,因此这是一个相当熟悉的领域,可以开始解决任何问题。

证据收集的第二种最常用的技术是使用JVM内置工具 (例如jconsole,jmc,jstat,jmap等)。 60%的受访者正在使用这些工具来寻找实际的根本原因。 如果我们再次回忆起大多数受访者是工程师,那么这又再次变得有意义-JVM嵌入式工具对于工程师来说是众所周知的,因此比OS内置工具可能更喜欢使用。

分析器声称在领奖台上排名第三-答案中有46%列出了诸如Yourkit和JProfiler之类的工具。 的确,如果您能忍受它们构成的开销,则分析器在许多情况下都是适合该工作的工具,因此该职位应有充分的理由。

接下来,是时候分析堆转储和线程转储了。 分别有39%和36%的响应列出了转储分析作为使用的技术之一。 考虑到该领域中的底层工具,多少使这些工具最终被使用是令人惊讶的。

查找根本原因所涉及的下一组工具和技术包括GC日志,调试器,数据库日志和OS级工具。 在25%至32%的案例中提到了这些工具。 特别是OS工具出人意料地不受欢迎–考虑到您可以通过sar,top,iostat等获得的信息,它一定程度上与响应调查的人员数量少有关。

在另一端,我们有七位受访者诚实地说他们转向了外部帮助。 在使用APM工具设法找到根本原因的受访者中,有 31位,即11% 。 这与我们的经验相符–当前的APM工具擅长于评估性能事件的影响,尤其是根据用户体验来衡量时。 大多数APM提供程序还擅长在基础架构中定位故障节点。 但是,在此级别上,APM提供的见解通常会停止,而其他各种工具也将接管。

此阶段使用的大量工具肯定超出了我们的期望。 一个普通用户在设法收集足够的证据之前使用了不少于四种不同的工具

实际根本原因

我们要问的最后一个问题是找出触发性能事件的真正根本原因。 我们收到的778个回复分为以下几类:

绩效问题根源

在本节中,我们必须承认,由以内存泄漏检测功能闻名的公司发起的调查肯定会使结果歪曲。 根据我们的结果,内存泄漏是迄今为止最常见的性能瓶颈,我们实际上拒绝相信自己。

接下来的两个根本原因是一致的-创建太多数据库查询或效率低下的数据库查询实际上符合许多人的期望。 36%的受访者将这些问题之一列为当前性能问题的根本原因。

同步问题非常普遍,其中有24%的受访者认为同步不良是造成性能瓶颈的根本原因。 正如我们最近在该领域发布的解决方案一样,它很好地证明了我们自己的测量结果。 除此之外,考虑到大多数Java EE开发人员应该与并发算法完全隔离,这仍然是一个令人惊讶的结果。

接下来列出了缓存不良和GC效率低下的问题,分别有22%和21%的受访者将这些问题视为根本原因。 确实可以将这两者一起看待,因为前者经常触发第二个-构建不良的缓存往往会浪费大量时间,从而引发恶性循环,使GC难以应对。

解释其余的根本原因将使职位的长度超出合理的长度。 还有一件值得注意的事情是,可观的数量(10%)的受访者诚实地说他们不知道是什么原因导致了绩效错误。 这再次证实了以下事实:根本原因检测是一个复杂的领域,迫切需要改进工具。

翻译自: https://www.javacodegeeks.com/2014/11/java-performance-tuning-survey-results-part-iii.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

划分树

昨天的杭电多校联合训练热身赛的一道题,求区间的中位数,快排会超时,划分树的模版题。。 划分树是一种基于线段树的数据结构。主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k大值 。划分树和归并树都是用线段树作为辅助的…

Canvas事件绑定

canvas事件绑定 众所周知canvas是位图,在位图里我们可以在里面画各种东西,可以是图片,可以是线条等等。那我们想给canvas里的某一张图片添加一个点击事件该怎么做到。而js只能监听到canvas的事件,很明显这个图片是不存在与dom里面…

控件注册 - 利用资源文件将dll、ocx打包进exe文件(转)

很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个exe,点击直接运行呢?就像很多安全控件,如支付宝的aliedit.exe那样。 现在介绍一种使用资源文件,将…

Canvas-图片旋转

Canvas-图片旋转 众所周知canvas是位图,你可以在里面渲染你要的东西,不过你只能操作canvas的属性来进行编辑。就是说你并不能操作画进canvas的东西,例如我在canvas里添加一幅画,我现在想将那幅画移动10px,我们并不能直…

CSS3实现多页签图片缩放切换效果

多页签切换效果,图片缩放,鼠标移动到图片上后显示文字内容等等,效果很集中呐 截图如下: 下载地址:http://www.lanrenzhijia.com/js/css3/2012/0718/602.html 预览地址:http://www.lanrenzhijia.com/yulan/2…

Angular使用总结 --- 如何正确的操作DOM

无奈接手了一个旧项目,上一个老哥在Angular项目中大量使用了JQuery来操作DOM,真的是太不讲究了。那么如何优雅的使用Angular的方式来操作DOM呢? 获取元素 1、ElementRef --- A wrapper around a native element inside of a View. 在组件…

非首屏图片延时加载

目标 减少资源加载可以明显的优化页面加载的速度,所以可以减少页面载入时立即下载的图片的数量,以提高页面加载速度,其他的图片在需要的时候再进行加载。 思路 想要实现以上的目标,有几个地方需要思考。 1、如何判断哪些图片需要…

具有链接资源的Spring RestTemplate

Spring Data REST是一个了不起的项目,它提供了一些机制来将基于Spring Data的存储库中的资源公开为REST资源。 使用链接资源公开服务 考虑两个简单的基于JPA的实体,课程和教师: Entity Table(name "teachers") public class Tea…

用户会话,数据控件和AM池

最近,有人问我有关应用程序模块池的有趣问题。 众所周知,AM池包含用户会话引用的应用程序模块实例,这允许会话在后续请求时从池中获取完全相同的AM实例。 如果应用程序中有多个根应用程序模块,那么每个模块都将拥有自己的AM池&am…

用 CSS 实现元素垂直居中,有哪些好的方案?

DIV居中的经典方法 1. 实现DIV水平居中 设置DIV的宽高,使用margin设置边距0 auto,CSS自动算出左右边距,使得DIV居中。 1 div{ 2 width: 100px; 3 height: 100px; 4 margin: 0 auto; 5 } 缺点:需要设置div的宽度 2.…

使用wss和HTTPS / TLS保护WebSocket的安全

是这个博客的第50条提示,是的! 技术提示#49说明了如何使用用户名/密码和Servlet安全机制保护WebSocket的安全。 本技术提示将说明如何在WildFly上使用HTTPS / TLS保护WebSocket。 让我们开始吧! 创建一个新的密钥库&#xff1a…

Java性能调优调查结果(第二部分)

这是系列文章的第二篇,我们将分析2014年10月进行的性能调整调查的结果。如果您尚未阅读第一部分,我们建议从此处开始 。 第二部分将重点监视Java应用程序的性能问题。 特别是,我们尝试回答以下问题: 人们如何发现性能问题&#x…

简单的css缩放动画,仿腾讯新闻的分享按钮和美团app底部的图标样式

最近看到一些好看的hover的图形缩放效果。然后自己就写了下,发现这2种效果都不错。如果伙伴们更好的实现方式可以在下面留言哦~ 还有美团的效果,我就不展示了,喜欢的可以去app应用上看看。 这两种效果,其实实现的原理是一样的&…

Java性能调优调查结果(第一部分)

我们在2014年10月进行了Java性能调优调查。该调查的主要目的是收集对Java性能世界的见解,以改进Plumbr产品。 但是,我们也很高兴与您分享有趣的结果。 我们收集的数据为进行冗长的分析提供了素材,因此我们决定将结果划分为一系列博客文章。 这…

asp.net ViewState详解

ViewState是一个被误解很深的动物了。我希望通过此文章来澄清人们对ViewState的一些错误认识。为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用一些例子说明我文章中的观点,结论。比如我会用静态控件(…

windows下命令行修改系统时间;修改系统时间的软件

找了很久,都没有找到,还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片. 而我由于某些原因想自动化修改系统时间,所以找windows下修改系统时间的软件 没有找到. 有一个 意天禁止修改系统时间开发包(系统时间保护组件) 1.0.0.1 ,可以禁…

如何摆脱JavaFX中的重点突出显示

今天,有人问我是否知道摆脱JavaFX控件(分别是按钮)的焦点突出的方法: 有关此问题的大多数文章和提示建议添加: .button:focused {-fx-focus-color: transparent; }但是使用这种样式,仍然会留下这样的光芒…

Android工具HierarchyViewer 代码导读(3) -- 后台代码

在上文中&#xff0c;我们讲解了如何把HierarchyViewer的项目导入到Eclipse中&#xff0c;以便更高效阅读代码。本文将讲解HierarchyViewer的后台代码&#xff0c;建议大家可以先阅读<Android工具HierarchyViewer代码导读(1) -- 功能实现演示>一文, 其中的代码演示了Hier…

阿里巴巴使命、愿景、价值观、绩效管理中的六大价值观、

阿里巴巴的使命 让天下没有难做的生意 阿里巴巴的愿景 分享数据的第一平台幸福指数最高的企业“活102年”阿里巴巴的价值观 我们坚持“客户第一、员工第二、股东第三”。 阿里巴巴的六脉神剑&#xff08;绩效管理中的六大价值观&#xff09; 公司的“六脉神剑” 客户第一&#…

在命令行上操作JAR,WAR和EAR

尽管Java IDE和许多图形工具使查看和操作Java归档文件&#xff08;JAR&#xff0c;WAR和EAR&#xff09;文件的内容比以往更加容易&#xff0c;但有时我还是更喜欢使用命令行jar命令来完成这些任务。 当我必须重复做某事或作为脚本的一部分来做时&#xff0c;尤其如此。 在本文…