头像
淇迹时刻
-- : -- : --
切换主题色
-- : -- : --

第四阶段:性能监控与分析

最后更新于:

第四阶段:性能监控与分析

一、服务器性能监控

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=-%cpu

CPU指标分析

指标说明预警阈值
%usr用户态CPU使用率>70%
%sys系统态CPU使用率>30%
%idle空闲CPU百分比<20%
%iowaitIO等待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_exporterMySQL指标9104
redis_exporterRedis指标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 > 1000

2.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
内存瓶颈内存不足,频繁GCfree, 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> 1000

Python应用

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搭建系统监控:

  1. 安装node_exporter
  2. 配置Prometheus
  3. 配置Grafana仪表盘
  4. 模拟负载,观察监控数据

5.2 练习2:数据库分析

分析MySQL性能问题:

  1. 开启慢查询日志
  2. 使用EXPLAIN分析慢查询
  3. 优化查询语句
  4. 添加合适的索引

5.3 练习3:瓶颈定位

定位一个性能问题:

  1. 收集性能数据
  2. 分析数据,找出异常
  3. 定位瓶颈类型
  4. 提出优化方案

下一章05-性能调优实战.md

最新文章