性能测试体系-监控

​摘自:https://help.aliyun.com/document_detail/29341.html?spm=5176.doc29330.6.612.e9kTtv

1 引言

1.1 编写目的

本文档主要目标是规范使用性能测试过程中需监控的各项技术指标,描述各指标项的具体含义,并给出相应的监控工具与方法说明。本文档将作为测试监控的指导性规范,用以选取监控关注指标,使用监控工具。

1.2 适用对象和范围

监控指标及监控工具适用于使用性能测试进行性能测试项目技术质量评价依据。 预期读者为测试管理人员、测试实施人员、技术支持人员、项目质量管理人员、项目管理人员等系统技术质量相关人员。

1.3 参考文档

相关的指标定义及解释可以参照:性能测试指标,本章可能会增加及减少相关指标的描述,并不与性能测试指标中相关指标冲突。

2 业务指标监控

2.1 监控指标

业务指标主要包括并发用户数、响应时间、处理能力,成功率这四个指标,目前大部分压测工具都能将这些指标放在压测工具里面。

2.2 监控工具

2.2.1 性能测试

性能测试分布式压测工具,将相关业务指标集成在平台上。

2.2.2 后台日志

通过后台日志log,采用分析工具也可进行分析得出TPS,响应时间等。

3 操作系统指标监控

3.1 Linux

3.1.1 监控指标说明

指标类型指标名称指标描述

CPUCPU utilizationCPU 的使用时间百分比

System mode CPU utilization在系统模式下使用 CPU 的时间百分比

User mode CPU utilization在用户模式下使用 CPU 的时间百分比

MemoryPage-in rate每秒钟读入到物理内存中的页数

Page-out rate每秒钟写入页面文件和从物理内存中删除的页数

Paging rate每秒钟读入物理内存或写入页面文件的页数

DiskDisk rate磁盘传输速率

3.1.2 监控工具

3.1.2.1 性能测试

性能测试压测工具监控操作系统指标主要有:

CPU%:所有CPU资源利用率

网络流量:每秒入网出网多少Kb

磁盘:每秒读写多少Kb

3.1.2.2 命令

Linux提供丰富的命令进行监控,针对CPU、Memory、I/O等有一些列命令及参数进行监控。具体如下:

top : 整体查看资源情况。

sar :CPU资源消耗

vmstat:内存相关消耗

iostat: 磁盘相关消耗

………

具体用法和参数,可以参照联机帮助(man top等)。

3.1.2.3 Shell

可以将以上命令通过shell来包装,每隔多少秒监控一次,总共监控多少次,将监控结果写到文件里面。

例如:下面shell就是将CPU Load每隔3秒写到文件里面。

while true ; do uptime | awk -F' average: ' '{print $2}' ;sleep 3;done >> `hostname`_`date +%Y%m%d_%H%M`.uptime

3.1.2.4 nmon

Nmon安装 将 nmonXXX.tar.gz 文件复制到计算机。如果使用 FTP,请记住使用二进制模式。

解压该文件,运行 gzip -d nmonXXX.tar.gz

提取该文件,运行tar xvf nmonXXX.tar

Nmon实时监控 登陆要监控的系统,进入nmon安装目录中

输入命令nmon,运行 nmon(如root用户可能需要输入./nmon).显示的起始屏幕及CPU等信息。如图:

性能测试体系-监控_第1张图片

依次按c,m,d即可显示CPU,内存,磁盘等信息。如图:

性能测试体系-监控_第2张图片

Nmon运行时的键盘命令

命令说明

c提供关于物理CPU使用的详细信息

m提供内存使用的详细信息:系统(内核)和进程,活动虚拟内存

d提供关于磁盘,磁盘类型大小,可用空间,卷组,适配器等更详细的信息

t当前进程详细情

PPaging space 使用情况

k显示内核信息

+Nmon 结果保存为文件

Nmon 结果保存为文件 nmon -f -s 60 -c 30(每60s收集一次数据,共收集30次) nmon.sh 赋执行权限:chmod +x nmon.sh 执行nmon.sh 即可运行.

