--
:
--
:
--
第四阶段:性能监控与分析
最后更新于:
第四阶段:性能监控与分析
一、服务器性能监控
1.1 CPU监控
Linux命令
1# 查看CPU使用情况
2top
3
4# 查看CPU核心数
5nproc
6
7# 查看CPU详细信息
8cat /proc/cpuinfo
9
10# 查看CPU使用百分比
11mpstat
12
13# 查看进程CPU占用
14ps aux --sort=-%cpuCPU指标分析
| 指标 | 说明 | 预警阈值 |
|---|---|---|
| %usr | 用户态CPU使用率 | >70% |
| %sys | 系统态CPU使用率 | >30% |
| %idle | 空闲CPU百分比 | <20% |
| %iowait | IO等待CPU百分比 | >10% |
1.2 内存监控
Linux命令
1# 查看内存使用情况
2free -h
3
4# 查看内存详细信息
5cat /proc/meminfo
6
7# 查看进程内存占用
8ps aux --sort=-%mem
9
10# 查看内存泄漏
11vmstat 1内存指标分析
| 指标 | 说明 | 预警阈值 |
|---|---|---|
| used | 已使用内存 | >85% |
| cached | 缓存内存 | - |
| swap used | 交换分区使用 | >0 |
| OOM kills | 内存不足杀死进程 | >0 |
1.3 磁盘I/O监控
Linux命令
1# 查看磁盘使用情况
2df -h
3
4# 查看磁盘I/O
5iostat -x 1
6
7# 查看磁盘读写
8vmstat 1
9
10# 查看文件系统挂载
11mount磁盘I/O指标分析
| 指标 | 说明 | 预警阈值 |
|---|---|---|
| rMB/s | 读速度(MB/s) | - |
| wMB/s | 写速度(MB/s) | - |
| %util | 磁盘利用率 | >80% |
| await | 平均等待时间(ms) | >50ms |
| svctm | 平均服务时间(ms) | - |
1.4 网络监控
Linux命令
1# 查看网络接口
2ifconfig
3
4# 查看网络连接
5netstat -an
6
7# 查看网络流量
8sar -n DEV 1
9
10# 查看TCP连接状态
11ss -tlnp网络指标分析
| 指标 | 说明 | 预警阈值 |
|---|---|---|
| rxkB/s | 接收速度(KB/s) | - |
| txkB/s | 发送速度(KB/s) | - |
| TCP连接数 | 活跃TCP连接 | - |
| TIME_WAIT | 等待关闭的连接 | >1000 |
| ESTABLISHED | 已建立连接 | - |
二、应用性能监控(APM)
2.1 Prometheus + Grafana
Prometheus配置
1# prometheus.yml
2global:
3 scrape_interval: 15s
4
5scrape_configs:
6 - job_name: 'node_exporter'
7 static_configs:
8 - targets: ['localhost:9100']
9
10 - job_name: 'application'
11 static_configs:
12 - targets: ['localhost:8080']常用Exporter
| Exporter | 用途 | 端口 |
|---|---|---|
| node_exporter | 系统指标 | 9100 |
| mysql_exporter | MySQL指标 | 9104 |
| redis_exporter | Redis指标 | 9121 |
| blackbox_exporter | 网络探测 | 9115 |
Grafana仪表盘
1常用仪表盘:
21. Node Exporter Full - 系统资源监控
32. MySQL Overview - MySQL性能监控
43. Redis Dashboard - Redis性能监控
54. HTTP Request Rates - HTTP请求监控2.2 日志分析
ELK Stack
1Elasticsearch - 存储和索引日志
2Logstash - 收集和处理日志
3Kibana - 可视化日志常用查询
1# 查询错误日志
2level: ERROR
3
4# 查询特定服务日志
5service: api-gateway
6
7# 查询时间范围
8@timestamp > "2026-07-01T00:00:00" AND @timestamp < "2026-07-02T00:00:00"
9
10# 查询响应时间大于1秒
11response_time > 10002.3 分布式追踪
Jaeger
1分布式追踪系统,用于追踪请求在分布式系统中的流转OpenTelemetry
1开源的可观测性框架,支持分布式追踪、指标和日志三、数据库性能分析
3.1 MySQL性能分析
慢查询日志
1# 开启慢查询日志
2SET GLOBAL slow_query_log = 'ON';
3SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
4SET GLOBAL long_query_time = 1;
5
6# 查看慢查询日志
7mysqldumpslow /var/log/mysql/slow.log执行计划
1-- 查看执行计划
2EXPLAIN SELECT * FROM users WHERE status = 1 ORDER BY created_at DESC LIMIT 10;
3
4-- 查看执行计划详细信息
5EXPLAIN ANALYZE SELECT * FROM users WHERE status = 1;执行计划字段说明
| 字段 | 说明 |
|---|---|
| id | 查询序列号 |
| select_type | 查询类型 |
| table | 表名 |
| type | 访问类型 |
| possible_keys | 可能使用的索引 |
| key | 实际使用的索引 |
| key_len | 索引长度 |
| rows | 预估扫描行数 |
| Extra | 额外信息 |
3.2 Redis性能分析
1# 查看Redis状态
2redis-cli INFO
3
4# 查看内存使用
5redis-cli INFO memory
6
7# 查看慢查询
8redis-cli SLOWLOG GET 10
9
10# 查看命令统计
11redis-cli INFO commandstats四、性能瓶颈定位方法
4.1 瓶颈定位流程
11. 收集性能数据(响应时间、吞吐量、资源利用率)
22. 分析数据,找出异常指标
33. 定位瓶颈类型(CPU、内存、磁盘、网络、应用代码)
44. 深入分析,找出根本原因
55. 制定优化方案4.2 常见瓶颈类型
| 瓶颈类型 | 表现 | 排查方法 |
|---|---|---|
| CPU瓶颈 | CPU利用率高 | top, mpstat, perf |
| 内存瓶颈 | 内存不足,频繁GC | free, jmap, jstat |
| 磁盘I/O瓶颈 | 磁盘利用率高,响应慢 | iostat, df |
| 网络瓶颈 | 网络延迟高,带宽不足 | sar, ping, traceroute |
| 数据库瓶颈 | 查询慢,连接池满 | 慢查询日志, 执行计划 |
| 应用代码瓶颈 | 特定请求慢 | 性能分析工具, 日志 |
4.3 性能分析工具
Java应用
1# JVM监控
2jvisualvm
3
4# CPU分析
5jprofiler
6
7# 内存分析
8jmap -dump:format=b,file=heap.bin <pid>
9jhat heap.bin
10
11# GC分析
12jstat -gc <pid> 1000Python应用
1# CPU分析
2python -m cProfile -o profile.prof script.py
3snakeviz profile.prof
4
5# 内存分析
6python -m memory_profiler script.py
7
8# 行级分析
9line_profiler五、实战练习
5.1 练习1:系统监控
使用Prometheus + Grafana搭建系统监控:
- 安装node_exporter
- 配置Prometheus
- 配置Grafana仪表盘
- 模拟负载,观察监控数据
5.2 练习2:数据库分析
分析MySQL性能问题:
- 开启慢查询日志
- 使用EXPLAIN分析慢查询
- 优化查询语句
- 添加合适的索引
5.3 练习3:瓶颈定位
定位一个性能问题:
- 收集性能数据
- 分析数据,找出异常
- 定位瓶颈类型
- 提出优化方案
下一章:05-性能调优实战.md
📡
👤
作者:
阿海
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
阿海 Blog!
- 01JMeter界面详解 2026-07-11
- 02性能测试学习路线 2026-07-11
- 03JMeter线程组配置详解 2026-07-11