性能监控(操作系统层面-CPU)
一、性能监控概述
1.监控的重要性
必须做监控:做性能测试必须监控,否则不知道问题出在哪里
监控是性能测试的核心环节
2.监控的两个维度
操作系统维度:所有系统都必须监控(通用)
监控对象:CPU、内存、网络、磁盘
适用性:无论什么语言(PHP、Python、Java、Go、C)都需要
应用程序维度:监控特定语言的应用程序
如:Java应用、C++应用、Python应用等
二、监控方法论
1.学习路径建议
先学底层:先掌握操作系统原生命令
再学工具:再学习高级监控工具/平台
原因:
面试重点考察基础命令
理解原理后才能更好使用高级工具
类比:先学SQL再学可视化工具(如Navicat)
2.监控原则
掌握根本:底层原生命令是基础
理解原理:知道监控数据如何计算得出
三、CPU监控详解
1.监控命令:top
功能:Linux下的实时交互式监控工具
监控范围:CPU、内存、进程
刷新频率:默认每3秒刷新一次
退出方式:按
Ctrl + C
2.CPU监控关键指标
(1)CPU使用率计算
核心公式:
CPU使用率 = 100% - %ID%ID(idle):CPU空闲率
示例:%ID = 98.3%,则CPU使用率 = 1.7%
(2)CPU使用率各组成部分
| 指标 | 英文 | 含义 | 说明 |
|---|---|---|---|
| %us | user | 用户进程占用CPU | 用户自己启动的进程(如Tomcat、MySQL) |
| %sy | system | 系统进程占用CPU | 操作系统自带进程 |
| %id | idle | CPU空闲率 | 可直接计算CPU使用率 |
| %wa | wait | CPU等待磁盘操作时间占比 | 值高表示磁盘慢/有瓶颈 |
| %hi | hard interrupt | 硬中断时间占比 | 硬件(鼠标、键盘、网卡)中断造成 |
| %si | soft interrupt | 软中断时间占比 | 软件(多线程上下文切换)造成 |
(3)理解要点
计算基础:CPU使用率基于时间统计
计算方法:CPU处理任务时间 ÷ 总时间 = CPU使用率
统计周期:top命令统计过去3秒的平均值
3.多核CPU监控
(1)关键前提
每个CPU核心:同一时刻只能执行一个任务
多核CPU:n个核心同一时刻可执行n个任务
(2)多线程实现原理
单核多线程:通过快速切换实现"同时"运行多个线程
切换速度:CPU切换速度极快,人类无法感知
实际并发:1万个并发线程用8核CPU处理 → 需要快速切换
(3)查看多核使用情况
默认显示:所有CPU核心的平均值
按数字
1:显示每个核心的详细使用情况作用:
查看CPU核心数
分析各核心负载是否均衡
4.进程监控与排序
(1)进程列表
显示内容:各进程消耗的CPU和内存数据
默认排序:按CPU使用率降序排列
内存排序:按大写
M键切换到内存使用率排序切回CPU排序:按
P键切回CPU排序
(2)关键字段解析
PID:进程ID
%CPU:进程占用CPU百分比
%MEM:进程占用内存百分比
RES:进程占用的物理内存(单位:KB)
示例:277MB ≈ 15%内存使用率(基于2GB总内存)
(3)重要特性
进程%CPU可能超过100%:
原因:统计的是进程占用所有CPU核心使用率之和
上限:n核CPU上限为 n × 100%
示例:16核CPU上,进程%CPU可达1600%
与整体CPU使用率的区别:
整体CPU:所有核心的平均值(上限100%)
进程CPU:占用各核心之和(上限为n×100%)
5.CPU问题排查流程
(1)排查步骤
发现CPU使用率高:top命令看到整体CPU使用率高
定位问题进程:
查看进程列表(默认按CPU排序)
找到占用CPU最高的进程
分析归属:
如果是压测程序 → 程序本身问题
如果是其他程序 → 系统其他问题
深入分析:按
1查看各核心负载情况
(2)实战案例
挖矿病毒案例:
现象:CPU持续100%但无压测
排查:top发现陌生高CPU进程
确认:百度搜索进程名确认为挖矿程序
解决:重装系统、修改密码
教训:定期检查服务器异常进程
四、监控实战技巧
1.产生测试负载
目的:模拟真实场景观察监控数据变化
方法:
使用JMeter等压测工具
对Web应用接口施加压力
观察监控数据动态变化
2.监控时机
压测期间:持续监控系统资源使用情况
日常运维:定期检查异常进程
问题排查:出现性能问题时第一时间监控
3.监控数据解读
动态变化:监控数据随负载变化而变化
基准对比:建立系统正常状态下的基准值
阈值报警:设定关键指标的报警阈值