性能监控与优化
最后更新: 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
课后练习
实践任务
- 使用top、htop分析系统性能
- 使用iostat分析磁盘I/O瓶颈
- 使用sar收集系统历史数据
- 优化内核参数提升性能
- 分析并优化Nginx/MySQL配置
后续教程预告:日志管理、备份恢复、Docker容器、Kubernetes入门、故障排查、内核调优…