第9课:系统监控与性能调优

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

推广

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

系统监控与性能调优

系统性能监控基础

1. 性能指标概述

主要性能指标

# CPU性能指标
- CPU使用率 (%CPU)
- 负载平均值 (Load Average)
- 上下文切换 (Context Switches)
- 中断次数 (Interrupts)

# 内存性能指标
- 内存使用率 (%MEM)
- 可用内存 (Available Memory)
- 缓存和缓冲区 (Cache/Buffer)
- 交换空间使用 (Swap Usage)

# 磁盘I/O指标
- 读写速度 (Read/Write Speed)
- IOPS (Input/Output Operations Per Second)
- I/O等待时间 (I/O Wait)
- 磁盘使用率 (Disk Utilization)

# 网络性能指标
- 网络吞吐量 (Network Throughput)
- 数据包丢失率 (Packet Loss)
- 网络延迟 (Network Latency)
- 连接数 (Connection Count)

2. 系统负载理解

负载平均值解释

# 查看系统负载
uptime
# 输出示例: 15:30:01 up 10 days, 5:42, 2 users, load average: 0.15, 0.25, 0.30

# 负载平均值含义
# 第一个数字: 1分钟平均负载
# 第二个数字: 5分钟平均负载  
# 第三个数字: 15分钟平均负载

# 负载评估标准
# 单核CPU: 负载1.0表示100%利用率
# 双核CPU: 负载2.0表示100%利用率
# 四核CPU: 负载4.0表示100%利用率

# 查看CPU核心数
nproc
cat /proc/cpuinfo | grep processor | wc -l

系统监控工具

1. 基础监控命令

top - 实时进程监控

top                             # 基本top命令
top -u username                 # 显示特定用户进程
top -p PID                      # 监控特定进程

# top交互命令
P                              # 按CPU使用率排序
M                              # 按内存使用率排序
T                              # 按运行时间排序
k                              # 杀死进程
r                              # 重新设置进程优先级
1                              # 显示所有CPU核心
q                              # 退出

# top输出解释
# PID: 进程ID
# USER: 进程所有者
# PR: 优先级
# NI: Nice值
# VIRT: 虚拟内存
# RES: 物理内存
# SHR: 共享内存
# S: 进程状态
# %CPU: CPU使用率
# %MEM: 内存使用率
# TIME+: CPU时间
# COMMAND: 命令名

htop - 增强版top

# 安装htop
sudo apt install htop          # Ubuntu/Debian
sudo yum install htop          # CentOS/RHEL

htop                           # 启动htop

# htop特性
# - 彩色显示
# - 鼠标支持
# - 树形进程显示
# - 可视化CPU/内存使用
# - 更友好的界面

ps - 进程快照

ps aux                         # 显示所有进程
ps aux --sort=-%cpu            # 按CPU使用率排序
ps aux --sort=-%mem            # 按内存使用率排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem  # 自定义输出

# 查看进程树
ps auxf                        # 显示进程树
pstree                         # 树形显示进程
pstree -p                      # 显示PID

2. 内存监控

free - 内存使用情况

free                           # 显示内存使用
free -h                        # 人性化显示
free -m                        # 以MB为单位
free -s 5                      # 每5秒刷新一次

# 输出解释
#               total        used        free      shared  buff/cache   available
# Mem:           7.7G        2.1G        3.2G        180M        2.4G        5.2G
# Swap:          2.0G          0B        2.0G

# total: 总内存
# used: 已使用内存
# free: 空闲内存
# shared: 共享内存
# buff/cache: 缓冲区和缓存
# available: 可用内存 (包括可释放的缓存)

vmstat - 虚拟内存统计

vmstat                         # 显示虚拟内存统计
vmstat 5                       # 每5秒显示一次
vmstat 5 10                    # 每5秒显示一次,共10次

# 输出字段解释
# procs: r(运行队列), b(阻塞进程)
# memory: swpd(虚拟内存), free(空闲内存), buff(缓冲区), cache(缓存)
# swap: si(换入), so(换出)
# io: bi(块读入), bo(块写出)
# system: in(中断), cs(上下文切换)
# cpu: us(用户时间), sy(系统时间), id(空闲时间), wa(等待时间), st(被偷时间)

3. 磁盘I/O监控

iostat - I/O统计

# 安装sysstat包
sudo apt install sysstat       # Ubuntu/Debian
sudo yum install sysstat       # CentOS/RHEL

iostat                         # 显示I/O统计
iostat -x                      # 扩展统计
iostat -x 5                    # 每5秒显示一次
iostat -x 5 10                 # 每5秒显示一次,共10次

# 重要指标
# %util: 设备利用率
# await: 平均等待时间
# svctm: 平均服务时间
# r/s, w/s: 每秒读写次数
# rkB/s, wkB/s: 每秒读写KB数

