← 返回图谱目录

调优指南 · v1.2 · 9 个模块

Linux 系统调优工具图

围绕业务目标建立基线、证明瓶颈,再调整应用、资源和内核参数。

下载 SVG 原图
1.0×
点击框内区域,展开模块说明拖动平移 · 滚轮 / 双指缩放

读图提示

看指标,也看现场。

命令中的 PID、SERVICE、IFACE 等占位符需替换为实际值。图中的分隔符用于列出独立检查项;复制按钮已按单条命令整理。结合业务影响、基线和时间窗口判断。

图谱署名:老男孩教育-李导996 · v1.2 · 2026-10-22

来源与参考

前两张图依据 Brendan Gregg 图谱改编,保留 CC BY-SA 4.0 许可及原作者来源。

下载原始 SVG,保留完整署名与说明 ↗
展开全部模块文字版

调优流程与优先级

建立基线 → 证明瓶颈 → 单变量变更 → 验证效果 → 固化与观察。

判断依据

  • 基线保持同业务负载、指标和时间窗;通过日志、指标、队列/限额证明瓶颈。
  • 单变量变更写明目标、范围与回退;验证 P95/P99、错误率、资源压力。
  • 优先级:减少无效工作 → 修复配置 / 代码 → 调整资源与容量 → 仅在有证据时修改内核或硬件参数。

注意事项

  • 配置入库;无改善则回退。
  • 说明:本图是调优决策与配置入口;“参数名=”仅标识可配置项,不能直接执行。不同内核、systemd 与发行版的支持需现场核对。
  • 各命令独立执行;SERVICE / PID / CT / POD / NS 须替换。变更前记录原值;修改后回读生效值并按同负载验证,不预设统一最优参数。

01 应用与服务配置

围绕应用延迟、错误率、连接池/线程池、GC 与慢查询取证。

命令

journalctl -u SERVICE --since "10 min ago"
nginx -t
systemctl cat SERVICE
nginx -t && systemctl reload nginx

判断依据

  • 应用原生配置 / 环境配置;并发、超时、连接复用
  • 复测业务成功率与 P95/P99,核查依赖压力。

注意事项

  • 配置纳入版本管理;先校验,再按服务机制重载。
  • nginx -t && systemctl reload nginx 为原图 Nginx 示例,校验后重载服务。

02 CPU 与并发预算

根据各核使用情况和目标 cgroup 节流情况,核查并发与 CPU 预算。

命令

mpstat -P ALL 1 5
pidstat -u -w -p PID 1 5
systemctl show SERVICE -p CPUWeight -p CPUQuotaPerSecUSec
systemctl edit SERVICE

判断依据

  • 目标 cgroup v2:cpu.stat / cpu.max
  • [Service]:CPUWeight= / CPUQuota=
  • CPUWeight 调整竞争份额;CPUQuota 约束 CPU 时间。
  • 同时优化并发与容量,观察节流和业务时延。

注意事项

  • systemctl edit SERVICE 是服务配置变更入口。
  • 服务 drop-in 入库;按变更流程加载配置并验证生效。

03 内存与服务边界

先修复泄漏、缓存或大查询,再设置资源预算。

命令

free -h
pidstat -r -p PID 1 5
systemctl show SERVICE -p MemoryHigh -p MemoryMax
systemctl edit SERVICE

判断依据

  • 目标 cgroup v2:memory.events / memory.max
  • [Service]:MemoryHigh= / MemoryMax=
  • MemoryHigh 用于回收 / 节流;MemoryMax 是硬上限。

注意事项

  • systemctl edit SERVICE 是服务配置变更入口。
  • 不盲目禁用 swap、清缓存;核查 OOM 与业务时延。

04 文件句柄与连接资源

先判断句柄泄漏、池耗尽还是合理容量不足。

命令

cat /proc/PID/limits
lsof -p PID
ss -s
ss -lntp
systemctl show SERVICE -p LimitNOFILE
systemctl edit SERVICE

判断依据

  • [Service]:LimitNOFILE=;应用连接上限同步核查。
  • 服务限制以实际进程为准;shell 的 ulimit 不代替服务配置。

注意事项

  • systemctl edit SERVICE 是服务配置变更入口。
  • 提高限制前确认应用兼容性,并核算下游连接预算。

05 存储、日志与 I/O

优先优化查询、批量 I/O、日志轮转、云盘 IOPS 与吞吐。

命令

iostat -xz -y 1 5
pidstat -d -p PID 1 5
df -hT
df -i
lsof +L1
logrotate -d /etc/logrotate.conf

判断依据

  • 服务争用场景:[Service] 的 IOWeight=(需环境支持)。
  • IOWeight 是竞争权重,效果受内核、块设备与调度器影响。
  • 验证 await、队列与业务时延;空间清理后确认释放。

注意事项

  • 持久化应用、轮转与存储配置;轮转先做调试检查。

06 网络队列与内核参数

先核查应用监听/backlog、重传、丢包与链路容量。

命令

ss -lntp
ss -tin
ip -s link
ip route get 10.0.0.20
ethtool -S IFACE
sysctl -n net.core.somaxconn
sysctl -p /etc/sysctl.d/90-app.conf

判断依据

  • 配置写入 /etc/sysctl.d/90-app.conf。
  • 回读参数并复测;避免套用整包“万能优化”配置。

注意事项

  • 仅有证据时修改对应参数,保留原值与回退步骤。
  • sysctl -p /etc/sysctl.d/90-app.conf 会应用该文件中的配置。

容器与 K8s 资源治理

调工作负载配置,核对目标 cgroup,发布后验证实际限额。

命令

kubectl describe pod POD -n NS
kubectl top pod -n NS
docker inspect CT
kubectl diff -f manifest.yaml

判断依据

  • 在工作负载配置中调整 resources.requests / resources.limits;Docker / Compose 在部署配置中固化资源限制。
  • kubectl diff -f manifest.yaml → 经团队发布流程变更 → 核查新 Pod 状态、重启、节流、OOM 与服务指标。
  • CPU 限额可能造成节流;内存上限触发容器 OOM;requests 影响调度与资源分配。数值来自实测容量规划。

注意事项

  • 主机 systemd 的配置不代替 K8s 工作负载配置;按实际资源控制层管理,避免互相覆盖。

按需专项调优

离开通用主线,不等于工具失效;按环境和专项需求选择。

命令

tuned-adm active
tuned-adm recommend

判断依据

  • RHEL 系环境的 TuneD:先检查配置档案。
  • 延迟 / 绑核 / NUMA / 流控专项:taskset / numactl / ionice / tc;按拓扑、调度器与网络方案选择。
  • MegaCli / hdparm / chcpu / tune2fs 等工具由硬件型号、文件系统与专项需求决定。

注意事项

  • TuneD 切换前做负载验证。