这是系列文章中的最后一篇,我们将分析我们在2014年10月进行的Java Performance Tuning Survey的结果。如果您还没有阅读第一篇文章,我建议您首先阅读以下内容:

  • 性能问题的频率和严重性
  • 最受欢迎的监控解决方案
  • 查找根本原因的工具和技术

这篇文章打开了一些有趣的相关数据,并总结了结果。

复制是快速成功的关键

当您负责解决性能问题时,您需要证据来找到根本原因。 为了获得证据,您通常需要重现问题。 在调查中,我们询问了受访者是否能够重现该问题 :

  • 9%不需要复制,已经有足够的证据
  • 27%无法重现该问题
  • 64%设法重现了问题

在另一个问题中,我们问“ 找到并解决您面临的问题需要多长时间”。 平均而言,这花费了80个小时 。 我们分析了是否有27%无法重现该问题的人是否还在苦苦挣扎。 结果很明显:

  • 如果受访者能够重现问题,则平均需要65个小时
  • 如果响应者无法重现该问题,则 需要花费 113个小时或74%的时间才能找到根本原因并加以解决。

区别清晰可见。 造成这种差异的原因隐藏在故障排除过程中。 要解决问题,您需要证据,通常是从各种来源收集的证据,例如日志文件,线程转储或堆转储。 但是,只有能够重现此案(最好随意),您才能获得证据。 如果您无法重现问题,那么您将没有证据,而且武库中唯一的工具往往是良好的旧尝试和错误。 面对超过100,000行代码,您注定会在此过程中面临许多失败的尝试。

有些问题比其他问题要难。

受访者还向我们提供了他们正在解决的性能问题的根本原因。 我们研究了不同的问题,以了解某些问题是否比其他问题更难解决

让我们再次回顾一下,发现和解决问题的平均时间为80个小时。 按问题类型分类时,我们发现了以下内容:

  • 查找和修复最简单的问题与网络IO有关:平均花费51个小时。
  • 内存泄漏按花费的时间准确地排在平均水平:平均发现并修复一个泄漏要花费80个小时24分钟。
  • 另一方面是架构问题–根本原因与整体架构和HTTP会话膨胀有关,分别花费了98 和105个小时。 查找和解决原因的时间增加了大约100%

从极端来看,这实际上并不奇怪。 当您的体系结构引起性能问题时,修复程序本身往往很复杂且耗时,因此需要更多的时间来修复。 而且当您倾向于滥用网络时,它通常可以归结为一个恶意呼叫,您可以轻松地对其进行隔离和修复。

随机工具帮助

接下来,我们分析了用于解决某些潜在根本原因的工具和技术。 我们注意到,平均而言,用户不会尝试更多,至少四个不同的工具来收集证据并找到根本原因 。 最流行的工具和技术涉及日志分析,堆/线程转储和分析器。

当我们研究工具在各种潜在问题中的使用时,我们真的感到非常惊讶。 根本的问题和用于进行故障排除的工具之间几乎没有关联-列出了相同的工具,而频率与出现的问题无关。

最好的例子可能是线程转储分析。 这是收集有关并发问题的证据的好方法。 确实,解决并发问题的受访者中有52%使用线程转储分析作为根本原因分析来源之一。 但是例如,当眼前的问题是内存泄漏时,则有42%的情况列出了相同的线程转储分析。

或者,从工具的角度来看–与问题类型无关,有41-53%的受访者使用探查器来收集证据,与症状和根本问题无关。

从这些数据得出结论是很棘手的,但是看来证据收集和分析过程是非常非正式的,并且涉及使用该特定人员以前使用或听说过的工具和技术。

结论

进行这项调查是为了指导Plumbr的进一步发展。 对我们而言,主要结论基于调查的四个关键结果:

  • 查找和解决性能问题的平均时间为80小时
  • 对于76%的案例,大部分时间都花在了恶性的“试图复制-收集证据-解释证据”周期中。
  • 27%的情况无法复制。 在这种情况下,查找和解决问题所花费的时间增加了73%。
  • 证据收集过程是完全非正式的,平均涉及四个随机选择的工具

我们承诺从这里开始,并为上述问题提供解决方案。 使用Plumbr监视系统可立即将您定位到实际的根本原因,从而完全跳过“尝试重现–收集证据–解释证据”的周期:

我们当前的产品允许线程锁定,低效率的GC和内存泄漏,但是我们一直在扩展我们的产品,因此您将拥有一个安全网来应对影响JVM的所有性能问题。

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

Java性能调优调查结果(第四部分)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. java必读书籍_最佳5本Java性能调优书籍–精选,必读

    java必读书籍 为什么Java开发人员应该阅读有关性能调优的书? 当我很久以前第一次面对这个问题时,我以为以后会做,但是我很长一段时间都没有回过头来. 仅当我在用Java编写的任务关键型服务器端财务 ...

  9. 最佳5本Java性能调优书籍–精选,必读

    为什么Java开发人员应该阅读有关性能调优的书? 当我很久以前第一次面对这个问题时,我以为以后会做,但是我很长一段时间都没有回过头来. 仅当我在用Java编写的任务关键型服务器端财务应用程序中遇到严重 ...

最新文章

  1. Github 一夜爆火:这份金九银十 Java 面试手册我给跪了
  2. ProtonMail 开源其所有电子邮件应用程序
  3. STM32F103C8T6 CAN通信详解
  4. java反多态的代码_Java多态性代码详解
  5. 冒泡排序 java_冒泡排序Java版本
  6. 编程之美-快速费波拉契数列
  7. 为什么用jdbc插入数据为空_为什么气象数据推荐用 ModelWhale 处理
  8. 在Spring Boot中使用Spring Security实现权限控制
  9. [转]EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)
  10. mybatis从0到1--学mybatis看这一篇就足够
  11. 中南大学计算机大一学什么时候发,中南大学计算机学院2019年夏令营
  12. MySQL高级篇——锁的概述与案例应用
  13. 计算机认知神经科学,认知科学对视知觉的认识
  14. 这是计算机房吗 用英语怎么写,城镇英文怎么说_城镇的英文怎么写 - 沪江英语...
  15. 智慧矿山无人驾驶模块
  16. 刘可 寂寞才说爱歌曲试听 刘可 寂寞才说爱MP3歌词
  17. ROS2极简总结-SLAM
  18. 一文读懂MES是什么,浅谈EMS系统带给企业的好处
  19. 支付,造就金融科技生态契机——保险科技生态建设
  20. 解决R语言报错:Error in make.names(col.names, unique = TRUE) :文件编码不一致的问题

热门文章

  1. 前端防xss攻击(去掉空格等能影响和攻击数据库的字段)
  2. 服务器母鸡系统,母鸡云服务器
  3. 第13步 用户模块前端(Admin)
  4. php如何直接使用iview,iview安装使用
  5. mysql 密码hash算法_如何用hash创建一个mySQL用户(‘sha256’,$salt.$password)?
  6. diy实现spring依赖注入
  7. nginx的日志文件配置
  8. jdk12 jdk1.8_JDK 12的Files.mismatch方法
  9. java7和java8切换_切换表达式到Java吗?
  10. java私有属性和私有方法_Java 9中什么是私有的?