3.2 Windows

3.2.1 监控指标说明

提供的监控指标比较丰富,包括CPU、内存、网络、磁盘以及每个进程的资源。

3.2.2 监控工具

3.2.2.1 性能测试

同3.1.2.1 性能测试

3.2.2.2 资源管理器

Windows操作系统自带的windows资源管理器,在任务栏里面点击右键,启动任务管理器:

性能测试体系-监控_第3张图片

点击性能面板,再点击资源监视器:

性能测试体系-监控_第4张图片

3.2.2.3 性能监视器

Windows有自带的性能监视器,可以指定相关的监控指标进行监控,将结果保存为文件,从windows控制面板->管理工具->性能监视器->新建数据搜集器,添加你感兴趣的指标计数器。

性能测试体系-监控_第5张图片

4 应用中间件指标监控

4.1 Tomcat

4.1.1 监控指标说明

Tomcat主要监控线程工作状态、请求数、 会话数、线程数、虚拟主机、JAVA虚拟机内存占用情况。

4.1.2 监控工具

4.1.2.1 Tomcat提供的manager

通过使用Applications Manager(又称opManager)来进行监控。

使用这种方式,所监控Tomcat必须运行manager应用,缺省情况下,该应用总是运行在服务器中的。

增加Manager Role: 访问manager应用的用户的角色权限必须是 manager. 修改/conf目录下的tomcat-users.xml文件,在节点下添加一个user节点,即可创建一个用户。Tomcat版本不同配置也有差异,5.x和6.x创建的用户角色应为manager,7.x创建的用户角色为manager-jmx,举例如下:

在5.x和6.x中创建一个manager角色的用户,用户名为admin,密码为chenfeng:

在7.x中创建一个manager角色的用户,用户名为admin,密码为xxxxx: 修改配置后,需要重新启动 Tomcat 服务器。连接manager时将用户名/密码指定为admin/xxxxxxxx

通过浏览器访问http://localhost:8080/manager/jmxproxy ,输入用户名密码,然后就可以看到返回了所有的监控信息

4.1.2.2 Probe

下载: http://www.lambdaprobe.org/downloads/1.7/probe.1.7b.zip

解压缩后,把probe.war放到TOMCAT的webapps下,设置server.xml 的context

设置用户如下,在tomcat_user.xml中

vi /usr/local/tomcat/conf//tomcat-users.xml


设置环境变量,获取服务器状态 # vi /etc/profile JAVA_OPTS=-Dcom.sun.management.jmxremote export JAVA_OPTS

重启动服务器

输入http://localhost/probe/,输入用户名和密码 即可进入,这里比较精彩的是对内存的监视,动态显示了JVM的内存图表

4.1.2.3 JConsole

Linux系统下,需要修改 tomcat主目录\bin\ catalina.sh文件 增加一行 CATALINA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=218.28.198.188 -Dcom.sun.management.jmxremote.port=9527 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" 然后使用JConsole就可以监控Tomcat。 点击%JAVA_HOME%\bin下的jconsole.exe即可

4.1.2.4 JProfile

安装 首先到http://www.ej-technologies.com/download/overview.html 上下载 linux 和 windows版本的安装文件. 将 linux版本的文件(jprofiler_linux_7_0_1.sh),上传到服务器上, 将其安装。 安装命令: sh jprofile_linux_7_0_1.sh –c 即可。 Windows版本安装忽略,一路next即可.

性能测试体系-监控_第6张图片
性能测试体系-监控_第7张图片
性能测试体系-监控_第8张图片
性能测试体系-监控_第9张图片
性能测试体系-监控_第10张图片
性能测试体系-监控_第11张图片

按照上图 设置服务器上需要监控的应用启动参数, 如上内容是:

agentpath:/home/ivanzhang/jprofile7/bin/linux-86/libjprofilerti.so=port=8849 将其加入到应用的启动脚本

