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

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



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

• 优化程序内存分配:使用 jemalloctcmalloc 替代默认内存分配器。

# 编译时链接 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:启用 noatimenodiratime 减少元数据访问。
bash sudo mount -o remount,noatime,nodiratime /dev/sda1 /
• XFS:针对大文件场景优化。
• 数据分片与缓存:使用 RedisMemcached 缓存高频访问数据。
• 异步 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

八、自动化监控工具

  1. Prometheus + Grafana:实时监控 CPU、内存、磁盘等指标。
  2. Datadog:集成日志分析和报警功能。
  3. Bash 脚本:自定义监控任务(如 check_disk_space.sh)。

九、实战案例:Web 服务器性能瓶颈排查

  1. 症状:HTTP 请求延迟高,CPU 使用率低。
  2. 排查步骤:
    top 发现内存占用正常。
    iotop 发现磁盘 I/O 等待时间长。
    fsstat 确认是 /var/www/html 目录读写频繁。
    • 优化策略:将静态资源迁移到 CDN,并启用 opcache 缓存 PHP 文件。

十、注意事项

• 备份配置:修改 /etc/sysctl.conf 或服务配置前备份。
• 逐步测试:每次调整后观察效果,避免一次性改动过多参数。
• 硬件限制:当 CPU 占用 < 50% 且内存剩余 > 50% 时,可能是磁盘或网络瓶颈。


通过以上方法,可系统性地定位和解决 Linux 性能问题。 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独隅

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值