Linux 系统性能调优的全面指南

Linux 系统性能调优的全面指南

以下是 Linux 系统性能调优的全面指南,涵盖 CPU、内存、磁盘 I/O、网络、服务配置 等核心方向,附带具体命令和实战案例:

Linux 系统性能调优的全面指南

一、CPU 性能调优1. 监控 CPU 使用2. 高 CPU 占用的常见原因3. 优化建议

二、内存性能调优1. 监控内存使用2. 高内存占用的常见原因3. 优化建议

三、磁盘 I/O 性能调优1. 监控磁盘 I/O2. 高 I/O 压力的常见原因3. 优化建议

四、网络性能调优1. 监控网络状态2. 高网络负载的常见原因3. 优化建议

五、文件系统调优1. 选择合适的文件系统2. 优化 NTFS/Samba 共享

六、服务配置调优1. Web 服务器(Nginx/Apache)2. 数据库(MySQL/MongoDB)

七、内核参数调优1. 关键参数示例(/etc/sysctl.conf)2. 加载配置

八、自动化监控工具九、实战案例:Web 服务器性能瓶颈排查十、注意事项

一、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

• 使用更轻量的编译选项:重新编译程序时添加 -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 性能问题。 🚀

🔍 相关推荐