设置好之后, 服务器上的应用,会等待你客户端连接上以后,才真正启动应用。 Jprofile连接上之后,则可以看到一下界面了, 它可以帮助你分析内存信息,线程信息,jdbc连接等等, 以下是监控本地开发机的应用情况,可以看到,哪个线程在跑哪些SQL,由哪些方法调用的。

性能测试体系-监控_第12张图片
性能测试体系-监控_第13张图片

4.2 JBoss

4.2.1 监控指标说明

JBoss主要监控线程工作状态、请求数、 会话数、线程数、虚拟主机、JAVA虚拟机内存占用情况。

4.2.2 监控工具

4.2.2.1 JBoss管理控制台

如果需要监控jboss的系统资源,如:jboss的基本配置情况,jvm的利用率,线程池的使用情况,可以使用web-console进行监控。

配置web-console 具体方法同jmx-console,就是位置不同,具体方法参考jmx-console配置:

jboss-web xml 、 web.xml 在$JBOSS_HOME/vcom/deploy/management/console-mgr.sar/web-console.war/WEB-INF下;

login-config.xml还是原来的那个,把application-policy名为$webConsoleDomain的部分改成你需要的web-console;

web-console-users.properties、web-console-roles.properties定义了访问 web-console的用户、用户角色,具体位置,使用find /jboss -name web-console-users.properties 找到以后可以修改用户名、密码。

监控 使用http://localhost:8080/web-console/ 中,获取当前JBOSS-WEB应用模块的负载分担情况,并可以查看到当前JAVA虚拟机的内存使用情况,及线程池使用情况。 使用http://localhost:8080/web-console/status,可以进一步监控到每个线程的状态。

4.2.2.2 Probe

具体可以参照4.1.2.2 Probe

4.2.2.3 JConsole

具体可以参照4.1.2.3 JConsole

4.2.2.4 JProfile

具体可以参照4.1.2.4 JProfile

4.3 IIS监控

4.3.1 监控指标说明

主要针对会话、事务、缓存、内存、线程池等进行监控,具体如下:

ASP Session Duration 最近进行的会话所持续的时间(以毫秒为单位)。

ASP Sessions Current 正在使用服务的会话数。

IIS Global Total Files Cached 添加到 WWW 和 FTP 服务的缓存的文件总数。

Web Total Not Found Errors 由于未找到所请求的文档,Web 服务无法满足的请求数;通常以 HTTP 404 错误代码方式向客户端报告。

ASP Transactions Committed 已提交的事务数。

ASP Transactions Pending 正在处理的事务数。

ASP Transactions/Sec 每秒启动的事务数。

IIS Global URI Cache Hits URI 缓存中的成功查找总数。

IIS Global URI Cache Hits % URI 缓存命中数占全部缓存请求的比率。

IIS Global URI Cache Misses URI 缓存中的未成功查找总数

4.3.2 监控工具

4.3.2.1 集成的性能监视器

在性能监视器里面添加IIS应用计数器即可。

性能测试体系-监控_第14张图片

4.4 JVM

4.4.1 监控指标说明

JVM关注的指标主要是java虚拟机内存年轻代、年老代堆大小以及GC频率及回收时间。 JVM堆内存结构如下:

性能测试体系-监控_第15张图片

Young(年轻代) 年轻代分三个区。一个Eden区,两个 Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个 Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor区也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。

Tenured(年老代) 年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。

Perm(持久代) 用 于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等, 在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。 发生在年轻代的垃圾回收叫做GC/Minor GC,发生在年老代和永久代的垃圾回收叫做Full GC.

4.4.2 监控工具

4.4.2.1 JVM自带的jstat

jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间。 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

jstat -gccapacity pid 可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量, PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。 其他的可以根据这个类推, OC是old内纯的占用量。

jstat -gcutil pid 统计gc信息统计。

jstat -gcnew pid 年轻代对象的信息。

jstat -gcnewcapacity pid 年轻代对象的信息及其占用量。

