卓越性能 の 军火库「建议收藏」

卓越性能 の 军火库「建议收藏」在介绍性能优化的军火库之前,先来扯几句题外话。希望这些题外话,能打消你追求卓越性能的理想,来甘心当一枚圆滑的钉子。我是非常不推荐程序员,对公司的业务,进行性能优化的。说这话,纯粹是基于个人自身安全考虑。因为性能优化,在大多数公司,属于费力不讨好的工作项。追求极简的代码,性能卓越的代码,是有追求的程序员的目标。但随着经历了大大小小的公司,我发现很多优秀的程序员,在经受着这种追求的反嗜,以至于痛不欲生。下有下面几点原因,虽然我们知道它肯定是错的,但我们无能无力:公司按照完成的功能,对程序员…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

 

在介绍性能优化的军火库之前,先来扯几句题外话。希望这些题外话,能打消你追求卓越性能的理想,来甘心当一枚圆滑的钉子。

我是非常不推荐程序员,对公司的业务,进行性能优化的。说这话,纯粹是基于个人自身安全考虑。因为性能优化,在大多数公司,属于费力不讨好的工作项。

追求极简的代码,性能卓越的代码,是有追求的程序员的目标。但随着经历了大大小小的公司,我发现很多优秀的程序员,在经受着这种追求的反嗜,以至于痛不欲生。下

有下面几点原因,虽然我们知道它肯定是错的,但我们无能无力:

  1. 公司按照完成的功能,对程序员进行考核。性能优化属于额外的工期,也就是浪费成本的一种存在。
  2. 团队不Care程序运行的效率,慢一点无所谓,等出问题了再救火就行。
  3. 性能优化的风险大,通常要调整代码结构,甚至修改代码逻辑。不优化可能没事,一优化可能出事,没人愿意碰。

就一句话,整个团队深陷进行时泥潭,没有展望性思想,大家就那么浆糊着,得过且过。


以上是很多公司的现状,尤其集中在中小型公司。在这种公司里,除非系统慢到极点,优化之后有效果,或者领导要求你这么做,否则我都不建议你去碰。如果你执意如此,惹火烧身的时候不要后悔。

当然,有很多团队的技术氛围还是很nice的,甚至在代码review的时候,都会提出一些更优的建议。遇到这样的团队,就要珍惜,我们的军火库,毫无疑问是为了这些团队而准备的。

Brendan D. Gregg大叔,天马行空过《性能之巅》这本书。但这本书的内容有点深,很多工具都是从资源层面进行分析的。他更广为人知的一张图,就是下面这张工具的集合。当然还有现在无处不在的火焰图。

卓越性能 の 军火库「建议收藏」

这密密麻麻的工具,都是偏低层的,大多数时候,我们用不到。所以整理了一个稍微上层的,靠近平常使用习惯的军火库。大多数工具,你不需要再使用yum或者apt安装,都是自带的。

通用问题发现

卓越性能 の 军火库「建议收藏」

如上图,就是我平常所使用的性能问题排查工具集合,可以排查一些通用的性能问题,比如CPU、内存、网络、I/O等。

大多数监控系统,抓取的也都是这些指标。由于这些性能数据都是发生在某一时间的,所以都只能排查问题发生当时的一些性能数据。强烈建议使用监控系统保存这些历史数据,可以进行问题追随,不用再傻乎乎等着问题复现了。

专用工具

不过,再怎么看,上面的这些工具也太零散了,学习的成本比较大,还需要记忆很多参数配置,才能再救火的环境中反应灵敏。

比较幸运的是,有一些可以获取性能概览的工具可以帮助我们减少脑细胞的损耗。

就拿top来说,有经验的同学,仅凭这一个命令,就能够判断系统中的资源,是否达到了瓶颈。这样的工具还有vmstat、sar、nmon等。尤其是nmon,是一个老牌的性能汇总工具,能够自动生成压测期间所产生的性能报告。

卓越性能 の 军火库「建议收藏」 这里面的几个性能深挖工具,学习曲线有点陡峭,但一旦掌握必使你产生主宰的感觉。但很多时候轮不到它们上场,因为总有一种大炮打蚊子的感觉。

Java专用工具

