这是一本理论和实践相结合的同时面向研发和测试岗的关于性能分析诊断调优实践的图书,比起其他的很多性能测试的图书,本书中内容更侧重于介绍如何去发现性能问题、分析诊断性能问题以及对发现的性能问题进行调优。书中的内容涵盖了性能测试基础、linux和windows服务器的性能分析、web和应用中间件的性能分析、java应用程序的性能分析、数据库的性能分析、安卓APP的性能分析以及具体的性能分析案例实践。这本书主要是面向有一定性能测试基础或者编程语言基础的朋友,对于刚刚接触性能测试的朋友来说可能会稍显吃力,建议在阅读本书的同时可以搭配其他的基础书籍一起效果会更好,笔者相信读完本书的朋友以后肯定不会再为“性能问题”而发愁。
图书在百度百科中的介绍
图书在清华大学出版社官网介绍
性能到底有多重要呢,我们可以举一个网站访问的例子来说明,一个网页的加载速度如果超过4-5秒,可能25%的人会选择放弃。百度的搜索结果响应时间慢0.4秒,一天的搜索量可能会减少千万左右。所以一个系统,一个网站的性能决定了其能够支撑业务的能力。
不同的群体对性能的理解可能会存在很大的差异,普通的用户更加关心响应时间和稳定性。
访问页面响应还要让我等多久才能加载出来?
为什么有时候会访问失败?为什么会出现502?
架构师和工程师可能更加关心架构设计和代码编写的性能
应用架构设计是否合理?
技术架构设计是否合理?
数据架构设计是否合理?
部署架构设计是否合理?
代码是否存在性能问题?
JVM中是否有不合理的内存分配和使用?
线程同步和线程锁是否合理?
代码的计算算法是否可以进一步优化以减少CPU的消耗时间?
运维工程师可能更加关心系统的监控以及稳定性情况
服务器各项资源使用率在正常范围内吗?
数据库的链接数在正常范围内吗?
Sql执行时间正常吗,是否存在慢查询日志?
系统能够支撑7*24小时连续不间断的业务访问吗?
系统是高可用的吗,服务器节点宕机了会影响用户使用吗?
对节点扩容后,可以提高系统的性能吗?
性能测试可以发现的问题或者执行的目标描述如下:
1、了解系统的各项性能指标,通过性能压测来了解系统能承受多大的并发访问量、系统的平均响应时间是多少、系统的tps是多少等。
2、发现系统中存在的性能问题,常见的性能问题如下:
系统中是否存在负载均衡不均的情况,负载均衡不均匀一般指的在并发的情况下,每台服务器接收的并发压力不均匀而导致的部分服务器可能因为压力过大而出现性能急剧下降,而部分服务器因为过小而出现资源浪费的情况。
系统中是否存在内存泄漏问题,内存泄漏是指应用程序代码在每次执行完后,不会主动释放内存资源而导致内存使用一直增加,最终会使服务器物理内存全部耗光,程序运行逐渐变慢最终因为无法申请到内存而退出运行,而且多数时候是非常缓慢的增加,不容易被发现,一般需要通过高并发性能压测才能暴露。
系统中是否存在连接系统问题,连接泄漏包含的非常广泛,可以是数据库连接泄漏、http连接泄漏或者其它的tcp/utp连接泄漏。除了系统实际情况需要建立长连接外,一般短连接都应该是用完就需要关闭和释放。
系统中是否存在线程安全问题,线程安全问题是在高并发访问的多线程处理的系统中经常会出现的问题,如果系统中存在线程安全问题,就会出现多个线程先后更改数据造成所得到的数据全部脏数据,有时候甚至会造成巨大的经济损失。
系统中是否存在死锁问题,死锁问题也是多线程系统中经常会遇到的一个经典问题,一般常见的有系统死锁、数据库死锁等。
系统中是否存在网络架构或者应用架构扩展性问题,扩展性问题一般是指在性能指标无法满足预期的情况下,通过横向或者纵向扩展硬件资源后,系统性能指标无法按照一定的线性规律进行快速递增。
发现系统的性能瓶颈在何处,性能瓶颈一般是指因为某些因素而造成系统的性能的无法持续上升。
3、 解决性能压测中存在的问题和性能瓶颈,通过不断的性能调优,使得系统可以满足预期的性能指标。
一个优秀的性能测试工程师至少需要具备:
1)、熟练使用常用的性能测试工具,包括LoadRunner,Jmeter、nGrinder等,并且精通这些工具来编写性能压测脚本以及设置性能压测场景。
2)、熟练掌握性能测试的基础以及概念,能编写出一个相对完美的性能测试方案,以及能合理的设置性能压测的场景。
3)、熟练掌握Linux、Windows等常见服务器的性能监控以及分析诊断性能瓶颈,比如CPU大幅度的波动怎么办? CPU频繁的上下文切换如何定位?如何看到某个线程当前在执行什么?
4)、熟悉常见的Web中间件,应用中间件以及如何去对中间件进行性能监控分析和参数调优。
5)、熟悉Java应用程序的监控以及日志分析, 目前大部分的性能测试都还是以Java 应用为主,包括大数据的很多项目也都是基于Java,比如Hadoop、Spark、Flink等。
6)、掌握数据库的性能监控以及瓶颈定位分析,最常见的就是掌握Mysql的监控,比如慢日志的分析、执行计划、如何从监控中看出查询有没有走索引?
7)、能写出一个完整的性能压测报告,报告中除了包括压测场景,性能指标外,还要分析性能的拐点,性能的趋势、当前的性能瓶颈在哪里? 可以给出哪些可行的调优方式等等。
业内专家如何点评《软件性能测试、分析与调优实践之路》
点评1:做技术的人既要能脚踏实地又要能高瞻远瞩,最好还要有归纳整理传授的能力。永清的这本书,讲的透讲的深讲的好用,实在是少有的精品。
点评人简介:蒋彪,工学硕士,06年参加工作,历任上海欧姆龙软件工程师,苏宁易购DevOps研发中心高级架构师,苏宁人工智能研究院高级架构师,现任福特中国研究院软件技术专家。曾在InfoQ等知名学术刊文发表多篇技术论文,在电子工业出版社出版《微服务与Docker实战》《人工智能中台化架构》等书。工作之余兼任南大软件学院客座讲师,南京信息工程大学数理学院客座讲师。在软件研发流程管理,DevOps,中台化架构等领域都有独到见解。
点评2:这是一本融合了研发和测试在一起的关于性能调优实践的图书,非常适合软件测试和研发工程师去品读。
点评人简介: 刘玉辉: 多年研发和架构从业经验,历任Java高级研发工程师、高级架构师、研发经理等职位。先后在1号店个性精准化、苏宁大数据和人工智能研发中心等知名企业及部门工作多年,现主要关注人工智能、图像识别、语义机器人等领域。
点评3:书中关于软件性能调优总结的很透彻,是一本难得的好书。
点评人简介: 程大伟:多年研发、架构、技术管理的从业经验,历任Java高级研发工程师、技术经理、高级架构师、研发经理、研发总监等职位。涉足的行业领域包括公安、金融、互联网、移动通信、大数据等。 目前在紫金普惠信息咨询江苏有限公司任产品架构总监,对于研发和技术管理有着自己独到的见解。
点评4:保障系统稳定性与安全性,软件测试不可忽视,作者把理论与实践结合,沉淀了丰富的知识和经验,给我们带来了很多惊喜。
点评人简介:阿里巴巴高级开发工程师 江荣彬(叶寄)
本书作者简介:从事功能测试、自动化测试、性能测试、Java软件开发、大数据开发、架构师等工作十多年,在自动化测试设计、性能测试设计、性能诊断、性能调优、分布式架构设计等方面积累了多年经验,参与过的系统涉及公安、互联网、移动互联网、大数据、人工智能等领域。先后任职于江苏飞搏软件、苏宁大数据研发中心、苏宁研究院、苏宁人工智能研发中心、紫金普惠研发中心等公司,历任测试经理、技术经理、部门经理、高级架构师等职位,重点关注大数据、图像处理、高性能分布式架构设计等领域,著有《robot framework 自动化测试框架核心指南》。
附推荐序:
推荐序一
和永清认识时他还是一名测试工程师,当时我俩差不多一起入职,后来我发现他除了测试做的很好外,也很有程序员的逻辑思维能力,我就问他想不想转做研发,他没有做任何考虑就同意了,就这样我就把他拉入到了研发队伍中,一起共事有好几年了,永清给我的印象是一个非常踏实的工程师,非常喜欢钻研技术,虽然平时话很少,但是工作特别认真,喜欢脚踏实地的去做,他的这本书我看完后觉得就和他的为人一样,里面的内容虽然没有华丽的辞藻修饰,但是真的非常的实用,都是他平时工作中实践的归纳和总结。
这是一本融合了研发和测试在一起的关于性能调优实践的书,可能也和他自身的经历相关,他是一个“多能工”,功能测试、自动化测试、性能测试、Java开发、大数据开发、架构师这些他都做过。所以这本书既适合于软件性能测试工程师,也非常适合于软件研发工程师、技术经理等去品读。性能调优从我个人的角度来看,我比较认可作者在书中说的不仅仅是测试工程师一个人的事,应该是架构师、研发、运维等多种不同角色都需要去关注的。
我是一个做了多年研发的老工程师,后来又辗转做了多年的架构师。所以从研发和架构的角度来看,我个人非常喜欢书中关于JVM的性能调优部分,讲的非常的透彻,非常适合于很多Java研发工程师去多读读。我个人觉得研发工程师除了写代码外,还需懂得软件性能的重要性,更需要知道如何去写出高性能的代码。
最后作为永清的好朋友,我希望他的这本书可以大卖,也希望这本书能给更多读者带来帮助。
刘玉辉 2020年4月
推荐序二
承蒙作者的信任,我很高兴能为这本关于性能测试、分析与调优的新书撰写序言。
我和作者是多年的朋友,第一次见面我还是一个青涩的开发,作者还是一名Linux系统玩的很“溜”的测试,转眼几个年头作者已成为我司的架构师,很佩服他的学习能力。
性能测试是一个关注度比较高的话题,尤其在一些大公司,由于访问量巨大,时常会造成系统“瘫痪”。如何避免出现性能问题其实是一直贯穿系统开发始终的。所以无论是产品、开发、测试、运维、DBA等角色,都要或多或少了解性能测试的方法论、具体的操作方式以及所使用的测试工具。本书不仅仅从测试的视角出发,还从开发的角度分析系统性能问题,其实所有的性能问题本源在于开发和架构的问题。
作者考虑到本书的读者不仅仅是测试,还有其他岗位的读者。因此通过多种表现形式,力争使得本书尽可能的全面覆盖各个环节,作者以综述的方式突出了性能测试的关键指标,服务器如何监控与优化配置等等。对于多数读者来说这本书可以作为工具书,可以快速从中找到问题的解决方案。
尽管相对简短,但是本书涵盖了关于性能测试的诸多论题。我认为本书适合多种类型的读者,包括想对性能测试有深入了解的,想对架构和开发是如何影响性能测试的,想对服务器监控有更深入了解的等等。
我十分感谢作者能给我这个机会,我也很认可他的工作态度和学习能力,因此我很欣赏本书的很多内容,希望你们也能喜欢。
程大伟(产品架构总监)2020年4月
文章来源:https://zhuanlan.zhihu.com/p/161250409