jstat -gcold pid old代对象的信息。

jstat -gcoldcapacity pid old代对象的信息及其占用量。

jstat -gcpermcapacity pid perm对象的信息及其占用量。

jstat -class pid 显示加载class的数量,及所占空间等信息。

jstat -compiler pid 显示VM实时编译的数量等信息。

jstat -printcompilation pid 当前VM执行的信息。 Jstat显示的信息中一些术语的中文解释:

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC:Old代的容量 (字节)

OU:Old代目前已使用空间 (字节)

PC:Perm(持久代)的容量 (字节)

PU:Perm(持久代)目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

NGCMN:年轻代(young)中初始化(最小)的大小 (字节)

NGCMX:年轻代(young)的最大容量 (字节)

NGC:年轻代(young)中当前的容量 (字节)

OGCMN:old代中初始化(最小)的大小 (字节)

OGCMX:old代的最大容量 (字节)

OGC:old代当前新生成的容量 (字节)

PGCMN:perm代中初始化(最小)的大小 (字节)

PGCMX:perm代的最大容量 (字节)

PGC:perm代当前新生成的容量 (字节)

S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

O:old代已使用的占当前容量百分比

P:perm代已使用的占当前容量百分比

S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)

S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)

ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)

DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

TT: 持有次数限制

MTT : 最大持有次数限制

4.4.2.2 shell

将jstat中感兴趣的相关指标通过shell保存为文件,例如以下shell是每隔2秒钟将jstat监控的信息保存到文件中。

while true;do /usr/local/java/bin/jstat -gcutil `/usr/local/java/bin/jps | grep -v 'Jps' | grep -v 'Jstat' | egrep 'OrderPlatformLauncher|Bootstrap|TcpServerLauncher'| awk '{print $1}'` | grep -v 'S0' | awk '{print strftime("%m-%d-%H:%M:%S",systime()),$0}';sleep 2;done >> `hostname`_`date +%Y%m%d_%H%M`.jstat

4.4.2.3 jmap

jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等

命令格式 jmap [options] pid -dump:[live,]format=b,file= --dump堆到文件,live指明是活着的对象,file指定文件名。

性能测试体系-监控_第16张图片

因为在dump:live前会进行full gc,因此不加live的堆大小要大于加live堆的大小 -finalizerinfo 打印等待回收对象的信息

性能测试体系-监控_第17张图片

-heap 打印堆总结

性能测试体系-监控_第18张图片

-histo[:live] 打印堆的对象统计,包括对象数、内存大小等等

性能测试体系-监控_第19张图片

-permstat 打印java堆perm区的classloader统计

性能测试体系-监控_第20张图片

-F 强制,在jmap -dump或jmap -histo中使用,如果pid没有相应的回复 -J 提供jvm选项,如:-J-Xms256m

4.4.2.4 jstack

介绍 jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:

jstack [-l] pid

如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而 可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序 的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

命令格式

jstack [ option ] pid

jstack [ option ] executable core

jstack [ option ] [server-id@]remote-hostname-or-IP

常用参数说明

options:

executable Java executable from which the core dump was produced.

(可能是产生core dump的java可执行程序)

core 将被打印信息的core dump文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id 唯一id,假如一台主机上多个远程debug服务

基本参数:

-F当’jstack [-l] pid’没有相应的时候强制打印栈信息

-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

-m打印java和native c/c++框架的所有栈信息.

-h | -help打印帮助信息

pid 需要被打印配置信息的java进程id,可以用jps查询.

使用示例

性能测试体系-监控_第21张图片

4.4.2.5 JProfile

JProfile也可以监控JVM,并且以图形化的方式进行展示,方便信息的查看及分析。具体可以参照4.1.2.4章节。

4.4.2.6 JConsole

JConsole也可以监控JVM,并且以图形化的方式进行展示,方便信息的查看及分析。具体可以参照4.1.2.3章节。

4.5 .NET CLR

4.5.1 监控指标说明

