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等获得的信息,它一定程度上与响应调查的人员数量少有关。

在另一端,我们有7位受访者诚实地说他们转向了外部帮助。 在使用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

java 性能调优

java 性能调优_Java性能调优调查结果(第三部分)相关推荐

  1. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  2. java g1 收集调优_Java性能调优:充分利用垃圾收集器

    java g1 收集调优 JVM背后发生了什么,垃圾回收如何影响Java性能? 性能调优世界是一个危险的地方,一个JVM标志失衡,事情很快就会变得繁琐. 因此 ,我们决定求助于Java性能调优专家, ...

  3. java 性能调优_Java性能调优调查结果(第四部分)

    java 性能调优 这是本系列中的最后一篇文章,我们将分析我们在2014年10月进行的Java Performance Tuning Survey的结果.如果您尚未阅读第一篇文章,建议您首先阅读以下内 ...

  4. java 性能调优_Java性能调优调查结果(第二部分)

    java 性能调优 这是系列文章的第二篇,我们将分析2014年10月进行的性能调整调查的结果.如果您尚未阅读第一部分,我们建议从此处开始 . 第二部分将重点监视Java应用程序的性能问题. 特别是,我 ...

  5. java 性能调优_Java性能调优调查结果(第一部分)

    java 性能调优 我们在2014年10月进行了Java性能调优调查.该调查的主要目的是收集对Java性能世界的见解,以改善Plumbr产品. 但是,我们也很高兴与您分享有趣的结果. 我们收集的数据为 ...

  6. java8 虚拟机调优_Java虚拟机调优(八)-典型配置举例2

    背景: java虚拟机的东西,一直想分享下,弄了半天,太过理论了,也写不出太多特别的东西,看已经有朋友分享的很好了,还整理成了一个系统,就转载下,希望对朋友们有用,欢迎关注老王公众号[软件老王],关注 ...

  7. java dump分析工具_Java 性能分析工具 (2):Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  8. java性能分析工具_java性能分析工具

    如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jia ...

  9. 开源java性能分析工具_Java性能监控:您应该知道的5个开源工具

    开源java性能分析工具 鲜为人知但有用:开源应用程序性能监视的状态 对于任何应用程序来说,最重要的事情之一就是性能. 我们要确保用户获得他们能获得的最佳体验,并想知道我们的应用已启动并正在运行. 这 ...

最新文章

  1. Java面试题技术类一
  2. python提高办公效率-【纯干货】提高Python运行效率的小窍门
  3. Android组件化开发实践(九):自定义Gradle插件
  4. Activity和Service通信 Bind方式
  5. LeetCode动态规划 杨辉三角
  6. python模式匹配算法_详解Python 最短匹配模式
  7. 【资源下载】DeepMindUCL深度学习与强化学习进阶课程
  8. C#综合揭秘——细说多线程(下)(转载)
  9. 为什么设置 height 100% 不起作用
  10. 摄像头云台的设计,组装与使用方法
  11. 算法复杂度和合并果子题解
  12. 2020蚂蚁森林自动收能量-保持更新
  13. 某个IP地址的十六进制表示是C22F1481,试将其转换为点分十进制的形式.这个地址是哪一类IP地址?
  14. 关于 PoW 和 PoS
  15. HTML 如何让图片自动改变大小,CSS如何设置图片的大小
  16. java工具类 - word内容文本替换
  17. (十)Intellij 远程调试 a bug
  18. 爬虫在遇到post请求时的一种解决{“code“:40005,“msg“:“req json error“}问题的思路
  19. 嵌入式C设计模式---状态机设计模式
  20. 【方法】如何使用DeepMask和SharpMask

热门文章

  1. P6257-[ICPC2019 WF]First of Her Name【AC自动机】
  2. P1197-星球大战【并查集,图论】
  3. 纪中C组模拟赛总结(2019.7.6)
  4. 【动态规划】【递归】取数字问题 (ssl 1644)
  5. 高等数学超入门学习笔记
  6. Oracle入门(五D)之如何设置show parameter显示隐含参数
  7. JAVA面试常考系列二
  8. js的字符串和变量拼接
  9. Spring中的Bean配置、属性配置、装配内容详细叙述
  10. java实现打印等腰三角形