以下是 Linux 系统性能调优的全面指南,涵盖 CPU、内存、磁盘 I/O、网络、服务配置 等核心方向,附带具体命令和实战案例:
Linux 系统性能调优的全面指南
一、CPU 性能调优
1. 监控 CPU 使用
# 实时查看 CPU 占用(按 q 退出)
top
# 查看进程级 CPU 占用(按 q 退出)
htop
# 统计 CPU 使用分布(1 秒间隔,输出 5 次)
mpstat 1 5
2. 高 CPU 占用的常见原因
• 恶意进程:定位并终止非法进程。
# 找到 CPU 占用最高的进程
ps aux --sort=-%cpu | head -n 3
# 终止进程(PID 替换为实际值)
kill -9 PID
• CPU 频率限制:检查是否因 CPU 调频导致性能下降。
# 查看当前 CPU 频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
# 永久启用高性能模式(需 root 权限)
echo "performance" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
3. 优化建议
• 减少不必要的后台进程:检查 systemd
服务,禁用闲置服务。
systemctl list-unit-files --state=enabled | grep -v "^disable"
sudo systemctl disable <service-name>
• 使用更轻量的编译选项:重新编译程序时添加 -O2
或 -Os
优化标志。
• 多核并行处理:对 CPU 密集型任务使用 GNU Parallel
分发负载。
parallel --jobs 4 ./process_data.sh ::: file1.txt file2.txt file3.txt
二、内存性能调优
1. 监控内存使用
# 查看实时内存状态(按 q 退出)
free -h
# 查看进程内存占用(按 q 退出)
htop
# 统计内存使用趋势(1 秒间隔,输出 5 次)
vmstat 1 5
2. 高内存占用的常见原因
• 内存泄漏:排查持续增长的内存进程。
# 监控内存增长最快的进程
ps aux --sort=-rss | head -n 3
• 交换分区(Swap)频繁使用:物理内存不足导致磁盘 I/O 压力增大。
# 查看 Swap 使用率
free -h
3. 优化建议
• 增加物理内存:若长期 Swap 使用率高,优先升级硬件。
• 调整 Swap 分区大小:临时扩容 Swap(重启后失效):
# 增加 Swap 空间(例如新增 2GB)
sudo dd if=/dev/zero of=/swapfile bs=1G count=2
sudo mkswap /swapfile
sudo swapon /swapfile
• 优化程序内存分配:使用 jemalloc
或 tcmalloc
替代默认内存分配器。
# 编译时链接 jemalloc
./configure --with-jemalloc
make && sudo make install
三、磁盘 I/O 性能调优
1. 监控磁盘 I/O
# 查看实时磁盘 I/O(按 q 退出)
iotop
# 统计磁盘使用率(1 秒间隔,输出 5 次)
iostat -dx 1 5
# 查看文件系统详细信息
fsstat 1 5
2. 高 I/O 压力的常见原因
• 频繁的大文件读写:数据库、日志写入等场景。
• 磁盘碎片化:文件分散在多个区块,导致读取效率下降。
3. 优化建议
• 使用 SSD 替代 HDD:SSD 的随机读写性能远超 HDD。
• 调整文件系统参数:
• Ext4:启用 noatime
和 nodiratime
减少元数据访问。
bash sudo mount -o remount,noatime,nodiratime /dev/sda1 /
• XFS:针对大文件场景优化。
• 数据分片与缓存:使用 Redis
或 Memcached
缓存高频访问数据。
• 异步 I/O:在数据库配置中启用异步写入(如 MySQL 的 innodb_flush_log_at_trx_commit=2
)。
四、网络性能调优
1. 监控网络状态
# 查看实时网络流量(按 q 退出)
nload -m eth0
# 统计网络接口详细信息(1 秒间隔,输出 5 次)
iftop -i eth0
# 查看 TCP 连接状态
netstat -antp | grep ESTABLISHED
2. 高网络负载的常见原因
• 大量长连接:Web 服务器未及时关闭空闲连接。
• 网络带宽瓶颈:跨地域数据传输延迟高。
3. 优化建议
• 调整 TCP 参数:
# 修改 /etc/sysctl.conf
net.core.somaxconn = 65535 # 最大等待连接队列
net.ipv4.tcp_fin_timeout = 30 # 快速关闭空闲连接
sysctl -p # 生效配置
• 启用流量整形:使用 tc
工具限制带宽或优先级。
# 限制 eth0 接口带宽为 100Mbps
sudo tc qdisc add dev eth0 root tbf rate 100mbit latency 50ms burst 1540kb
• 升级网络硬件:使用多网卡绑定(bonding
)或 10Gbps 以上接口。
五、文件系统调优
1. 选择合适的文件系统
场景 | 推荐文件系统 |
---|---|
日志密集型 | XFS |
大文件读写 | Btrfs(带压缩) |
高并发小文件 | Ext4(带 dir_index ) |
2. 优化 NTFS/Samba 共享
# 在 /etc/samba/smb.conf 中添加
socket options = TCP_NODELAY IPTOS_LOWDELAY
min protocol = SMB2
max protocol = SMB3
六、服务配置调优
1. Web 服务器(Nginx/Apache)
• Nginx:调整工作进程和连接数。
worker_processes auto;
worker_connections 4096;
• Apache:启用 KeepAlive
减少连接开销。
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
2. 数据库(MySQL/MongoDB)
• MySQL:配置 InnoDB 缓冲池大小。
[mysqld]
innodb_buffer_pool_size = 70% of total RAM
• MongoDB:启用 WiredTiger 存储引擎并调整缓存。
storage:
engine: wiredTiger
wiredTiger:
cacheSizeGB: 16
七、内核参数调优
1. 关键参数示例(/etc/sysctl.conf)
# 增加文件描述符限制
fs.file-max = 65535
# 优化虚拟内存
vm.swappiness = 10 # 减少 Swap 使用倾向
vm.dirty_ratio = 20 # 延迟刷盘频率
vm.dirty_background_ratio = 5
# 加速网络响应
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syn_retries2 = 3
2. 加载配置
sudo sysctl -p
八、自动化监控工具
- Prometheus + Grafana:实时监控 CPU、内存、磁盘等指标。
- Datadog:集成日志分析和报警功能。
- Bash 脚本:自定义监控任务(如
check_disk_space.sh
)。
九、实战案例:Web 服务器性能瓶颈排查
- 症状:HTTP 请求延迟高,CPU 使用率低。
- 排查步骤:
•top
发现内存占用正常。
•iotop
发现磁盘 I/O 等待时间长。
•fsstat
确认是/var/www/html
目录读写频繁。
• 优化策略:将静态资源迁移到 CDN,并启用opcache
缓存 PHP 文件。
十、注意事项
• 备份配置:修改 /etc/sysctl.conf
或服务配置前备份。
• 逐步测试:每次调整后观察效果,避免一次性改动过多参数。
• 硬件限制:当 CPU 占用 < 50% 且内存剩余 > 50% 时,可能是磁盘或网络瓶颈。
通过以上方法,可系统性地定位和解决 Linux 性能问题。 🚀