.NET CLR是有微软开发的一台虚拟平台,支持C#/C++/VB等,此虚拟平台功能类似于JVM. .NET CLR主要功能如下:

平台无关

跨语言集成

自动内存管理

版本控制

安全 .NET CLR Memory计数器如下:

性能计数器 说明

指标解释

# Bytes in all Heaps(所有堆中的字节数)显示以下计数器值的总和,此计数器指示在垃圾回收堆上分配的当前内存(以字节为单位)。

# GC Handles(GC 处理数目)显示正在使用的垃圾回收处理的当前数目。

# Gen 0 Collections(第 2 级回收次数)显示自应用程序启动后第 0 级对象(即最年轻、最近分配的对象)被垃圾回收的次数。

# Gen 1 Collections(第 2 级回收次数)显示自应用程序启动后对第 1 级对象进行垃圾回收的次数。

# Gen 2 Collections(第 2 级回收次数)显示自应用程序启动后对第 2 级对象进行垃圾回收的次数。此计数器在第 2 级垃圾回收(也称作完整垃圾回收)结束时递增。

# Induced GC(引发的 GC 的数目)显示由于对 GC.Collect 的显式调用而执行的垃圾回收的峰值次数。让垃圾回收器对其回收的频率进行微调是切实可行的。

# of Pinned Objects(钉住的对象的数目)显示上次垃圾回收中遇到的钉住的对象的数目。钉住的对象是垃圾回收器不能移入内存的对象。

# of Sink Blocks in use(正在使用的接收块的数目)显示正在使用的同步块的当前数目。同步块是为存储同步信息分配的基于对象的数据结构。

# Total committed Bytes(提交字节的总数)显示垃圾回收器当前提交的虚拟内存量(以字节为单位)。提交的内存是在磁盘页面文件中保留的空间的物理内存。

# Total reserved Bytes(保留字节的总数)显示垃圾回收器当前保留的虚拟内存量(以字节为单位)。保留内存是为应用程序保留(但尚未使用任何磁盘或主内存页)的虚拟内存空间。

% Time in GC(GC 中时间的百分比)显示自上次垃圾回收周期后执行垃圾回收所用运行时间的百分比。

Allocated Bytes/second(每秒分配的字节数)显示每秒在垃圾回收堆上分配的字节数。

Finalization Survivors(完成时存留对象数目)显示因正等待完成而从回收后保留下来的进行垃圾回收的对象的数目。如果这些对象保留对其他对象的引用,则那些对象也保留下来,但此计数器不对它们计数。

Gen 0 heap size(第 2 级堆大小)显示在第 0 级中可以分配的最大字节数;它不指示在第 0 级中当前分配的字节数。

Gen 0 Promoted Bytes/Sec(从第 1 级提升的字节数/秒)显示每秒从第 0 级提升到第 1 级的字节数。内存在从垃圾回收保留下来后被提升。

Gen 1 heap size(第 2 级堆大小)显示第 1 级中的当前字节数;此计数器不显示第 1 级的最大大小。

Gen 1 Promoted Bytes/Sec(从第 1 级提升的字节数/秒)显示每秒从第 1 级提升到第 2 级的字节数。在此计数器中不包括只因正等待完成而被提升的对象。

Gen 2 heap size(第 2 级堆大小)显示第 2 级中当前字节数。不直接在此代中分配对。

Large Object Heap size(大对象堆大小)显示大对象堆的当前大小(以字节为单位)。垃圾回收器将大于 20 KB 的对象视作大对象并且直接在特殊堆中分配大对象;

Promoted Finalization-Memory from Gen 0(从第 1 级提升的完成内存)显示只因等待完成而从第 0 级提升到第 1 级的内存的字节数。

Promoted Finalization-Memory from Gen 1(从第 1 级提升的完成内存)显示只因等待完成而从第 1 级提升到第 2 级的内存的字节数。

Promoted Memory from Gen 0(从第 1 级提升的内存)显示在垃圾回收后保留下来并且从第 0 级提升到第 1 级的内存的字节数。