iotop - 实时I/O监控

# 安装iotop
sudo apt install iotop        # Ubuntu/Debian
sudo yum install iotop        # CentOS/RHEL

sudo iotop                     # 启动iotop
sudo iotop -o                  # 只显示有I/O活动的进程
sudo iotop -a                  # 显示累积I/O

4. 网络监控

netstat - 网络连接统计

netstat -tuln                  # 显示监听端口
netstat -tupln                 # 显示进程信息
netstat -i                     # 显示网络接口统计
netstat -s                     # 显示网络统计

# 连接状态统计
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

ss - 现代网络统计工具

ss -tuln                       # 显示监听端口
ss -tupln                      # 显示进程信息
ss -s                          # 显示统计摘要
ss -i                          # 显示内部TCP信息

iftop - 实时网络流量监控

# 安装iftop
sudo apt install iftop        # Ubuntu/Debian
sudo yum install iftop        # CentOS/RHEL

sudo iftop                     # 监控默认接口
sudo iftop -i eth0             # 监控特定接口
sudo iftop -n                  # 不解析主机名

高级监控工具

1. sar - 系统活动报告

sar基本使用

# CPU使用率
sar -u 5 10                    # 每5秒显示CPU使用率,共10次
sar -u                         # 显示今天的CPU使用率

# 内存使用率
sar -r 5 10                    # 内存使用统计
sar -S 5 10                    # 交换空间统计

# I/O统计
sar -b 5 10                    # 块设备I/O统计
sar -d 5 10                    # 磁盘I/O统计

# 网络统计
sar -n DEV 5 10                # 网络设备统计
sar -n TCP 5 10                # TCP统计

# 查看历史数据
sar -u -f /var/log/sysstat/saXX  # 查看特定日期的数据

2. dstat - 多功能系统监控

dstat使用

# 安装dstat
sudo apt install dstat        # Ubuntu/Debian
sudo yum install dstat        # CentOS/RHEL

dstat                          # 基本监控
dstat -cdngy                   # CPU、磁盘、网络、内存、系统
dstat -c -m -d -n 5            # 每5秒显示CPU、内存、磁盘、网络
dstat --top-cpu --top-mem      # 显示CPU和内存使用最高的进程

3. nmon - 性能监控工具

nmon使用

# 安装nmon
sudo apt install nmon         # Ubuntu/Debian
sudo yum install nmon         # CentOS/RHEL

nmon                          # 启动nmon

# nmon交互命令
c                             # CPU使用率
m                             # 内存使用率
d                             # 磁盘I/O
n                             # 网络统计
t                             # 进程信息
q                             # 退出

性能分析和调优

1. CPU性能分析

CPU使用率分析

# 查看CPU详细信息
cat /proc/cpuinfo
lscpu

# 实时CPU监控
top -1                         # 显示每个CPU核心
mpstat 5                       # 每5秒显示CPU统计
mpstat -P ALL 5                # 显示所有CPU核心统计

# CPU密集型进程识别
ps aux --sort=-%cpu | head -10
top -o %CPU

CPU调优技巧

# 进程优先级调整
nice -n 10 command             # 以低优先级启动命令
renice 10 PID                  # 调整运行中进程优先级

# CPU亲和性设置
taskset -c 0,1 command         # 绑定进程到CPU 0和1
taskset -p 0x3 PID             # 设置进程CPU亲和性

# 查看进程CPU亲和性
taskset -p PID

2. 内存性能分析

内存使用分析

# 详细内存信息
cat /proc/meminfo

# 进程内存使用
ps aux --sort=-%mem | head -10
pmap PID                       # 查看进程内存映射
cat /proc/PID/status           # 进程内存状态
cat /proc/PID/smaps            # 详细内存映射

# 内存泄漏检测
valgrind --tool=memcheck --leak-check=full ./program

内存调优

# 调整交换空间使用
echo 10 | sudo tee /proc/sys/vm/swappiness  # 减少swap使用

# 清理缓存
echo 1 | sudo tee /proc/sys/vm/drop_caches  # 清理页缓存
echo 2 | sudo tee /proc/sys/vm/drop_caches  # 清理目录项和inode缓存
echo 3 | sudo tee /proc/sys/vm/drop_caches  # 清理所有缓存

# 内存压缩
echo 1 | sudo tee /sys/block/zram0/reset    # 重置zram设备

3. 磁盘I/O性能分析

I/O性能测试

# 磁盘读写性能测试
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct  # 写测试
dd if=testfile of=/dev/null bs=1G count=1 iflag=direct  # 读测试

# 随机I/O测试
fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=4k --size=4g --numjobs=1 --iodepth=1 --runtime=60 --time_based --end_fsync=1

# 磁盘延迟测试
ioping -c 10 /tmp/              # 测试目录延迟

