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

性能监控

使用命令监控

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行的代码需要优化。

相关推荐
顾林海5 小时前
Android 性能优化:启动优化全解析
android·java·面试·性能优化·zygote
断剑重铸之日8 小时前
Flutter 滑动面板组件(修复版)
flutter·性能优化
顾林海13 小时前
Android深入解析 so 文件体积优化
android·面试·性能优化
勤奋的知更鸟14 小时前
JavaScript 性能优化实战:深入性能瓶颈,精炼优化技巧与最佳实践
开发语言·javascript·性能优化
mit6.82417 小时前
[Nagios Core] 事件调度 | 检查执行 | 插件与进程
c语言·开发语言·性能优化
Code季风19 小时前
深度优化 spring 性能:从缓存、延迟加载到并发控制的实战指南
java·spring boot·后端·spring·缓存·性能优化
张璐月1 天前
mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
数据库·mysql·性能优化
今天也在写bug2 天前
webpack中SplitChunks的分割策略
前端·webpack·性能优化·代码分割·splitchunks
诗和远方14939562327342 天前
电量监控方案设计
性能优化
香蕉可乐荷包蛋2 天前
vue防内存泄漏和性能优化浅解
前端·vue.js·性能优化