性能监控(操作系统层面-CPU)

性能监控(操作系统层面-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) 排查步骤
  1. 发现CPU使用率高:top命令看到整体CPU使用率高

  2. 定位问题进程

    • 查看进程列表(默认按CPU排序)

    • 找到占用CPU最高的进程

  3. 分析归属

    • 如果是压测程序 → 程序本身问题

    • 如果是其他程序 → 系统其他问题

  4. 深入分析 :按1查看各核心负载情况

(2) 实战案例
  • 挖矿病毒案例

    • 现象:CPU持续100%但无压测

    • 排查:top发现陌生高CPU进程

    • 确认:百度搜索进程名确认为挖矿程序

    • 解决:重装系统、修改密码

  • 教训:定期检查服务器异常进程

四、监控实战技巧

1. 产生测试负载

  • 目的:模拟真实场景观察监控数据变化

  • 方法

    • 使用JMeter等压测工具

    • 对Web应用接口施加压力

    • 观察监控数据动态变化

2. 监控时机

  • 压测期间:持续监控系统资源使用情况

  • 日常运维:定期检查异常进程

  • 问题排查:出现性能问题时第一时间监控

3. 监控数据解读

  • 动态变化:监控数据随负载变化而变化

  • 基准对比:建立系统正常状态下的基准值

  • 阈值报警:设定关键指标的报警阈值

相关推荐
驱动探索者2 天前
U盘发展史
网络·cpu·u盘
小白狮ww3 天前
要给 OCR 装个脑子吗?DeepSeek-OCR 2 让文档不再只是扫描
人工智能·深度学习·机器学习·ocr·cpu·gpu·deepseek
熊猫钓鱼>_>3 天前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
Jing_jing_X8 天前
CPU 架构:x86、x64、ARM 到底是什么?为什么程序不能通用?
arm开发·架构·cpu
小白狮ww9 天前
Ovis-Image:卓越的图像生成模型
人工智能·深度学习·目标检测·机器学习·cpu·gpu·视觉分割模型
菜鸟的学习日记、11 天前
CPU/MCU/SOC/FPGA概念对比
mcu·cpu·soc
Wpa.wk14 天前
Docker原理和使用场景(网络模式和分布式UI自动化环境部署)
linux·经验分享·分布式·测试工具·docker·性能监控
驱动探索者14 天前
AMD EPYC 服务器 CPU 学习
运维·服务器·学习·cpu
十五年专注C++开发18 天前
浅谈CPU中的SIMD
c++·cpu·代码优化·simd
AndrewHZ21 天前
【AI黑话日日新】什么是访存bound?
人工智能·语言模型·大模型·cpu·访存·计算逻辑