一个系统或者软件性能的重要性天然是无需多说,永远没有哪一个用户能够忍受打开一个网站或者软件须要好久才能响应,性能是评估一个系统或者软件最实在的指标,若是一个网站作得再好看、再漂亮,可是性能上不去,那也只是华而不实。html
笔者在离开测试岗进入研发岗已经有好几个年头了,按理说不该该再去写关于软件测试的书籍了而应该更多的去关注编程语言等研发工做,可是笔者在研发岗位上奋斗几年后发现其实性能并不该该是软件测试工程师一我的的事情,而是一个涉及到很是多IT岗位的共同工做,例如架构师、技术经理、研发工程师、网络工程师、运维工程师等都应该去关注性能。为何这么说呢?由于性能测试的工做不只仅是为了完成一项性能测试任务来获取系统或者软件的性能指标,而更多的是要去发现性能问题、去分析诊断性能问题、去针对性能问题进行调优。某个性能问题多是架构设计缺陷引发,也有多是网络布线不足致使,固然也多是几行代码的影响,因此这是一个和不少IT岗位都相关的工做,是不少IT岗位都须要一块儿去重视的工做。正由于性能如此重要,因此笔者在转岗后仍是对性能念念不忘,从而也就有了这本书的问世,固然笔者也但愿借助本书能让不一样IT岗位的“同行”都能更多的去关注性能问题。java
这是一本理论和实践相结合的同时面向研发和测试岗的关于性能分析诊断调优实践的图书,比起其余的不少性能测试的图书,本书中内容更侧重于介绍如何去发现性能问题、分析诊断性能问题以及对发现的性能问题进行调优。书中的内容涵盖了性能测试基础、linux和windows服务器的性能分析、web和应用中间件的性能分析、java应用程序的性能分析、数据库的性能分析、安卓APP的性能分析以及具体的性能分析案例实践。这本书主要是面向有必定性能测试基础或者编程语言基础的朋友,对于刚刚接触性能测试的朋友来讲可能会稍显吃力,建议在阅读本书的同时能够搭配其余的基础书籍一块儿效果会更好,笔者相信读完本书的朋友之后确定不会再为“性能问题”而发愁。mysql
性能到底有多重要呢,咱们能够举一个网站访问的例子来讲明,一个网页的加载速度若是超过4-5秒,可能25%的人会选择放弃。百度的搜索结果响应时间慢0.4秒,一天的搜索量可能会减小千万左右。因此一个系统,一个网站的性能决定了其可以支撑业务的能力。linux
不一样的群体对性能的理解可能会存在很大的差别,普通的用户更加关心响应时间和稳定性。nginx
架构师和工程师可能更加关心架构设计和代码编写的性能web
运维工程师可能更加关心系统的监控以及稳定性状况算法
性能测试能够发现的问题或者执行的目标描述以下:sql
一、了解系统的各项性能指标,经过性能压测来了解系统能承受多大的并发访问量、系统的平均响应时间是多少、系统的tps是多少等。数据库
二、发现系统中存在的性能问题,常见的性能问题以下:apache
三、 解决性能压测中存在的问题和性能瓶颈,经过不断的性能调优,使得系统能够知足预期的性能指标。
一个优秀的性能测试工程师至少须要具有:
1)、熟练使用经常使用的性能测试工具,包括LoadRunner,Jmeter、nGrinder等,而且精通这些工具来编写性能压测脚本以及设置性能压测场景。
2)、熟练掌握性能测试的基础以及概念,能编写出一个相对完美的性能测试方案,以及能合理的设置性能压测的场景。
3)、熟练掌握Linux、Windows等常见服务器的性能监控以及分析诊断性能瓶颈,好比CPU大幅度的波动怎么办? CPU频繁的上下文切换如何定位?如何看到某个线程当前在执行什么?
4)、熟悉常见的Web中间件,应用中间件以及如何去对中间件进行性能监控分析和参数调优。
5)、熟悉Java应用程序的监控以及日志分析, 目前大部分的性能测试都仍是以Java 应用为主,包括大数据的不少项目也都是基于Java,好比Hadoop、Spark、Flink等。
6)、掌握数据库的性能监控以及瓶颈定位分析,最多见的就是掌握Mysql的监控,好比慢日志的分析、执行计划、如何从监控中看出查询有没有走索引?
7)、能写出一个完整的性能压测报告,报告中除了包括压测场景,性能指标外,还要分析性能的拐点,性能的趋势、当前的性能瓶颈在哪里? 能够给出哪些可行的调优方式等等。
《性能测试、分析诊断与调优实践》中到底讲了些什么?
《性能测试、分析诊断与调优实践》 是预计于2020年6~7月份由清华大学出版社出版的侧重于性能调优分析的指导性图书,全书目录以下:
序... 3
1. 性能测试和性能分析的基础概念... 4
1.1. 性能测试的基础概念... 4
1.1.1 性能测试的分类... 5
1.1.2 性能测试的场景... 6
1.2. 常见的性能测试指标... 7
1.2.1 响应时间... 7
1.2.2 TPS/QPS. 7
1.2.3 并发用户... 7
1.2.4 PV/UV.. 8
1.2.5 点击率... 8
1.2.6 吞吐量... 9
1.2.7 资源开销... 9
1.3. 性能测试的目标... 9
1.4. 性能测试的基本流程... 10
1.4.1 性能需求分析... 10
1.4.2 制定性能测试计划... 11
1.4.3 编写性能测试方案... 13
1.4.4 编写性能测试案例... 14
2. 服务器的性能监控和分析... 15
2.1 Linux服务器的性能指标监控和分析... 15
2.1.1 经过vmstat深挖服务器的性能问题... 15
2.1.2 如何经过mpstat 分析服务器的性能指标... 19
2.1.3 如何经过pidstat发现性能问题... 21
2.1.4 从lsof中能看到什么... 29
2.1.5 如何经过free看懂内存的真实使用... 39
2.1.6 如何经过top发现问题... 40
2.1.7 网络流量如何监控... 44
2.1.8 nmon对Linux服务器的总体性能监控... 51
2.2 Windows服务器的性能指标监控和分析... 54
2.2.1 Windows性能监视器... 54
2.2.2 Windows性能监视器下的性能分析... 69
3. web中间件的性能分析... 74
3.1 nginx的性能分析和调优... 74
3.1.1 nginx的负载均衡策略的选择... 74
3.1.2 nginx进程数的配置优化... 77
3.1.3 nginx事件处理模型的优化... 77
3.1.4 nginx客户端链接数的优化... 80
3.1.5 nginx中文件传输的优化... 81
3.1.6 nginx中FastCGI配置的优化... 84
3.1.7 nginx的监控... 87
3.2 apache的性能分析和调优... 89
3.2.1 apache的工做模式选择和进程数调优... 89
3.2.2 apache的mod选择和优化... 94
3.2.3 apache的keepAlive优化... 97
3.2.4 apache的ab压力测试工具... 98
3.2.5 apache的性能监控... 101
4. 应用中间件的性能分析... 102
4.1 tomcat的性能分析和调优... 103
4.1.1 tomcat的组件以及工做原理... 103
4.1.2 tomcat容器Connector性能参数优化... 108
4.1.3 tomcat容器的I/O优化... 110
4.2 wildfly的性能分析和调优... 115
4.2.1 wildfly standalone模式介绍... 115
4.2.2 wildfly standalone模式管理控制台性能参数优化... 119
4.2.3 wildfly standalone模式性能监控... 130
5. java应用程序的性能分析和调优... 139
5.1 jvm基础知识... 139
5.1.1 jvm简介... 139
5.1.2 类加载器... 141
5.1.3 java虚拟机栈和本地方法栈... 144
5.1.4 方法区与元数据区... 144
5.1.5 堆区... 145
5.1.6 程序计数器... 147
5.1.7 垃圾回收... 147
5.1.8 并行与并发... 151
5.1.9 垃圾回收器... 152
5.2 jvm如何监控... 154
5.2.1 jconsole. 154
5.2.2 jvisualvm.. 162
5.2.3 jmap. 175
5.2.4 jstat 176
5.3 jvm性能分析与诊断... 177
5.3.1 如何读懂gc日志... 177
5.3.2 jstack. 182
5.3.3 MemoryAnalyzer. 189
5.4 jvm性能调优技巧... 200
5.4.1 如何减小gc. 200
5.4.2 另类java内存泄漏... 202
6. 数据库的性能分析... 203
6.1 mysql数据库的性能监控... 203
6.1.1 如何查看mysql数据库的链接数... 203
6.1.2 如何查看mysql数据库当前运行的事务与锁... 203
6.1.3 mysql中数据库表的监控... 207
6.1.4 性能测试时mysql中其它经常使用监控... 211
6.2 mysql数据库的性能定位... 214
6.2.1 慢sql 214
6.2.2 执行计划... 215
7. 性能测试案例分析... 218
7.1 jmeter对http 服务的性能压测分析... 218
7.2 LoadRunner对http 服务的性能压测分析... 232
7.3 jmeter对rpc 服务的性能压测分析... 251
7.3.1 jmeter 如何经过自定义Sample来压测RPC服务... 251
7.3.2 jmeter对GRPC服务的性能压测分析... 262
8. 安卓APP的性能分析... 270
8.1 adb. 270
8.2 DDMS. 273
8.3 Android Studio profiler 288
8.4 systrace. 295
业内专家如何点评《性能测试、分析诊断与调优实践》