Linux 系统性能调优实战有哪些优化指令及原理?
2026/5/13 0:16:44 网站建设 项目流程

Linux 性能调优的核心是先定位瓶颈再针对性调整,常用指令包括 top/vmstat/iostat 用于监控,sysctl/nice/taskset 用于调优,适用于服务器响应慢、资源占用高等场景。

先说结论:性能调优不是盲目改参数,必须先用监控工具找到瓶颈所在,再选择对应的优化指令,调完后要验证效果并保留回滚方案。

  • 先定位:用 top、vmstat、iostat 确认是 CPU、内存还是 I/O 瓶颈
  • 先备份:修改配置前务必备份原文件,推荐使用 /etc/sysctl.d/ 管理自定义配置
  • 再验证:用相同监控工具对比调优前后指标变化,确认无副作用

常用监控与调优指令

下面是常用性能调优指令,可直接在终端执行,注意生产环境需谨慎:

监控类:

top # 实时查看 CPU、内存、进程占用 htop # 增强版监控,支持彩色和鼠标操作 vmstat 1 10 # 每秒输出一次系统状态,共 10 次 iostat -xz 1 # 查看磁盘 I/O 详细统计 sar -u 1 10 # CPU 使用率历史统计 sar -r 1 10 # 内存使用历史统计

CPU 调优:

nice -n 10 ./script.sh # 启动低优先级进程 renice -n 15 -p PID # 修改运行中进程优先级 taskset -c 0,1 ./program # 绑定进程到 CPU0 和 CPU1 # 启用高性能模式(注意:会增加功耗,笔记本慎用) echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

内存调优:

sysctl -w vm.swappiness=10 # 降低 Swap 使用倾向(默认通常为 60) # 警告:vm.overcommit_memory=1 风险极高,可能导致 OOM,生产环境不建议随意开启 # 释放缓存(注意:会导致瞬间 I/O 升高,生产环境严禁频繁使用) sync && echo 3 | sudo tee /proc/sys/vm/drop_caches # 禁用透明大页(某些数据库如 Oracle/Redis 建议禁用) echo never > /sys/kernel/mm/transparent_hugepage/enabled

磁盘 I/O 调优:

cat /sys/block/sda/queue/scheduler # 查看当前 I/O 调度器 # 注意:NVMe 磁盘通常使用 none 或 mq-deadline,修改可能无效 echo deadline > /sys/block/sda/queue/scheduler # 临时修改为 deadline 调度器 sudo mount -o remount,noatime,nodiratime /dev/sda1 / # 优化挂载参数

网络调优:

sysctl -w net.core.somaxconn=4096 # 提高连接队列长度 sysctl -w net.ipv4.tcp_fin_timeout=30 # 缩短 TIME_WAIT 超时 sysctl -w net.ipv4.tcp_tw_reuse=1 # 允许重用 TIME_WAIT 连接 sysctl -p # 应用/etc/sysctl.conf 配置

配置持久化与备份实操

临时调整重启后会失效,需要写入配置文件。直接追加 /etc/sysctl.conf 可能导致参数重复冲突,推荐使用 /etc/sysctl.d/ 目录管理。

第一步:备份原配置

# 备份 sysctl.conf cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%F) # 备份现有所有参数以便回滚 sysctl -a > sysctl_backup_$(date +%F).txt

第二步:创建自定义配置文件

# 创建自定义配置文件(推荐方式) sudo vim /etc/sysctl.d/99-custom.conf # 填入以下内容 vm.swappiness = 10 net.core.somaxconn = 4096 net.ipv4.tcp_fin_timeout = 30

第三步:应用配置

# 应用指定配置文件 sysctl -p /etc/sysctl.d/99-custom.conf # 或者应用所有配置 sysctl -p

回滚方法:如果调优后出现问题,删除 99-custom.conf 并恢复备份:

sudo rm /etc/sysctl.d/99-custom.conf sudo cp /etc/sysctl.conf.bak.YYYY-MM-DD /etc/sysctl.conf sysctl -p

验证是否生效

调优后需要用相同工具对比前后变化,确保指标改善且无副作用:

CPU 调优验证:

mpstat 1 10 # 查看各 CPU 核心使用情况 top -H -p PID # 查看进程内线程占用

检查点:关键进程的 CPU 占用是否降低?系统负载(load average)是否下降?

内存调优验证:

vmstat 1 10 # 观察 si/so 列是否减少 free -h # 观察 available 变化趋势

检查点:Swap 使用量是否稳定或下降?si/so 交换频率是否降低?

I/O 调优验证:

iostat -xz 1 10 # 观察%util 和 await 变化 iotop # 查看具体进程的 I/O 占用

检查点:磁盘利用率是否下降?平均等待时间(await)是否缩短?

网络调优验证:

ss -s # 统计套接字信息 netstat -ant | grep ESTABLISHED | wc -l # 查看 TCP 连接数

检查点:连接队列是否不再溢出?TIME_WAIT 连接数是否减少?

生产环境常见风险

盲目改 overcommit_memory:vm.overcommit_memory=1 允许内存超分配,虽然能提高内存利用率,但一旦物理内存耗尽,OOM Killer 可能会随机杀死关键进程(如数据库)。除非是无状态计算节点,否则不建议开启。

配置重复冲突:多次执行 echo ... >> /etc/sysctl.conf 会导致同一参数存在多行,可能引发不可预知的行为。建议使用 /etc/sysctl.d/ 独立文件管理。

频繁释放缓存:drop_caches 会强制清除页面缓存,导致后续读取请求直接访问磁盘,瞬间 I/O 飙升,严重影响性能。仅建议在测试环境或特定排查场景使用。

忽视硬件差异:现代 NVMe 固态硬盘的 I/O 调度器通常由硬件自行管理,手动修改 scheduler 可能无效甚至降低性能。修改前请先确认磁盘类型。

不保留回滚方案:修改内核参数前没有记录原始值,调优后出现问题无法快速恢复。建议修改前执行 sysctl -a > sysctl_backup.txt 备份。

忽视应用层优化:系统调优只能缓解症状,如果应用本身有性能问题(如低效算法、内存泄漏),需要先优化应用代码。

来源 https://www.zjcp.cc/ask/10920.html

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询