Promoted Memory from Gen 1(从第 1 级提升的内存)显示在垃圾回收后保留下来并且从第 1 级提升到第 2 级的内存的字节数。

4.5.2 监控工具

4.5.2.1 集成的性能监视器

Windows性能监视器中,可以将.NET CLR Memory中相关的计数器加入到监控中。

性能测试体系-监控_第22张图片

4.5.2.2 .NET Memory Profiler

Profiler可以调试4种类型的.NET程序,分别为:

桌面应用程序

WPF程序

ASP.NET程序

.NET Service程序 对应选择软件的文件菜单如下

Profler调试共有三种方式选择:

启动跟踪(Profiler Application)

选定对应的调试方式,如调试桌面程序,选中Profiler Application,然后选择需要启动的执行文件,Profiler将作为宿主程序启动程序开始实时监控内存.

附加进程(Attach Process)

将Profiler附加到指定的进程上,此时不能实时监控内存情况,只能够收集内存镜像.

导入内存镜像(Import Memory Dump)

可以选择dmp为后缀的内存镜像文件,比如Windbg以及DebugDiag导出的镜像文件,此时不能实时监控内存情况,只能够收集内存镜像且不能跟踪非托管资源.

具体操作如下:

启动程序

首先,选择需要调试类型,选择 Profiler Application,选择好需要启动的程序exe文件.

性能测试体系-监控_第23张图片

如果需要设置启动参数,则设置好命令行参数以及工作目录.

选择”Next”进行收集数据的一些选项设置,一般直接按”Star”按钮开始调试程序.

收集数据

选择菜单栏的收集按钮,收集堆数据,第一个为收集全部堆上的数据,第二个为只收集第0代的数据.

重新启动和停止

调试完毕后通过停止按钮跟踪程序,通过启动按钮重新启动上一次的调试程序.

查看收集数据

Profiler上有6个页卡,分别为:

Type/Resource 类型/资源页卡

Type/Resource Details类型/资源明细页卡

Instance Details 实例明细页卡

Call Stacks/Methods调用堆栈页卡

Navtive Memory 本地内存页卡

Real-Time-实时跟踪页卡

5 数据库指标监控

5.1 MySQL

5.1.1 监控指标说明

主要针对SQL耗时、吞吐量(QPS/TPS)、命中率、锁等待等指标进行监控。

5.1.2 监控工具

5.1.2.1 命令

效率低下SQL

mysqldumpslow -s at -t 20 host-slow.log

#mysql qps查询 QPS = Questions(or Queries) / Seconds

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Questions"'

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Queries"'

#mysql Key Buffer 命中率

key_buffer_read_hits = (1 - Key_reads / Key_read_requests)100% key_buffer_write_hits= (1 - Key_writes / Key_write_requests)100%

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Key%"'

#mysql Innodb Buffer 命中率

innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/ Innodb_buffer_pool_read_requests)100%

mysql -u root -p123456 -e 'SHOW /

!50000 GLOBAL */ STATUS LIKE "Innodb_buffer_pool_read%"'

#mysql Query Cache 命中率

Query_cache_hits= (Qcache_hits / (Qcache_hits + Qcache_inserts))100%

mysql -u root -p123456 -e 'SHOW /

!50000 GLOBAL */ STATUS LIKE "Qcache%"'

#mysql Table Cache 状态量

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Open%"'

#mysql Thread Cache 命中率

Thread_cache_hits = (1 - Threads_created / Connections)100% 正常来说,Thread Cache 命中率要在 90% 以上才算比较合理。

mysql -u root -p123456 -e 'SHOW /

!50000 GLOBAL */ STATUS LIKE "Thread%"'

#mysql 锁定状态

锁定状态包括表锁和行锁两种,我们可以通过系统状态变量获得锁定总次数,锁定造成其他线程等待的次数,以及锁定等待时间信息

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "%lock%"'

你可能感兴趣的:(性能测试体系-监控)