性能监控与优化

最后更新: 2026-01-17 作者: Linux Team
页面目录
目录

性能监控概述

Linux性能优化需要从CPU、内存、磁盘I/O、网络等多个维度进行分析和调优。

┌─────────────────────────────────────────────────────────────┐
│                    性能监控维度                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   CPU ── 利用率、负载、上下文切换                           │
│   Memory ── 物理内存、Swap、缓存                            │
│   Disk ── I/O读写、吞吐量、IOPS                             │
│   Network ── 带宽、延迟、连接数                              │
│   Process ── CPU/内存占用、线程数                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

CPU监控

CPU信息查看

# 查看CPU详细信息
lscpu

# /proc/cpuinfo
cat /proc/cpuinfo

# CPU型号
grep "model name" /proc/cpuinfo | head -1

# CPU核心数
nproc                          # 逻辑核心
lscpu | grep "^CPU(s):"        # 同上

CPU使用率

# top命令
top
top -b -n 5                    # 批处理模式,5次采样
top -Hp <pid>                  # 线程视图

# 按CPU排序
top -o %CPU

# htop(推荐)
htop
htop -d 10                     # 10秒刷新
htop -s PERCENT_CPU           # 按CPU排序

# mpstat(需安装sysstat)
mpstat                         # 每CPU统计
mpstat -P ALL 1 5             # 每1秒,共5次

# pidstat
pidstat -p <pid> 1            # 进程统计
pidstat -r <pid> 1            # 内存统计
pidstat -d <pid> 1            # I/O统计

系统负载

# uptime
uptime

# 负载解读
# 负载: 0.46 0.30 0.25
#      1分钟  5分钟 15分钟

# 平均负载 = CPU等待队列长度
# 理想值: < CPU核心数
# 如果4核CPU负载为8,说明有8个进程等待CPU

# 查看核心数
nproc

# 实时监控负载
watch -n 1 uptime

进程CPU分析

# 高CPU进程
ps aux --sort=-%cpu | head -20

# 线程CPU
ps -eLo pid,lwp,nlwp,pcpu,comm | sort -k3 -rn | head -20

# CPU使用时间
ps -eo pid,comm,time --sort=-time | head -20

# 查找高CPU进程
top -bn1 | grep "^%Cpu" && top -bn1 | awk 'NR>7 {print $0}' | sort -k9 -rn | head -10

内存监控

内存信息

# 内存使用概况
free
free -h                        # 人类可读
free -m                        # 以MB为单位
free -g                        # 以GB为单位

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

# MemAvailable vs MemFree
# MemFree: 完全空闲
# MemAvailable: 实际可用(含可回收缓存)

内存分析

# 按内存排序进程
ps aux --sort=-%mem | head -20

# smem(需安装)
sudo apt install smem
smem
smem --sort=mem --reverse

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

# vmstat
vmstat 1 5                     # 每秒1次,共5次
vmstat -d                      # 磁盘I/O
vmstat -m                      # 内存分配统计

Swap监控

# 查看Swap
swapon -s
cat /proc/swaps

# Swap使用
free -h | grep Swap

# 监控Swap
watch -n 1 free -h

# swappiness调整
# 范围 0-100,值越高越积极使用Swap
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

缓存与缓冲

# 查看内存分配
cat /proc/meminfo | grep -E "Cached|Buffers|Dirty|Writeback"

# 清理缓存(谨慎)
sudo sync
sudo echo 3 | sudo tee /proc/sys/vm/drop_caches

# dirty参数
# dirty_ratio: 触发强制回写的脏页百分比
# dirty_background_ratio: 后台回写阈值
cat /proc/sys/vm/dirty_ratio
cat /proc/sys/vm/dirty_background_ratio

磁盘I/O监控

磁盘信息

# 查看磁盘分区
lsblk
fdisk -l
blkid

# 磁盘空间
df -h
df -hT                         # 显示文件系统类型

# inode使用
df -i

I/O统计

# iostat
iostat                         # 基本统计
iostat -x                      # 扩展统计
iostat -d 1 5                  # 每秒1次,共5次
iostat -dxk                    # KB为单位

# 关键指标
# %util: 设备利用率,>80%表示I/O瓶颈
# r/s, w/s: 每秒读写次数
# rkB/s, wkB/s: 每秒读写KB
# avgrq-sz: 平均请求大小
# avgqu-sz: 平均队列长度
# await: 平均I/O等待时间
# svctm: 平均服务时间

# iotop
sudo iotop                     # 实时I/O
sudo iotop -o                  # 只显示活动进程
sudo iotop -b -n 3             # 批处理模式

文件系统使用

# du命令
du -h                          # 当前目录
du -sh *                        # 各子项大小
du -sh /var/log                 # 指定目录
du -h --max-depth=1            # 限制深度
du -h | sort -rh               # 按大小排序

# 大文件查找
find / -type f -size +100M -exec ls -lh {} \;
find / -type f -exec du -h {} + | sort -rh | head -20

I/O调度

# 查看I/O调度器
cat /sys/block/sda/queue/scheduler