I/O调优

# 调整I/O调度器
echo deadline | sudo tee /sys/block/sda/queue/scheduler
echo noop | sudo tee /sys/block/sda/queue/scheduler

# 调整读取预读
echo 4096 | sudo tee /sys/block/sda/queue/read_ahead_kb

# 文件系统挂载优化
mount -o noatime,nodiratime /dev/sda1 /mnt  # 禁用访问时间更新

4. 网络性能分析

网络性能测试

# 带宽测试
iperf3 -s                      # 服务器模式
iperf3 -c server_ip            # 客户端模式

# 网络延迟测试
ping -c 100 google.com
mtr google.com                 # 路由跟踪

# 网络吞吐量测试
wget -O /dev/null http://speedtest.example.com/file.zip
curl -o /dev/null http://speedtest.example.com/file.zip

网络调优

# TCP参数调优
echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_rmem = 4096 87380 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_wmem = 4096 65536 16777216' >> /etc/sysctl.conf

# 应用设置
sysctl -p

系统调优实践

1. 内核参数调优

常用内核参数

# 创建调优配置文件
sudo tee /etc/sysctl.d/99-performance.conf << EOF
# 网络优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_congestion_control = bbr

# 文件系统优化
fs.file-max = 2097152
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# 进程优化
kernel.pid_max = 4194304
EOF

# 应用配置
sudo sysctl -p /etc/sysctl.d/99-performance.conf

2. 服务优化

系统服务优化

# 禁用不必要的服务
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon

# 查看启动时间
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain

3. 监控脚本

性能监控脚本

#!/bin/bash
# 系统性能监控脚本

LOG_FILE="/var/log/performance.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

# CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)

# 内存使用率
MEM_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}')

# 磁盘使用率
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)

# 系统负载
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | cut -d',' -f1)

# 记录到日志
echo "[$DATE] CPU: ${CPU_USAGE}%, MEM: ${MEM_USAGE}%, DISK: ${DISK_USAGE}%, LOAD: $LOAD_AVG" >> $LOG_FILE

# 告警检查
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
    echo "[$DATE] WARNING: High CPU usage: ${CPU_USAGE}%" >> $LOG_FILE
fi

if (( $(echo "$MEM_USAGE > 85" | bc -l) )); then
    echo "[$DATE] WARNING: High memory usage: ${MEM_USAGE}%" >> $LOG_FILE
fi

if [ "$DISK_USAGE" -gt 90 ]; then
    echo "[$DATE] WARNING: High disk usage: ${DISK_USAGE}%" >> $LOG_FILE
fi

性能基准测试

1. CPU基准测试

sysbench CPU测试

# 安装sysbench
sudo apt install sysbench     # Ubuntu/Debian
sudo yum install sysbench     # CentOS/RHEL

# CPU测试
sysbench cpu --cpu-max-prime=20000 run
sysbench cpu --threads=4 --cpu-max-prime=20000 run

2. 内存基准测试

内存带宽测试

# sysbench内存测试
sysbench memory --memory-total-size=10G run

# 使用mbw测试内存带宽
sudo apt install mbw
mbw 1024                      # 测试1GB内存带宽

3. 磁盘基准测试

磁盘性能测试

# sysbench磁盘测试
sysbench fileio --file-total-size=10G prepare
sysbench fileio --file-total-size=10G --file-test-mode=rndrw run
sysbench fileio --file-total-size=10G cleanup

# hdparm测试
sudo hdparm -tT /dev/sda      # 测试磁盘读取速度

总结

系统监控与性能调优要点:

  1. 监控工具:熟练使用top、htop、iostat、sar等监控工具
  2. 性能指标:理解CPU、内存、磁盘、网络性能指标
  3. 瓶颈识别:快速识别系统性能瓶颈
  4. 调优技巧:掌握内核参数、进程优先级等调优方法
  5. 基准测试:建立性能基准,量化优化效果
  6. 监控自动化:编写监控脚本,实现自动化监控

下一课预告

在下一课中,我们将学习Shell脚本编程,包括:

  • Shell脚本基础语法
  • 变量和函数使用
  • 条件判断和循环
  • 实用脚本编写

💡 小贴士:系统性能监控是运维工作的重要组成部分。建议建立定期监控机制,及时发现和解决性能问题,保证系统稳定运行。

Vue3 + TypeScript 企业级项目实战

课程推荐

Vue3 + TypeScript 企业级项目实战
Python 全栈开发工程师培训

热门课程

Python 全栈开发工程师培训

📚 文章对你有帮助?请关注我的公众号,万分感谢!

获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号

关注公众号

第一时间获取最新技术文章

添加微信

添加微信

技术交流 · 问题答疑 · 学习指导

评论讨论

欢迎留下你的想法和建议