性能测试-性能监控分析与调优(三)《实战》

性能监控

使用命令监控

cpu瓶颈分析
top命令

在进行性能测试时使用top命令,界面如下

上图可以看出

  • CPU 概况区: %Cpu(s):
    • us(用户进程占用CPU的百分比), 和 sy(系统进程占用CPU的百分比) 的数值很高说明cpu处于忙碌状态,
    • 且id(空闲CPU百分比)的值也比较高说明cpu的资源还比较足。
    • si(软件中断所消耗的CPU使用的百分比)只占用一点点

load average(负载平均值): 显示了1分钟、5分钟、15分钟的平均负载值。可以看出最近1分钟内发生了大量的负载

物理内存(Mem)和交换空间(Swap):

  • total:物理内存的总大小。
  • used:已使用的物理内存大小。
  • free:剩余的物理内存大小。
  • buff/cached:缓存的物理内存的大小占比

CPU使用率排序显示进程列表:

  • PID:进程ID,表示每个进程的唯一标识符。

根据上面进行分析可以得出改系统进行性能测试时,可以看出us比sy高很多,且cpu使用率排在前面的应用程序主要为java程序和数据库mysql
用户态比较高:

%us (或 %user):

这个参数表示 CPU 在用户态下执行应用程序代码的时间比例。如果这个值较高,说明用户态时间比例较高。

%id (或 %idle):

这个参数表示 CPU 空闲的时间比例。如果用户态时间比例高,通常 %id 的值会比较低,因为 CPU 没有太多空闲时间。

CPU 使用率:

在 top 命令的顶部,会显示总的 CPU 使用率,包括用户态、系统态、空闲等。如果用户态时间比例高,总的 CPU 使用率也会相应较高。

进程列表:

在 top 命令的进程列表中,可以看到每个进程的 CPU 使用情况,包括用户态和系统态时间。如果某个进程的用户态时间比例较高,可能需要进一步分析该进程的行为。

java程序也就是应用程序,它的使用率高,说明它的代码消耗的cpu比较多,需要分析代码问题 详见 > 分析定位代码问题

数据库服务器cpu用户态高:说明是 sql语句的逻辑很复杂。 sql要分析优化。

系统态比较高

%sy (或 %system):

这个参数表示 CPU 在内核态下执行系统代码的时间比例。如果这个值较高,说明系统态时间比例较高。

%id (或 %idle):

这个参数表示 CPU 空闲的时间比例。如果系统态时间比例高,通常 %id 的值会比较低,因为 CPU 没有太多空闲时间。

%wa (或 %iowait):

这个参数表示 CPU 等待 I/O 操作完成的时间比例。如果系统态时间比例高,并且 %wa 的值也较高,可能意味着系统正在进行大量的 I/O 操作,导致内核态时间增加。

%st (或 %steal):

这个参数只在虚拟化环境中出现,表示被管理程序(如虚拟机监控器)"偷走"的时间,用于为其他虚拟机提供服务。在非虚拟化环境中,这个值通常为 0。

CPU 使用率:

在 top 命令的顶部,会显示总的 CPU 使用率,包括用户态、系统态、空闲等。如果系统态时间比例高,总的 CPU 使用率也会相应较高。

进程列表:

在 top 命令的进程列表中,可以看到每个进程的 CPU 使用情况,包括用户态和系统态时间。如果某个进程的系统态时间比例较高,可能需要进一步分析该进程的行为。

要分析具体的原因,而不是直接找代码问题。

原因有很多很多情况:比较常见的------ 磁盘获取资源

分析定位代码问题:

获取线程栈定位代码 arthas

下载: 百度搜索 arthas软件下载,上传到项目所在的机器

bash 复制代码
wget https://arthas.aliyun.com/arthas-boot.jar;

启动arthas: 首先,要确认机器上有 java进程 java -jar arthas-boot.jar

bash 复制代码
java -jar arthas-boot.jar

找到 导致项目机器cpu的使用率最高的 java进程的id, 输入这个进程在arthas中对应编号, 回车自动去连接到你选择的java进程

我的这里先死是1

使用arthas:

获取帮助: help

查看线程栈: thread

thread -n 5 显示出cpu使用率最高的5个线程栈信息

展示信息如下:

根据展示的信息和项目信息寻找相关的日志


根据日志我们可以定位到java程序中的67行和73行的代码需要优化。

相关推荐
李昊哲小课9 小时前
Spring Boot 4 旅游主题实战教程 阶段四:缓存与底层进阶
spring boot·redis·缓存·性能优化·log4j·旅游·性能
人丰14 小时前
血泪复盘:一次由 HttpContext.Current 引发的 CPU 100% 惨案
性能优化·.net
晓晓_za89866814 小时前
GEO 搜索源码白帽合规改造:适配各大 AI 信源收录规则
java·开发语言·人工智能·性能优化·开源
yunwei3716 小时前
CPU 噪声会拖慢 GPU 推理吗:用 eBPF 定量测量调度器与 IRQ 影响
linux·人工智能·性能优化
kyle~17 小时前
x86 汇编LOCK前缀 --- 硬件架构向软件提供的核心同步原语
汇编·c++·性能优化·硬件架构·实时系统
devilnumber1 天前
MySQL 性能优化・诗意化记忆
数据库·mysql·性能优化
ly76891 天前
Web 性能优化实战:从 Core Web Vitals 到工程化性能治理
前端·性能优化
李昊哲小课1 天前
SpringBoot4 云端咖啡站 阶段四:安全、文件与性能
spring boot·安全·性能优化·文件·性能
小小杨树1 天前
【C++】学习:双缓冲视频流水线深解析
c++·性能优化·音视频开发
k4m7v2pz2 天前
Godot 4 仿 agar.io 卡顿优化:用空间网格把 30 万次碰撞检测降到几千次
性能优化·godot·游戏开发·碰撞检测·空间网格