# 可用调度器
# cfq       - 完全公平队列(传统)
# deadline  - 期限调度(数据库优化)
# noop     - 无操作(SSD推荐)
# mq-deadline - 多队列期限

# 修改调度器
echo deadline | sudo tee /sys/block/sda/queue/scheduler

# 永久修改 - /etc/default/grub
GRUB_CMDLINE_LINUX="elevator=deadline"
sudo update-grub

网络监控

网络统计

# 网卡信息
ip addr show
ifconfig

# 网卡流量
ip -s link show eth0
ip -s -s link show eth0        # 更详细

# 实时流量
watch -n 1 ip -s link show eth0

# ss命令
ss -tulnp                      # 监听端口
ss -s                          # 汇总统计
ss -ti                         # TCP信息
ss -tan | awk '{print $4}' | grep -E ":(80|443)$" | sort | uniq -c

# netstat(已弃用)
netstat -i                      # 接口统计
netstat -s                      # 协议统计

带宽测试

# iperf3
# 服务端
iperf3 -s

# 客户端
iperf3 -c server_ip
iperf3 -c server_ip -t 30      # 30秒测试
iperf3 -c server_ip -P 4       # 4个并行连接

# speedtest-cli
sudo apt install speedtest-cli
speedtest-cli
speedtest-cli --simple         # 简单输出

网络延迟

# ping
ping -c 10 example.com

# 路由追踪
traceroute example.com
tracepath example.com

# mtr(实时追踪)
mtr example.com
mtr -r example.com             # 报告模式

性能分析工具

top命令详解

# top界面解读
top - 15:30:45 up 30 days,  3:22,  2 users,  load average: 0.52, 0.58, 0.59
Tasks: 245 total,   1 running, 244 sleeping,   0 stopped,   0 zombie
%Cpu(s): 15.3 us,  2.1 sy,  0.0 ni, 82.0 id,  0.3 wa,  0.0 hi,  0.3 si,  0.0 st
MiB Mem :  16384.0 total,   2345.6 free,   8200.0 used,   5838.4 buff/cache
MiB Swap:   2048.0 total,   1024.0 free,   1024.0 used,   5432.0 avail Mem

# 快捷键
P - 按CPU排序
M - 按内存排序
T - 按时间排序
k - 终止进程
r - 调整优先级
u - 过滤用户
1 - 显示所有CPU
c - 显示完整命令
x - 高亮排序列
b - 高亮当前行
z - 彩色/单色

vmstat

# vmstat输出
vmstat 1

# procs: 进程
# r: 运行中(等待CPU)
# b: 阻塞(等待I/O)

# memory: 内存
# swapd: Swap使用
# free: 空闲
# buff: 缓冲
# cache: 缓存

# swap: Swap I/O
# si: Swap换入
# so: Swap换出

# io: I/O
# bi: 块设备接收
# bo: 块设备发送

# system:
# in: 中断
# cs: 上下文切换

# cpu:
# us: 用户态
# sy: 系统态
# id: 空闲
# wa: I/O等待

sar

# 安装sysstat
sudo apt install sysstat

# 启用历史收集
sudo systemctl enable sysstat
sudo systemctl start sysstat

# CPU统计
sar -u 1 3                    # 每秒1次,3次
sar -P ALL 1 1                # 每CPU统计

# 内存统计
sar -r 1 3
sar -R 1 3                    # 内存页

# Swap统计
sar -S 1 3

# I/O统计
sar -b 1 3                    # 块设备
sar -d 1 3                    # 每设备

# 网络统计
sar -n DEV 1 3                # 网络设备
sar -n TCP,ETCP 1 3           # TCP连接
sar -n SOCK 1 3               # Socket

# 历史数据
sar -u -f /var/log/sa/sa10    # 查看指定日期

系统优化

内核参数调优

# /etc/sysctl.conf 优化配置

# 文件描述符
fs.file-max = 6553600
fs.nr_open = 6553600

# 内存
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.overcommit_memory = 1
vm.max_map_count = 262144

# 网络
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15

# 生效
sudo sysctl -p
sudo sysctl -a                 # 查看所有参数

进程优化

# 调整进程优先级
nice -n 10 command             # 降低优先级
renice -n 10 -p <pid>          # 调整运行中进程

# CPU亲和性
taskset -c 0,1 command         # 指定CPU核心
taskset -cp 0,1 <pid>          # 绑定进程

# 限制进程资源
ulimit -n 65535               # 文件描述符
ulimit -u 4096                # 用户进程数

应用优化示例

# Nginx优化
# /etc/nginx/nginx.conf
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 65535;
    multi_accept on;
    use epoll;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    client_max_body_size 100M;
}

# MySQL优化
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_buffer_pool_size = 12G
innodb_log_file_size = 2G
max_connections = 2000
table_open_cache = 4000
query_cache_type = 1
query_cache_size = 128M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

课后练习

实践任务
  1. 使用top、htop分析系统性能
  2. 使用iostat分析磁盘I/O瓶颈
  3. 使用sar收集系统历史数据
  4. 优化内核参数提升性能
  5. 分析并优化Nginx/MySQL配置

后续教程预告:日志管理、备份恢复、Docker容器、Kubernetes入门、故障排查、内核调优…