但是不要忘了,我们是搞Java的,碰到的性能问题,多属于JVM层面的。就拿perf这个工具来说,很强大,可以追踪到每一个c语言的函数调用的次数和耗时,但对Java来说是没用的,它生成的火焰图也没用。

所以Java自有一套这样的解决方案。

不仅有,而且更强大。尤其推荐jmc集成的JFR功能,这个记录的信息可真是太详细了。

卓越性能 の 军火库「建议收藏」 单机环境下,arthas是调试单机调用耗时的好工具,我不止一次使用它的trace命令完成了性能调优。在分布式环境下,skywalking类似的分布式调用链工具,也能助我们一臂之力。

END

有人可能觉得,我们上面列出的这些工具命令,实在是太多了,学不完,其实不是这样的。

在遇到性能问题,想要找到它的具体原因之时,你才会恨手头的工具太少,以至于期望有更加强劲的工具。

书到用时方恨少,事非经过不知难。

作为工程师,我们的工作,就是从这诸多的工具里,选择合适的组合,直捣黄龙。

当然,如果你捣的不太对,那后果就不太好了。参考文章开头的题外话,永远不要抢着去做这种费力不讨好的事情。性能优化这个东西,是一把双刃剑。可能会让你扶摇直上,也可能会让跌入谷底。,一切和你所处的团队有关。

可关注我的B站账号→→→→B站账号

学习交流群→→→→交流群

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187411.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PyCharm激活码永久有效PyCharm2018.3.6激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2018.3.6激活码教程-持续更新,一步到位PyCharm激活码永久有效2018.3.6激活码教程-Windows版永久激活-持续更新,Idea激活码2018.3.6成功激活

    2022年6月19日
    29
  • 成员变量和局部变量的区别是什么_实例变量和成员变量的区别

    成员变量和局部变量的区别是什么_实例变量和成员变量的区别成员变量和局部变量的区别?A:在类中的位置不同成员变量:在类中方法外局部变量:在方法定义中或者方法声明上B:在内存中的位置不同成员变量:在堆内存局部变量:在栈内存C:生命周期不同成员变量:随着对象的创建而存在,随着对象的消失而消失局部变量:随着方法的调用而存在,随着方法的调用完毕而消失D:初始化值不同成员变量:有默认初始化值局部变量:没有默认初始化值,必须定义,赋值,然后才…

    2025年7月17日
    6
  • 如何理解95%置信区间_95的置信区间和90的置信区间

    如何理解95%置信区间_95的置信区间和90的置信区间1.点估计与区间估计首先我们看看点估计的含义:是用样本统计量来估计总体参数,因为样本统计量为数轴上某一点值,估计的结果也以一个点的数值表示,所以称为点估计。点估计虽然给出了未知参数的估计值,但是未给出估计值的可靠程度,即估计值偏离未知参数真实值的程度。接下来看下区间估计:给定置信水平,根据估计值确定真实值可能出现的区间范围,该区间通常以估计值为中心,该区间则为置信区间。2.中心…

    2022年9月23日
    4
  • rabitmq,redis以及kafuka作为消息队列的区别[通俗易懂]

    rabitmq,redis以及kafuka作为消息队列的区别[通俗易懂]kafukakafuka涉及到的名词词意解释:Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲、异步通信、汇集日志、系统解耦等方面。相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能。针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/119000000398…

    2022年4月30日
    54
  • python自动补全设置_python代码补全

    python自动补全设置_python代码补全Hello,大家好,我是橘子呀~前几期橘子给大家介绍了Python是什么以及如何安装Python软件。也分享了如何系统的以及高效率的去学习Python这门课程,还有一些避雷建议,今天橘子就分享给大伙一点宝藏干货!!!藏不住的东西,不如扬了它!请大家把它收入囊中~不要辜负我的一片苦心~一、Pycharm常用快捷键(Windows)Ctrl+Q快速查看文档Ctrl+鼠标左键简介及代码定义…

    2022年8月26日
    8
  • java怎么判断对象不为空_java判断对象是否为空的方法

    java怎么判断对象不为空_java判断对象是否为空的方法java判断对象是否为空的方法发布时间:2020-06-2514:39:17来源:亿速云阅读:134作者:Leah这篇文章将为大家详细讲解有关java判断对象是否为空的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先来看一下工具StringUtils的判断方法:一种是org.apache.commons.lang3包下的;另一种是org.s…

    2022年6月3日
    112

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号