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

java 性能调优

这是本系列中的最后一篇文章,我们将分析我们在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%

Java花费的时间进行故障排除

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

随机工具帮助

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

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

最好的例子可能是线程转储分析。 这是收集有关并发问题的证据的好方法。 实际上,解决并发问题的受访者中有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 性能调优

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

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

相关文章

Android接入热敏打印机,Android 关于佳博和汉印蓝牙热敏打印机开发

接上篇文章Android之BLE(低功耗)蓝牙开发,本篇文章针对上篇博文中提出的两款打印机的开发流程进行记录。首先不管时佳博打印机还是汉印打印机,都是先对他们各自的lib进行导入,如图:导入lib之后,一定要记得进行sync pro…

C 桥接模式 - 开关和电器

桥接模式(Bridge Pattern)是将抽象部分与它的实现部分分离,使它们都可以独立地变化。1模式结构UML 结构图:Abstraction(抽象类):用于定义抽象类的接口,并且维护一个指向 Implementor…

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

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

C语言没有引用,只有指针

这个问题是昨晚上有同学在知识星球提问,但是因为前两天一直在出差,比较累,没认真回答,今天打球回来,就把这个事情解决了。我想说的已经在题目说明的很清楚了,C语言是没有引用的,引用是在C 里面才…

C/C 代码规范注释有哪些讲究?

如果领导给你一个项目的源码让你阅读,并理解重构代码,但里面一句注释都没有,我想这肯定是之前同事“删库跑路”了。看一份源码什么很重要?除了各种代码规范之外,还有一个比较重要的就是注释。注释虽然写起来很痛苦, 但…

qq互联android sdk,qq互联.Android

导读:2.2调用示例,这里以发送文字微博接口的调用为例例,来说明通过requestAsync调用兼容接口的方法:,在上面的调用中,调用获取用户信息接口的示例代码如下:,调用发送带图微博接口的&…

C 流插入和流提取运算符的重载

<<运算符的重载C 在输出内容时&#xff0c;最常用的方式&#xff1a;std::cout << 1 <<"hello";提出问题&#xff1a;那这条语句为什么能成立呢&#xff1f;cout 是什么&#xff1f;为什么 << 运算符能用在 cout 上呢&#xff1f;原因&#…

primefaces_使用Bean验证扩展PrimeFaces CSV

primefaces你们中有些人已经知道我和我的合著者Mertalışkan正在研究PrimeFaces Cookbook的2.版。 Packt Publishing允许我从新章节“客户端验证”的一个食谱中摘录一小部分摘录。 这将有助于使读者知道这本书的内容。 在此博客文章中&#xff0c;我想讨论使用Bean验证扩展的P…

函数指针,指针函数,函数指针数组

这是一个群友发的笔试题目&#xff0c;里面涉及的东西也比较有意思。直接看代码void (*f[])(char *)这个是个什么东西&#xff1f;我们先看看下面的东西函数指针和指针函数的定义我们看个代码int *func(int a,int b)我们之前说过运算符的优先级&#xff0c;「 * 」 的优先级低…

畅享10e会有鸿蒙吗,功能虽小作用很大 华为畅享10e隐藏功能大揭秘

原标题&#xff1a;功能虽小作用很大 华为畅享10e隐藏功能大揭秘如今使用手机游戏、观影、听音乐、刷短视频、拍照等多种多样的娱乐方式,充斥着年轻人生活之中。作为年轻用户娱乐的重要载体,现在的手机不仅硬件强大,在软件功能上方面也取得了突破性进展,不仅仅是高端机,甚至千元…

C this指针的理解和作用

C 程序到 C 程序的翻译 要想理解 C 的 this 指针&#xff0c;我们可以先把下面的 C 代码转换成 C 代码&#xff1a;C 语言是没有类定义 class 关键词&#xff0c;但是有跟 class 类似的定义&#xff0c;那就是 struct 结构体。m_price 变量是 Car 类的成员变量&#xff0c;那…

C++ inline 函数简介

1.inline 函数简介inline 函数由 inline 关键字定义&#xff0c;引入 inline 函数的主要原因是用它替代 C 中复杂易错不易维护的宏函数。2.编译器对 inline 函数的处理办法编译器在编译阶段完成对 inline 函数的处理&#xff0c;即对 inline 函数的调用替换为函数的本体。但 in…

intellij ide_UltraESB的首选IDE – IntelliJ IDEA

intellij ide在AdroitLogic&#xff0c;我们长期以来一直在使用IntelliJ IDEA进行开发。 它是Java和相关语言/技术的最佳IDE&#xff08;它可能也是许多其他语言的选择&#xff0c;但我的经验主要是Java和相关技术&#xff09;。 Groovy和IDEA的Grails的集成很棒。 通过自动发…

C++抽象类

概念在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。抽象类往往用来表征对问题领域进行分…

tibco_TIBCO产品的微服务和DevOps

tibco大家都在谈论微服务 &#xff0c;这些天。 您可以在数百篇文章和博客文章中读到很多有关微服务的信息。 马丁福勒 &#xff08; Martin Fowler &#xff09;的文章是一个很好的起点&#xff0c;该文章引发了有关这种新架构概念的大量讨论。 另一个不错的资源是独立于供应…

C atoi函数

作用atoi()函数将数字格式的字符串转换为整数类型。例如&#xff0c;将字符串1253124127转换成数字1253124127。注意首要注意atoi函数可以转化如下这种字符串1fdafhdjfhkas关于参数的注意事项&#xff0c;atoi()函数的参数是要转换的字符串。该字符串的格式为[空格][符号][数字…

开式蓄冷罐与闭式蓄冷罐_一罐将其全部统治:Arquillian + Java 8

开式蓄冷罐与闭式蓄冷罐借助Java 8 &#xff0c;已实现了许多新的语言改进&#xff0c;以简化开发人员的生活。 在我看来&#xff0c; Java 8的最大优点之一是&#xff0c;在某些情况下&#xff0c;已开发的代码看起来比使用以前的方法更漂亮&#xff0c;我指的是Lambdas和Meth…

C 预处理指令

C 预处理指令C语言、C 语言的预处理器。用于在编译器处理程序之前预扫描源代码&#xff0c;完成头文件的包含, 宏扩展, 条件编译, 行控制&#xff08;line control&#xff09;等操作编译的四个阶段C语言标准规定&#xff0c;预处理是指前4个编译阶段&#xff08;phases of tra…

将html代码转换为dom,将HTML字符转换为DOM节点并动态添加到文档中

将HTML字符转换为DOM节点并动态添加到文档中将字符串动态转换为DOM节点&#xff0c;在开发中经常遇到&#xff0c;尤其在模板引擎中更是不可或缺的技术。字符串转换为DOM节点本身并不难&#xff0c;本篇文章主要涉及两个主题&#xff1a;1 字符串转换为HTML DOM节点的基本方法及…

通过Spring集成进行消息处理

Spring Integration提供了Spring框架的扩展&#xff0c;以支持著名的企业集成模式。 它在基于Spring的应用程序中启用轻量级消息传递&#xff0c;并支持与外部系统的集成。 Spring Integration的最重要目标之一是为构建可维护且可测试的企业集成解决方案提供一个简单的模型。 …