《质量全面管控》读书笔记——性能分析

本文介绍性能测试的全流程,包括使用性能测试工具收集业务性能数据、监控服务器硬件资源、分析JVM性能、深入排查问题根源以及调优后的回归测试。同时介绍了nmon工具、JVM监控方法及数据库性能分析技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行性能测试时监控和分析的全过程:
1)使用性能测试工具收集业务性能数据,并监控数据有无性能异常;
2)观察服务器的硬件资源和性能状况,判断硬件是否存在瓶颈,监控数据包括CPU、Memory、Disk、I/O、网络、数据库连接数等;
3)了解JVM,分析JVM参数是否存在问题,监控JVM使用情况是否有异常;
4)深入分析问题根源,如分析JVM、查询代码异常、使用分析工具分析数据库问题,结合第1步的业务性能,确定瓶颈所在位置;
5)找出可优化的参数和硬件资源,调整之后,进行调优测试;
6)调优后,对先前的问题性能进行回归测试,监控性能数据,验证性能问题是否已经解决。

一、系统硬件资源监控
性能测试时,除了LoadRunner和JMeter用于收集应用程序的性能指标,还要结合服务器端的系统性能指标,才能够更精确地评估性能状况。
1、nmon工具
nmon是IBM提供的开源的硬件资源监控和分析工具,使用它能够判断性能问题是否由硬件产生。它可以在一个屏幕上显示所有重要的性能数据,动态更新(默认每5秒刷新一次数据),而且不会消耗大量的CPU使用率(通常低于2%)。nmon主要可以收集CPU使用率、内存使用情况、内核统计信息、运行队列信息、磁盘I/O情况和网络I/O使用情况等。
nmon除了能实时监控,还能进行长时间的性能数据收集工作。它将数据捕获到一个文本文件中,以表格形式(.csv格式)存储,可以使用nmon analyser分析工具(是一个excel宏文件)对数据进行全方位解析,生成形象具体的硬件性能趋势图。通过图中的变化曲线和性能测试现象,能准确地定位在长时间性能测试中硬件是不是瓶颈、硬件会不会出现资源利用不足或过剩的现象等。

2、Linux系统监控命令
一般主流服务器的操作系统以Linux、UNIX之类居多,掌握常用的Linux命令有助于监控分析硬件资源的性能问题。
1)netstat网络监控
是一个监控TCP/IP网络非常有用的工具,该命令只有在安装了TCP/IP协议后才可以使用。具体使用见Linux技术——netstat命令详解

2)pmap:查看地址空间分布
pmap用于观察系统中指定进程的地址空间分布情况,显示一个目标文件或链接库文件中的各个段大小,观察是否有占用大量内存的文件,或是否有打开后没关闭的文件等,非常适合判断本地内存溢出。pmap命令实质上是读取/proc/pid/maps中的数据。具体使用参见Linux进程占用内存分析之pmapLinux性能测试 pmap命令详解

二、JVM监控与分析
1、JVM(Java Virtual Machine,Java虚拟机)基础
Java程序的执行过程:Java源代码(.java)文件被编译器编译为字节码(.class)文件后,由JVM的类加载器加载,然后交给执行引擎运行。在运行过程中,JVM会使用一段空间来存储程序执行期的数据和信息(这段空间被称为Runtime Data Area(运行时数据区),即常说的JVM内存)。根据《Java虚拟机规范》的规定,运行时数据区通常包括:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)和堆(Heap)。

2、JVM垃圾回收
JVM根据Generation(代)进行垃圾收集,被分为新生代、年老代、持久代。其中新生代包括一个Eden,两个Survior区。持久代就是方法区,新生代和年老代都在堆空间内。
JVM的垃圾回收器主要包含3种回收方式:
1)Minor GC
从新生代(包括Eden和Survivor区)回收内存的过程被称为Minor GC。
2)Major GC
从年老代回收内存的过程称为Major GC。
3)Full GC
指清理整个堆空间的过程,包括新生代和年老代。
以上过程具体见Java GC工作原理以及Minor GC、Major GC、Full GC简单总结GC详解及Minor GC和Full GC触发条件总结JVM的新生代、老年代、MinorGC、MajorGCMinor GC、Major GC和Full GC之间的区别等。

JVM出现的最常见问题有内存泄漏和内存溢出。JAVA内存溢出类型见JAVA内存溢出的几种情况java虚拟机内存溢出各种场景总结
内存溢出的几种原因和解决办法
Java常见内存溢出异常分析与解决等。

常见JVM命令参考JVM状态监控常用命令整理总结linux lsof命令详解等。

3、堆分析工具MAT
MAT(Memory Analyzer Tool)可以分析HeapDump的理想数据,MAT分析的文件格式是hprof格式。使用见Android内存优化(五)详解内存分析工具MAT利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露等。

4、JConsole
JConsole是JDK自带的比较全面的Java监控分析工具,使用见使用jconsole分析内存情况-JVMjconsole工具使用等。

5、JProfiler
JProfiler是商业的Java剖析工具,可以剖析JVM内存情况。使用见JProfiler使用详细教程学习笔记使用JProfiler进行内存分析等。

三、数据库性能分析
SQL语言分为4大类:数据查询语言DQL(SELECT子句、FROM子句、WHERE子句)、数据操纵语言DML(INSERT、UPDATE、DELETE)、数据定义语言DDL(CREATE、DROP、ALTER、TRUNCATE)、数据控制语言(GRANT、ROLLBACK、COMMIT)。

软解析(Soft Parse):数据库利用内部的哈希算法来取得该SQL语句的Hash值,然后在共享池里查找是否存在该Hash值以及版本是否一致。假设存在,则将此SQL语句与cache中的语句进行比较。若相同,就利用已有的解析数和执行计划,而省略了优化器的相关工作。
硬解析(Hard Parse):如果软解析查找与比较步骤中有一个不成立,那么优化器都将创建解析树、生成执行计划。这个过程就是硬解析。
详细见彻底弄懂oracle硬解析、软解析、软软解析SQL语句解析类型—硬解析和软解析等。

SQL执行计划是一条SQL查询语句的执行过程或访问路径的描述。常见工具如PL/SQLDeveloper。分析过程见[Oracle技能]获取SQL执行计划的方法SQL之执行计划mysql的sql执行计划详解等。

数据库连接数监控:
1)查看当前数据库的参数设置SQL语句: show parameter service_names

2)查看当前连接数SQL语句:select count(*) from v$process

3)查看数据库运行的最大连接数SQL语句:select value from v$parameter where name = ‘processes’

4)查看并发连接数SQL语句:select count(*) from v$session where status = ‘ACTIVE’

5)查看当前各个客户端计算机的连接数SQL语句:select count(*), machine from v$drddion group by machine

6)查看当前客户端计算机名为RHEL的所有session数SQL语句:select count(*) from v$session where machine = ‘RHEL’

有关Oracle数据库性能诊断报告AWR详见Oracle AWR报告指标全解析Oracle-手工生成AWROracle生成awr报告等。

注意,性能分析工具只是提供了一个参考,在时间的性能测试过程中,还需要结合实际和经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值