不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。

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

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

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

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

  1. 公司按照完成的功能,对程序员进行考核。性能优化属于额外的工期,也就是浪费成本的一种存在。

  2. 团队不Care程序运行的效率,慢一点无所谓,等出问题了再救火就行。

  3. 性能优化的风险大,通常要调整代码结构,甚至修改代码逻辑。不优化可能没事,一优化可能出事,没人愿意碰。

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


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

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

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

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

通用问题发现

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

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

专用工具

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

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

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

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

Java专用工具

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

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

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

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

END

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

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

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

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

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

作者简介:小姐姐味道  (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

推荐阅读:

一图解千愁,jvm内存从来没有这么简单过!
失联的架构师,只留下一段脚本
架构师写的BUG,非比寻常
nginx工程师,需要上承天命,下召九幽
实力解剖一枚挖矿脚本,风骚操作亮瞎双眼
又一P1故障,锅比脸圆
传统企业的人才们,先别忙着跳“互联网”!
面试官很牛,逼我尿遁
又一批长事务,P0故障谁来背锅?
一天有24个小时?别开玩笑了!
《程序人生》杀机!
可怕的“浏览器指纹”,让你在互联网上,无处可藏
2w字长文,让你瞬间拥有「调用链」开发经验
996的乐趣,你是无法想象的
作为高级Java,你应该了解的Linux知识(非广告)
必看!java后端,亮剑诛仙(最全知识点)
学完这100多技术,能当架构师么?(非广告)
Linux上,最常用的一批命令解析(10年精选)
数百篇「原创」文章,助你完成技术「体系化」


卓越性能 の 军火库(非广告)相关推荐

  1. 卓越性能代码_编程语言性能实测,Go比Python更胜一筹?

    作者 | Pawel Dziubałka, Sebastian Karasiewicz 译者 | 泓技 出品 | AI科技大本营(ID:rgznai100) 互联网上有非常多的精彩代码,它们成了构建各 ...

  2. Linux运维最新关注!如何为自己打造一个 网络安全军火库 ?

    最近,黑客又开始兴风作浪了,曼联直遭殃 前几天,英国顶级足球俱乐部曼彻斯特联队,披露其内部系统发生网络安全事件--被黑客访问IT网络,并窃取了俱乐部球迷的数据,数百名女性体育明星的私密照.视频在线泄露 ...

  3. 卓越性能代码_开启win10隐藏的“超级性能模式”

    ​微软总是悄悄给Windows 10 加一些新功能,又不大肆宣传,导致很多朋友感觉Windows 10不过是换了一套UI的Windows 7甚至XP. 今天来分享一个隐藏起来的"超级模式&q ...

  4. 卓越性能代码_「Win」被隐藏起来的卓越性能模式,为何不想让人发现?

    前言: 众所周知,电脑电源管理中包含三大模式,分别是:节能模式.平衡模式.高性能模式,其对电脑的性能影响还是比较大的,但是今天所说的"卓越性能模式"应该很多人都没听说过,又是何方神 ...

  5. 卓越性能代码_装好win10后,应该这样设置,才能压榨出系统十足的性能

    用了这么久win10系统,你知道在win10中有不同的性能模式吗?而使用不同的性能模式会消耗不同的电量,就会为系统提供不同的性能.为了拥有好的性能,我们一般会在电源选项中给系统设置为高性能模式,但你以 ...

  6. win10卓越性能模式,提升电脑性能

    Win10隐藏了一个电源模式"卓越性能",是比"高性能"模式更强性能的电源模式. 这个模式开启后,电脑到底有没有变快呢?心理上是快了. 开启步骤 1.鼠标移到开 ...

  7. 在桌面右键菜单添加【切换电源计划-卓越性能】选项

    本文在参考<在桌面右键菜单添加[切换电源计划]选项>和<微软又立功了!通过修改电源设置提升dnf性能的方法!>两篇文章的基础上修改而来 旨在打开Win10卓越性能的基础上可以在 ...

  8. 【非广告】2021 入门级的 Java 程序员学习路线图 1.0

    Hello,大家好,我是阿粉,最近看文章发现一个 Java 学习路线图的资料,觉得很不错就拿过来分享给大家,目前这个版本是 1.0 的,之所以说这个是 1.0 的版本主要是因为还有一些高级内容没有加进 ...

  9. 非广告|如何在碎片化时代成为无可取代的人

    本文转载自公众号:程序视界 船长导读:这是一篇关于<深度工作>的文章,书我也看过,内容值得学习,本文作者取得标题有点像广告,于是我加了"非广告",哈哈. 1981年7月 ...

最新文章

  1. vn.py 2.0.2 发布,全功能交易程序开发框架
  2. iOS11和iPhone X的适配
  3. 35岁之后,你还会继续写代码吗?
  4. k8s往secret里导入证书_K8S之Secret
  5. Vaadin和DukeScript中的Hello World
  6. 快速向服务器传文件格式,客户端如何向服务器传文件格式
  7. SSH安全登陆原理:密码登陆与公钥登陆
  8. SQL server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法...
  9. 图书馆管理系统(C语言实现)
  10. speedoffice(word)如何批量让字体大一号
  11. 神经网络的双曲线正切激活函数
  12. 怎么查看和下载高清谷歌卫星地图
  13. 3DMAX制作载具模型导入UE4导致轮子无碰撞解决方案
  14. excel筛选查询函数
  15. autojs各种插件以及教程模板
  16. 记录每天学习的新知识:LiveData
  17. Android设备root及xposedPrivacy的安装
  18. ae渲染存在偏移_以后请不要问我AE和PR有什么区别了...
  19. python atm作业详解_Python小案例--ATM系统
  20. Slurm如何应对超大作业的NSS压力?

热门文章

  1. 计算机应用与上机实践,《大学计算机应用基础》各章习题与上机实践参考答案或答题说明.doc...
  2. 中专毕业计算机基础考试试题,中职《计算机基础》课程标准
  3. python 镜像源配置
  4. 【CF979D】 Kuro and GCD and XOR and SUM
  5. 支持兆芯cpu的linux,AIDA64 6.10版发布:全面支持中国兆芯、海光x86 CPU
  6. angular指令心得(ng-model)
  7. 清华大学首个原创虚拟学生!“华智冰”入学清华!
  8. 《周志明的软件架构课》学习笔记 Day5
  9. JVM之类加载机制(基于《深入理解Java虚拟机》之第七章类加载机制)(上)
  10. 大体肌肉解剖必学45个肌肉