核心内容摘要
3大智能模块打造全平台游戏账号管理工具:从扫码登录到直播抢码的一站式解决方案
文章目录
性能测试监控关键指标
1 系统指标
2 硬件服务器资源指标
1.
1 CPU、内存、磁盘
1.
2 CPU使用率
1.
3 CPU占用分类
1.
4 内存和虚拟内存
1.
5 磁盘IO
1.
6 网络
3 JAVA应用
1.
1 JVM-java虚拟机
1.
2 JAVA虚拟机内存
1.
3 FULL GC机制
4 数据库监控
1.
1 慢查询
1.
2 缓存命中率
1.
3 数据池连接数
1.
4 mysql锁
5 压测机资源
性能监控工具
1 硬件网络资源监控
2.
1 工具
2.
2 Linux命令
2.
1.
1 top-实时查看CPU、内存
2.
1.
2 free-查看内存
2.
1.
3 vmstat-查看CPU、内存等
2.
1.
4 sar-查看网络
2.
1.
5 iostat-查看磁盘IO
2 应用服务器、数据库配置
2.
1 应用服务器配置
2.
2 数据库服务器配置
3 数据库资源监控-慢查询
2.
1 Mysql常用监控指标
2.
2 设置与开启慢查询
2.
3 准备测试数据
2.
4 测试-慢查询和实时日志查看
4 JVM
2.
1 代码
常见问题
2.
2 内存分类
2.
3 下载并配置VisualVM
2.
4 JVM监控—Jvisualvm.exe
2.
5 内存溢出演示
性能测试监控关键指标
系统指标 系统指标则与用户场景及需求直接相关并发用户数 某一物理时刻同时向系统提交请求的用户数平均响应时间 系统处理事务的响应时间的平均值。
对于系统快速响应类页面 一般响应时间为3秒左右吞吐量
服务器资源指标 资源指标与硬件资源消耗直接相关CPU使用率 一般可接受上限为85%内存利用率 一般可接受上限为85%磁盘I/O网络带宽
Java应用JAVA应用程序在运行时的各项指标JVM监控 JVM内存、 Full GC频率
数据库数据库服务器运行时需要监控的指标慢查询缓存命中率数据池连接数mysql锁
压测机资源数据库服务器运行时需要监控的指标CPU内存网络磁盘空间一般情况下测试人员执行性能测试时只需要关注
1、
5就可以判断系统是否有性能问题而开发人员要定位性能问题时需要再次运行并监控所有的性能指标来进行分析并调优。
1 系统指标可以直接用来衡量系统处理能力的指标是吞吐量在系统处于轻压力区未饱和时并发用户数上升平均响应时间基本不变系统吞吐量上升在系统处于重压力区基本饱和时并发用户数上升平均响应时间上升系统吞吐量基本不变在系统处于崩溃区压力过载时并发用户数上升平均响应时间上升系统吞吐量下降
2 硬件服务器资源指标
1.
1 CPU、内存、磁盘从处理速度来说CPU内存磁盘。
(CPU与内存、内存与磁盘速度差特别多)快存在CPU中起到存储作用。
CPU读数据时先从快存读读不到再从内存读。
缓冲区在内存中起到缓冲作用。
内存读数据时先从缓冲区读读不到再从磁盘读。
快存和缓冲区的作用都是读取数据时起到缓冲区的作用。
1.
2 CPU使用率CPU使用率的计算方法在一段时间内每个程序占用的CPU时间除以总时间得到每个程序的CPU使用率。
1.
3 CPU占用分类
在电脑中的所有程序及所有操作都需要消耗CPU用户使用的程序QQ、微信、浏览器等消耗CPU用户CPU从内存中读取数据、从磁盘中读数据、磁盘管理等操作系统的工作也需要消耗CPU称为系统CPU
性能测试时统计的CPU使用率 用户CPU使用率系统CPU使用率
因此如果性能测试时统计CPU使用率不一定就是程序软件有问题,可能是操作系统消耗过多CPU
1.
4 内存和虚拟内存
正常情况下程序加载到内存中来执行。
当内存不够时会加载部分立即要执行的程序到内存中其他的程序部分放在磁盘虚拟内存中。
当立即要执行的程序执行完成后从虚拟内存中读取其他的数据内容到实际内存中再执行程序的处理。
依次循环第3步完成程序的运行。
卡的原因的就是每次都需要从虚拟内存磁盘中读取数据进行执行磁盘的读取速度相对CPU和内存而言非常因此感觉内存不足程序很卡。
闪退的原因就是在第2步中需要加载部分立即要执行的程序到内存中如果当前的内存空间不满足最低要求立即要执行的程序所需要的内存时就会出现闪退。
1.
5 磁盘IO固定硬盘lO500M/s机械硬盘IO不超过200M/s
1.
6 网络监控实际的网络流量与网络带宽做对比如果实际网络流量与网络带宽接近则说明网络存在瓶颈需要优化。
百兆带宽100Mbyte/s实际技术中衡量的宽带的单位KB/s因此需要换算100/8
1
5MKB/s
3 JAVA应用
1.
1 JVM-java虚拟机JVMJAVA Virtual Machine又叫java虚拟机。
虚拟出来的空间专门供JAVA程序运行。
1.
2 JAVA虚拟机内存堆区需要重点关注的部分动态变化。
所有的对象在初始化会申请堆区的空间如果申请的空间在使用结束没有及时的释放那么这个空间就会被占用。
——— 内存泄漏监控点因此在测试时需要关注堆区的空间是否持续上升没有下降。
1.
3 FULL GC机制垃圾回收将内存中已申请并使用完成的那部分内存空间回收供新申请使用。
垃圾回收机制都是针对堆区的内存进行的。
JVM的垃圾回收机制:
新程序执行申请内存空间先从年轻代中申请。
在年轻代满了以后就会进行垃圾回收Young GC。
回收时检查年轻代中的内存是否还在使用在使用的部分存到生存区2中不使用的部分释放此时年轻代内存空间被清空。
新程序执行申请内存空间再从年轻代申请。
年轻代又满了就会进行垃圾回收Young GC。
检查还在使用的内存存到生存区1中把生存区2中的内存也都存到生存区1中。
此时就会清空年轻代和生存区2。
循环
步
如果部分内存在生存区中存活很久(内存在生存区中移动了10次左右)将这部分内存放入到老年代中。
循环
步直到老年代内存空间全部占满此时就要进行垃圾回收Full GC。
因为系统在做垃圾回收时不能够处理任何用户业务的。
如果垃圾回收过于频繁导致系统业务处理能力下降。
监控点Full GC内存比较大垃圾回收一次时间比较长那么这段时间内都不能处理业务对系统影响比较大因此我们需要关注Full GC频率。
4 数据库监控
1.
1 慢查询慢查询监控系统在运行时所执行的所有SQL语句检查这些SQL执行时间是否慢自己设置一个时长执行时间超过这个时长就是慢查询通过这个方法可以把系统运行时所有执行时间比较长的SQL找出来进行优化。
1.
2 缓存命中率
正常情况下SQL查询从磁盘中的数据库文件中读取数据。
当某一个SQL语句之前执行过SQL语句及查询结果都会缓存下来下次再查询相同的SQL语句时就直接从数据库缓存中读取。
监控点业务执行过程中SQL查询时的缓存命中率。
查询语句读取缓存的次数占总的查询次数的比例如果缓存命中率过低需要优化对应的代码和SQL查询语句想办法提交缓存命中率。
1.
3 数据池连接数监控点数据库连接池的使用率如果数据库连接池被占满此时如果有新的SQL语句要执行只能排队等待等待连接池中的连接被释放之前的SQL语句执行完成如果监控发现数据库连接池的使用率过高甚至是经常出现排队的情况需要进行调优。
1.
4 mysql锁锁一种保护机制访问多人修改同一数据时会产生不可控的后果。
AB同时修改数据LA修改数据L时会给L数据加一把锁逻辑概念别人不能用)B如果想修改数据L系统会提示A正在修改页面/表锁:一次只允许一个用户对这张表进行修改。
适用于一些静态的页面不经常写入的表 行锁:一次只允许一个用户对表中的一行数据进行修改其他用户想修改表中其他行的数据是可以的。
例如: A给B转账5W ——同时—— B给A转账500
A减去5W(对A的记录加行锁)
B减去500(对B的记录加行锁)
B加上5w
A加上500 此时就会出现死锁死循环)两个任务都无法执行下去对比页面锁处理效率低但是不会出现死锁行锁处理效率高但是可能出现死锁监控点需要监控在性能测试过程中是否有死锁出现如果出现需要进行代码优化。
5 压测机资源CPUcpu使用率-不超过80%内存内存使用率-不超过80%。
网络带宽磁盘空间压测机主要是发送请求(发送请求时往外发消息没有太多的磁盘操作IO通常不会有问题)。
Jmeter运行时会记录日志(注意磁盘空间不要被占满)
性能监控工具要对性能测试指标进行监控 可以使用系统自带的监控工具 也可以使用第三方监控工具或者监控平台。
系统指标通过性能测试工具(如LoadRunner、 JMeter等)以图形化方式监控
服务器资源指标使用JMeter性能监控插件PerfMon Metrics Collector监控服务器资源。
使用Linux命令监控 top、 free、 vmstat、 sar、 iostat等。
Nmon 全面监控linux系统资源使用情况 包括CPU、 内存、 I/O等 可独立于应用监控。
Java应用jvisualvm
数据库
压测机资源Windows自带“任务管理器”
1 硬件网络资源监控
2.
1 工具结合服务器安装的ServerAgent 工具配合JMeter性能监控插件PerfMon Metrics Collector实现服务器硬件资源监听
2.
2 Linux命令
2.
1.
1 top-实时查看CPU、内存在Linux系统中实时查看CPU、内存的命令类似于Windows下的资源管理器通过q退出。
ctrl C 强制退出使用 E 修改显示的数据单位man top 帮助手册查看[rootlocalhost ~]# toptop- 04:26:17 up12:46,3users, load average:
00,
01,
05Tasks:111total,2running,109sleeping,0stopped,0zombie %Cpu(s):
3us,
7sy,
0ni,
9
0id,
0wa,
0hi,
0si,
0st KiB Mem:995676total,96620free,643040used,256016buff/cache KiB Swap:2097148total,2096884free,264used.188168avail Mem ————————————————————————————————————————————————————————————————1load average:
08,
07,
061分钟5分钟15分钟上 CPU排队的平均时间。
界面显示的时间除以CPU的数量如果长期大于5说明CPU硬件能力不足超负载了。
20 zombie# 表示系统的僵尸进程# 僵尸进程linux系统中所有的进程都是由父进程生出来的每个进程都有一个父进程。
当一个进程执行结束父进程有义务对子进程进行回收。
如果父进程没有回收或者在父进程回收之前它就会变成僵尸。
# 编写程序不允许当前Linux系统有僵尸出现。
因为僵尸一出现代表资源没有被回收3%Cpu(s):
3us,
7sy# cpu占用的百分比
3 us 用户进程占用的百分比
7 sy 系统进程占用的百分比4KiB Mem# Mem 内存KiB 以KB位单位995676total,96620free,643040used,256016buff/cache# total内存总量free内存剩余used内存使用buff/cache 缓冲区/缓存5KiB Swap# Swap交换空间KiB 以KB位单位交换空间是拿磁盘当内存使用Linux系统中的特有机制。
2.
1.
2 free-查看内存作用查看系统内存使用情况。
参数 -m 以兆 为单位显示。
total 总的used 已使用free 空闲shared 共享buff/cache 缓冲区/缓存available 可使用的Mem 内存Swap 交换空间[rootlocalhost ~]# freetotal usedfreeshared buff/cache available Mem:9956766487646694825676279964182228Swap:20971482642096884# 以MB为单位[rootlocalhost ~]# free -mtotal usedfreeshared buff/cache available Mem:9726336525273178Swap:204702047# 以GB为单位[rootlocalhost ~]# free -gtotal usedfreeshared buff/cache available Mem:000000Swap:
1012.
1.
3 vmstat-查看CPU、内存等vmstat 是全面的性能分析工具可以查看系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下文切换、CPU使用。
vmstat 1 每1秒检测1次持续不停检测vmstat 1 4 1表示1秒查询一次总共查询4次[rootlocalhost ~]# vmstatprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpdfreebuff cache si so bi boincs us syidwa st20264758561642668120054571391099001procs进程 r表示运行和等待CPU时间片的进程数这个值如果长期大于系统CPU个数说明CPU资源不足 b表示等待资源的进程数。
等待资源除CPU以外的其它资源 ————————————————————————————————————————————————————————————————————————————————————————————————————# vmstat 1 4 1表示1秒查询一次总共查询4次[rootlocalhost ~]# vmstat 1 4procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpdfreebuff cache si so bi boincs us syidwa st
2026475960164270684005458140119900002647579616427068800008918012970010264750641642706880001717027043930011026475648164270696000121112002296002.
1.
4 sar-查看网络
sar命令属于sysstat工具集的一部分如果系统没有安装sysstat包sar命令就无法使用。
# 命令来安装sysstat包sudoapt-getinstallsysstat# Ubuntu/Debiansudoyuminstallsysstat# CentOS/RHEL
命令格式sar -n DEV131-n 类型2DEV 类型参数可选31 时间间隔45 次数 sar -h# 查看帮助sar -n EDEV 1 2 # 统计网络设备通信失败信息sar -n DEV 1 2 # 网路设备的状态信息每隔1秒监测1次一共监测2次。
[rootlocalhost ~]# sar -n DEV 1 2Linux
3.
1
0-
el
x86_64(localhost.localdomain)2025年08月03日 _x86_64_(1CPU)07时34分23秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 07时34分24秒 lo
0.
000.
000.
000.
000.
000.
0
0007时34分24秒 ens
3315.
0022.
001.
402.
990.
000.
0
0007时34分24秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 07时34分25秒 lo
0.
000.
000.
000.
000.
000.
0
0007时34分25秒 ens
3314.
8521.
781.
392.
500.
000.
0
00平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 平均时间: lo
0.
000.
000.
000.
000.
000.
0
00平均时间: ens
3314.
9321.
891.
402.
740.
000.
0
00# rx:表示接收# tx表示发送
2.
1.
5 iostat-查看磁盘IO作用查看系统中磁盘的读写情况[rootlocalhost ~]# iostatLinux
3.
1
0-
el
x86_64(localhost.localdomain)2025年08月03日 _x86_64_(1CPU)avg-cpu: %user %nice %system %iowait %steal %idle
0.
740.
000.
710.
000.
0
55Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda
0.
6710.
6
21692167536170scd
00.
000.
0
00440dm-
00.
6510.
4
11679792529598dm-
10.
020.
040.
0
2 应用服务器、数据库配置
2.
1 应用服务器配置Apache默认最大连接数 256 。
Nginx默认最大连接数 受Linux系统默认打开的最大文件个数限制。
ulimit -n 查看[rootlocalhost ~]# ulimit -n1024Tomcat默认最大连接数 200。
——软件测试工程师只需要定位 性能瓶颈是由应用服务器的默认最大连接数限制即可。
修改工作由开发完成。
2.
2 数据库服务器配置mysql默认最大连接数 151。
[rootlocalhost ~]# mysql -uroot -pEnter password:# 查看最大连接数mysqlshow variables like%max_connections%;------------------------|Variable_name|Value|------------------------|max_connections|151|------------------------1rowinset(
01sec)# 查看当前连接数mysqlshow status likemax_used_connections;-----------------------------|Variable_name|Value|-----------------------------|Max_used_connections|12|-----------------------------1rowinset(
01sec)mysqlsetglobalmax_connections1000;--设置最大连接数为1000可以再次查看是否设置成功——软件测试工程师只需要定位 性能瓶颈是由数据库服务器的默认最大连接数限制即可。
修改工作由数据库管理员完成。
3 数据库资源监控-慢查询
2.
1 Mysql常用监控指标由于数据库中数据量较大并且对应的字段没有设置提高检索效率的手段很容易导致查询速度慢降低系统性能。
慢查询指执行速度低于设置的阀值的SQL语句作用帮助定位查询速度较慢的SQL语句方便更好的优化数据库系统的性能
2.
2 设置与开启慢查询
查询Mysql慢查询开关状态 及 日志文件的位置。
showvariableslikeslow_query%;
使用sql语句开启Mysql数据库慢查询 开关默认关闭 OFFsetglobalslow_query_logON;
查看Mysql默认的慢查询阈值。
showvariableslikelong_query_time;
修改慢查询阈值。
默认阈值为 10s setgloballong_query_time1;参数说明slow_query_log: 慢查询日志开启状态[ON:开启 OFF:关闭]slow_query_log_file: 慢查询日志存放位置long_query_time: 慢查询时长设置超过该时长才会被记录单位秒# 开启慢查询日志mysqlsetglobalslow_query_logON;# 设置慢查询日志存放位置可选mysqlsetglobalslow_query_log_file/data/slow_query.log;# 设置慢查询时间标准 设置之后会在下次会话才生效mysqlsetgloballong_query_time1;
2.
3 准备测试数据使用python解释器运行构造10万条测试数据开发提供测试脚本或数据
2.
4 测试-慢查询和实时日志查看
为什么没有触发慢查询通过navicat软件右键点击litemall_goods表—选择设计表—刚才查询的字段依赖的是id字段id在这张表中主键。
主键具有唯一性会自动添加索引而这个索引是导致查询速度变快的原因。
selectcount(*)fromlitemall_goods;-- 统计litemall_goods数据库总记录数select*fromlitemall_goodslimit1;-- 查询数据库第一条数据查看第一页数据数据库有默认排序select*fromlitemall_goodsorderbyiddesclimit1;-- 查询最后一条记录 通过iddesc降序 排列select*fromlitemall_goodswherename母亲节礼物-舒适安睡组合;-- 触发了慢查询用时
637s。
mysql数据库自带一种缓存命中率机制对于相同数据的反复查询可以借助缓存提高查询效率。
一旦缓存被清理查询速度依然慢。
查询 日志文件命令tail -f 日志文件名.logmysql里面的时间计算是按美国时间计算因此会出现时间不一致情况[rootlocalhost ~]# tail -f /var/lib/mysql/localhost-slow.log # 实时查看日志文件信息
4 JVM
2.
1 代码
常见问题
内存泄漏(Memory Leak)内存不释放 占着茅坑不拉屎程序申请的内存使用结束后未被释放导致内存持续占用且无法被其他程序使用。
Java中对象引用未设为null导致垃圾回收机制无法回收。
内存溢出(Out Of Memory)内存不够用程序申请内存时系统无法提供所需空间。
Java堆内存或线程栈超出限制会抛出OutOfMemoryError两者关系 内存泄漏是因未释放的内存会持续占用资源长期积累可能导致可用内存不足最终引发内存溢出。
内存溢出是果当系统内存不足时程序无法继续申请新内存导致运行异常。
扩展查看服务器日志文件常见 关键字Memory Leak内存泄漏 Out Of Memory 内存溢出 error错误 Excepion异常 null空 java空引用C空指针 500服务器错误
2.
2 内存分类stack 栈存储新建对象的引用内存地址和基础数据类型heap 堆存储新建对象的实际内容是监控代码内存溢出的主要目标。
2.
3 下载并配置VisualVM
下载VisualVMJDK 8及更高版本已不包含 VisualVM 工具需单独下载安装。
VisualVM下载官网 https://visualvm.github.io/
下载解压之后在bin文件夹下找到 visualvm.exe 启动程序。
因为在安装java时配置了PATH和JAVA_HOME因此不用指定JDK也可以成功启动 参见java安装和配置
2.
4 JVM监控—Jvisualvm.exeJvisualvm能监控 JVM java虚拟机 使用本地jvisualvm远程监控服务器
进入项目jar包所在的目录添加参数来辅助Jvisualvm进行监控重新启动litemall项目服务器。
保证Linux服务器和Windows系统相互之间是能ping通使用 ps aux|grep litemall 查询当前 轻商城项目 的服务器 进程id使用kill -9 进程id 关闭 原有的 轻商城项目 的服务器使用带有参数的命令重启litemall服务器。
注意修改成自己linux的IP浏览器 借助http://www.litemall
com:8082/#/user/ 测试服务器是否重启成功java -jar -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname
172.
16.
2
5 -Dcom.sun.management.jmxremote.port10086-Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.management.jmxremote.authenticatefalse litemall-all-
0.
0-exec.jar ——————————————————————————————————————————————————————————————————————# 真正 运行的命令java -jar -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname
172.
16.
2
5 -Dcom.sun.management.jmxremote.port10086-Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.management.jmxremote.authenticatefalse litemall-all-
0.
0-exec.jar
jdk8之前的老版本有Jvisualvm.exe进入本地jdk安装目录bin目录 找到jvisualvm.exe双击并启动
右键“远程”选择“添加远程主机” 并输入主机IP (IP地址为linux虚拟机的IP )
右键主机选择“添加JMX连接”右键点击“添加JMX连接”填写端口号预设的端口号
点击JMX连接选择监控看JVM对应的监控指标。
重点关注CPU使用、堆的内存使用
2.