首页/系统/Linux 内核与性能调优速查

Linux 内核与性能调优速查

sysctl 内核参数、CPU 与内存管理、磁盘 IO、网络栈调优、性能分析工具与瓶颈定位:Linux 系统调优速查。

共 357 条更新于 2026-10-12所属领域:系统
共 357 条

sysctl 内核参数

网络、内存与句柄等常用参数调优

net.ipv4.tcp_congestion_control 拥塞控制热门

选择本机新连接使用的拥塞控制算法(默认 cubic);高延迟带一定丢包的长肥管道常改用 bbr 提升吞吐稳定性。

net.core.somaxconn 全连接队列上限热门

限制 listen 套接字 accept 队列的长度上限,实际生效值为 min(应用 backlog, somaxconn);高并发短连接服务的常见瓶颈点。

sysctl 查看与修改内核参数热门

读写运行时内核参数的入口命令:sysctl 直接对应 /proc/sys 下的文件,-w 修改立即生效但不持久,正式变更应落盘到配置文件。

vm.swappiness 换页倾向热门

控制内核把匿名页换出到 swap 的倾向(0-100,默认 60);数据库与延迟敏感服务常降低它减少换出抖动。

net.ipv4.tcp_tw_reuse TIME_WAIT 复用热门

允许把处于 TIME_WAIT 的套接字在协议安全前提下复用于新的出站连接(依赖时间戳);只对客户端方向的连接有效。

TCP Keepalive 三参数速查

空闲连接保活探测:默认约 2 小时才发首个探测包,对穿越 NAT/防火墙的长连接通常过慢,需要按链路回收时间调小。

net.ipv4.ip_local_port_range 本地端口范围

本机主动连接可用的本地端口区间,默认 32768-60999(约 2.8 万个);高并发出站(代理、网关、压测客户端)会先耗尽端口。

sysctl.d 配置持久化

把内核参数固化到 /etc/sysctl.d/*.conf,按文件名字典序合并加载;sysctl --system 重载全部配置,适合与发行版默认值分层管理。

net.ipv4.tcp_rmem 接收缓冲自动调优

三个值分别是最小/默认/上限的接收缓冲(默认 4096 131072 6291456);内核按链路 BDP 自动调节,上限决定单连接吞吐天花板。

net.ipv4.tcp_max_syn_backlog 半连接队列

控制 SYN 半连接队列(尚未完成三次握手的请求)的容量上限;队列满时新 SYN 可能被丢弃或触发 syncookies。

vm.overcommit_memory 内存超售策略

控制内核接受内存申请的宽松程度:0 启发式判断、1 总是允许、2 严格拒绝超售;影响 fork、大页与数据库行为。

net.netfilter.nf_conntrack_max 连接跟踪表上限

NAT/防火墙连接跟踪表容量上限;打满后新连接被丢弃并打印 table full 日志,是网关类主机的高频瓶颈。

vm.max_map_count 内存映射数量上限

限制单个进程可持有的内存映射区域数(默认 65530);搜索引擎、JVM、游戏服务器等大量 mmap 的应用常需要提高。

net.ipv4.tcp_syncookies SYN Cookie 防护

在半连接队列溢出时用无状态的 SYN Cookie 完成握手,避免队列耗尽导致正常新连接被拒;默认开启,代价是触发时部分 TCP 选项协商受限。

vm.dirty_ratio 脏页回写硬阈值

脏页占内存百分比达到该值(默认 20)时,写进程被迫参与同步回写,是写抖动(write stall)的常见来源。

/proc/sys 参数文件树

所有 sysctl 参数的运行时视图都在 /proc/sys 下,目录层级与点号命名严格对应,cat 读、echo 写,容器中多为命名空间隔离或只读。

net.ipv4.tcp_syn_retries 主动建连接重试

控制本机作为客户端发起连接时 SYN 的重传次数;默认 6 次累计等待约 2 分钟才放弃,内网服务常下调以快速失败。

net.core.netdev_max_backlog 收包积压队列

每个 CPU 内核收包队列的长度上限(默认 1000);小包高 PPS 场景队列打满会丢包,可在 softnet_stat 中确认。

net.ipv4.ip_forward IPv4 转发开关

控制内核是否转发非本机地址的数据包;容器网络、NAT 网关、VPN、软路由都需要开启它。

net.core.rmem_max / wmem_max 套接字缓冲上限

单个套接字接收/发送缓冲区的硬上限(默认各 212992 字节);应用 setsockopt 与自动调优都受它封顶,长肥管道场景需要提高。

net.ipv4.tcp_wmem 发送缓冲自动调优

发送侧缓冲自动调优的 最小/默认/上限(默认 4096 16384 4194304);大流量回源或推流场景可放宽上限提升突发吸收能力。

net.ipv4.conf.all.rp_filter 反向路径过滤

校验入包源地址是否可经同一接口回程;0 关闭、1 严格、2 松散(任意接口可达即可),是反地址欺骗的加固项。

fs.file-max 系统文件句柄上限

整个系统可打开的文件描述符总数上限,内核按内存规模自动计算初值;单进程限制则来自 limits。

net.ipv4.tcp_fin_timeout FIN_WAIT2 超时

控制主动关闭方在 FIN_WAIT2 状态等待对端 FIN 的超时秒数(默认 60);它不影响 TIME_WAIT 时长。

net.core.default_qdisc 默认队列规则

新网卡默认使用的队列规则(现代内核为 fq_codel);启用 BBR 时常见搭配 fq,低延迟转发场景可关注 codel 系列算法。

fs.inotify.max_user_watches 监听配额

每个用户可注册的 inotify watch 总数(默认 8192);文件同步、构建工具、监控代理耗尽后会报错。

net.ipv4.tcp_synack_retries 服务端握手重试

服务端在收到 SYN 后重传 SYN+ACK 的次数;默认 5,对端迟迟不回 ACK 时该连接最终被回收。

net.ipv4.tcp_fastopen TCP Fast Open

允许在 SYN 报文中携带数据(TFO),省去一次往返时延;取值 1 仅客户端、2 仅服务端、3 两端(按位组合)。

vm.dirty_background_ratio 后台回写阈值

脏页占内存比例达到该值(默认 10)时启动后台回写线程异步刷盘;与 dirty_ratio 一前一后控制回写节奏。

net.ipv4.tcp_mtu_probing PMTU 黑洞探测

当路径出现 ICMP 被拦截的 PMTU 黑洞时,内核可主动二分探测路径 MTU;0 关闭、1 检测到黑洞后启用、2 始终启用。

vm.panic_on_oom OOM 时是否崩溃

控制内存耗尽时内核行为:默认调起 OOM killer 杀进程,或配置为直接 panic(配合自动重启变成整机重启)。

net.ipv4.tcp_max_tw_buckets TIME_WAIT 总量

TIME_WAIT 状态套接字的总量上限,超出后内核会立即销毁并打印告警;默认 262144,属于保护性参数。

net.ipv4.tcp_slow_start_after_idle 空闲后慢启动

默认开启(1):连接空闲超过 RTO 后拥塞窗口重置并重新慢启动,长肥管道上的长连接会因此吞吐骤降。

nf_conntrack_tcp_timeout_established 跟踪超时

连接跟踪中 ESTABLISHED 表项的默认存活时间为 432000 秒(5 天),长连接多的网关会长期占用表容量。

fs.nr_open 单进程句柄硬上限

单个进程能打开的文件描述符硬上限(默认 1048576);limits 中的 nofile 不能超过它。

net.ipv4.tcp_window_scaling 窗口缩放

允许窗口大于 64KiB 的 TCP 选项(缩放因子最高 2 的 14 次方);高延迟链路的吞吐高度依赖它,关闭等于给窗口设上限。

fs.aio-max-nr 异步 IO 事件上限

系统级 Linux 原生 AIO 事件数量上限(默认 65536);数据库等使用异步 IO 的负载可能先行触顶。

net.ipv4.tcp_mem 全局 TCP 内存水位

三个页面数表示 TCP 全局内存的低水位/压力水位/上限;内核按物理内存自动计算初值,超压时限制新缓冲分配。

net.ipv4.tcp_timestamps 时间戳选项

启用 TCP 时间戳用于更精细的 RTT 测量与 PAWS 防旧报文重放;tcp_tw_reuse 的复用判定也依赖它。

net.ipv4.icmp_echo_ignore_all 禁 Ping

置 1 后本机不再响应 ICMP Echo 请求;常用于降低被扫描面,但会给外部连通性排查带来误导。

kernel.pid_max PID 编号空间

系统 PID(含线程号)编号上限:内核默认 32768,允许范围到 4194304;高密度容器/线程场景需要评估。

net.ipv4.tcp_abort_on_overflow 队列溢出行为

accept 全连接队列溢出时的两种处理:默认丢弃握手(等对端重传),或回 RST 让对端立即失败。

vm.overcommit_ratio 超售比例

严格超售模式下 CommitLimit 的构成比例(默认 50):CommitLimit = swap + 物理内存 × ratio%;仅在 overcommit_memory=2 时生效。

kernel.core_pattern 核心转储路径

定义崩溃核心文件的命名(内核默认 core,现代发行版多改为管道交给 systemd-coredump 统一管理)。

vm.vfs_cache_pressure 目录缓存回收倾向

控制内核回收 dentry/inode 缓存的倾向(默认 100):大于 100 回收更积极,小于 100 更倾向保留。

kernel.sysrq 系统请求键掩码

SysRq 功能位掩码(0 全关、1 全开、438 为常见组合);卡死救援时可通过 /proc/sysrq-trigger 触发保存、导出栈等操作。

vm.min_free_kbytes 保留空闲内存

内核启动时按内存规模计算并保留的空闲内存水位(低水位线);数值过低会引发直接回收与分配失败,过高则浪费内存。

vm.dirty_expire_centisecs 脏页老化时间

脏页超过该时间(默认 3000,即 30 秒)会被后台回写线程处理;控制数据在内存中滞留的上限时长。

kernel.panic 崩溃自动重启

panic 后等待多少秒自动重启(0 为不重启);与 panic_on_oops、hung_task_panic 组合构成无人值守的自愈链路。

net.ipv4.neigh.default.gc_thresh ARP 表阈值

邻居表回收的三个阈值(默认 128/512/1024);同网段大量主机时表满会打印 neighbor table overflow 并影响通信。

vm.dirty_writeback_centisecs 回写周期

内核回写线程的唤醒周期(默认 500,即 5 秒),决定脏页被检查与写出的节奏。

kernel.threads-max 系统任务数上限

整个系统的任务(线程)数量上限,内核按内存规模自动计算;触顶时新建线程失败。

vm.zone_reclaim_mode NUMA 本地回收

控制内存节点耗尽时是否优先在本地节点回收(而非跨节点分配):0 关闭为默认;开启后可能降低远程访问但增加回收开销。

kernel.sem SysV 信号量四元组

四个数值分别限制:每组信号量数、系统信号量总数、单次操作数、信号量组数(发行版常见 250 32000 32 128)。

kernel.printk 控制台日志级别

四元组控制日志输出行为:控制台级别、默认消息级别、控制台最低级别、启动默认级别(常见值 4 4 1 7);级别数值越小消息越重要。

tcp_available_congestion_control 算法清单

内核当前支持的拥塞控制算法(available)与允许应用切换的算法(allowed);切 bbr 前先在清单中确认。

fs.inotify.max_user_instances 实例配额

每个用户可创建的 inotify 实例数上限(默认 128);每个实例内部再受 watches 配额约束,二者需成对调整。

kernel.hung_task_timeout_secs 任务挂起告警

处于 D(不可中断睡眠)状态超过阈值的任务会被记录告警(默认 120 秒);可配置直接 panic 作为自愈手段。

kernel.dmesg_restrict 与 kptr_restrict 信息暴露控制

限制非特权用户读取内核日志(dmesg_restrict)与打印内核指针(kptr_restrict);安全加固常用组合。

net.ipv4.tcp_ecn 显式拥塞通知

ECN 协商:0 关闭、1 主动启用、2 仅在对端请求时启用(现代默认);用标记代替丢包传递拥塞信号。

vm.page-cluster swap 预读页数

swap 预读的页数按 2 的 n 次方计(默认 3 → 8 页 ≈ 32KiB);顺序换页时提升效率,随机负载下可能放大读开销。

kernel.shmmax SysV 共享内存上限

shmmax 限制单个共享内存段字节数、shmall 限制系统共享内存总页数、shmmni 限制段数量;数据库部署常需核对。

net.ipv4.udp_mem 等 UDP 缓冲参数

UDP 全局内存水位(udp_mem,按页)与单套接字最小缓冲(udp_rmem_min/udp_wmem_min,默认各 4096);UDP 无流控,缓冲不足直接丢包。

kernel.msgmax 消息队列单条上限

SysV 消息队列单条消息大小上限(常见 8192 字节);同类参数 msgmnb 限制单队列总字节、msgmni 限制队列数量。

net.core.rmem_default / wmem_default 默认缓冲

每个新套接字的默认收发缓冲(各 212992 字节);未显式 setsockopt 的应用直接继承,TCP 自动调优在此基础上工作。

kernel.randomize_va_space 地址随机化

ASLR 级别:0 关闭、1 部分随机化、2 完全随机化(默认);属于安全基线参数。

net.ipv4.tcp_autocorking 小包合并

内核在发送路径尝试合并小数据(队列中已有未发送数据时避免立即发出),默认开启;减少包数但可能略增延迟。

kernel.nmi_watchdog NMI 看门狗

基于性能计数器的硬锁检测与采样来源(常见默认开启,虚拟机多为关闭);关闭可省少量开销但失去 hard lockup 检测。

kernel.unprivileged_bpf_disabled 非特权 BPF

控制非特权用户能否加载 BPF 程序:0 允许、1 禁止、2 禁止且不可回退(现代发行版常见 2);root 不受影响。

net.core.busy_read / busy_poll 低延迟轮询

允许应用通过 SO_BUSY_POLL 在网卡队列上自旋轮询收包(默认关闭);以 CPU 换微秒级延迟收益。

net.core.optmem_max 辅助缓冲区上限

单个套接字辅助数据(cmsg 等控制信息)缓冲上限;带辅助信息的通信(特定隧道/组播场景)可能受其约束。

vm.stat_interval 统计刷新间隔

内核更新虚拟机统计信息的间隔(默认 1 秒);/proc/vmstat 等视图按该节奏刷新,影响监控读数的时效性。

CPU 与调度

负载分析、上下文切换与绑核策略

load average 负载均值解读

1/5/15 分钟负载指数平均:统计运行队列与不可中断(D 状态)任务;必须与 CPU 核数比较才有意义。

top 中 CPU 各项含义

CPU 行的 %us/%sy/%wa/%hi/%si/%st 等字段:分别对应用户态、内核态、I/O 等待、硬中断、软中断与虚拟化窃取。

lscpu 查看 CPU 拓扑

输出 CPU 架构、插槽/核/超线程数、频率、缓存与 NUMA 信息;核对物理核与逻辑核的基础命令。

vmstat:cs 列与 r/b 队列

vmstat 输出中 r(运行队列)、b(不可中断任务)、in(中断)、cs(切换)四列联读,快速判断调度压力类型。

CFS 调度器与 vruntime

完全公平调度(CFS)以 vruntime 排序选择任务:权重(由 nice 映射)影响 vruntime 增速,从而决定 CPU 分配比例。

上下文切换开销与观测

任务切换需要保存/恢复寄存器与栈并损失缓存局部性;切换量远超业务规模时通常是锁竞争或调度异常的信号。

nproc 可用处理单元数

返回进程当前可用的处理单元数量(受亲和性与 cgroup 配额影响),是设置并发 worker 数的常用基准。

pidstat -w 进程级切换分析

按进程/线程统计自愿(cswch)与非自愿(nvcswch)上下文切换,是定位「谁在疯狂切换」的直接工具。

/proc/stat 累计计数解读

内核累计统计:每核 cpuN 行的 user/nice/system/idle/iowait/irq/softirq/steal,以及 ctxt、processes 等汇总计数。

sched_rt_runtime_us 实时带宽限制

SCHED_FIFO/SCHED_RR 任务在每个 sched_rt_period_us(默认 1s)内最多可占用的 CPU 时间(默认 950000us,即 95%),防止实时任务饿死普通任务。

/proc/loadavg 字段速读

实时负载视图:三个均值 + 当前运行任务/总任务数 + 最近创建进程 PID,排查时可即时判断忙闲。

sched_min_granularity_ns 最小调度粒度

CFS 下单个任务被抢占前的最短运行时间(默认 3ms 量级),限制时间片下限,避免频繁唤醒场景的切换开销失控。

sched_latency_ns 调度周期

CFS 的目标调度周期(默认 24ms 量级):周期内每个可运行任务至少获得一次调度;任务数决定实际时间片。

EEVDF 调度器(6.6 起)

内核 6.6 起默认调度器演进为 EEVDF(最早合格虚拟截止时间),改善延迟敏感任务的选择;调参项迁移到 sched_base_slice 等。

sched_wakeup_granularity_ns 唤醒抢占粒度

唤醒的普通任务抢占当前任务所需的最小虚拟时间差(默认 1ms 量级);调小让唤醒任务更快上台,调大减少抢占抖动。

cgroup v2 cpu.max CPU 限额

cpu.max 形如 "50000 100000":每 100ms 周期最多使用 50ms CPU(约 0.5 核);是容器与 systemd 服务限核的现行接口。

隔离核:isolcpus / nohz_full / rcu_nocbs

组合内核参数把指定核从常规调度均衡、时钟滴答与 RCU 回调中隔离,供延迟敏感任务独占,需配合显式绑核使用。

sched_migration_cost_ns 迁移代价窗口

任务刚被迁移后的缓存热窗口(默认 0.5ms 量级):窗口内调度器倾向不再迁移该任务,减少跨核缓存失效。

chrt 设置调度策略与优先级

查看或设置进程调度策略:FIFO(-f)/RR(-r)/BATCH(-b)/IDLE(-i)/OTHER(-o);-p 改运行中进程,直接带命令则启动新进程。

cgroup v2 cpu.weight 相对权重

cpu.weight 是 CPU 时间的相对份额(默认 100,范围 1-10000);仅在多组竞争 CPU 时按权重分配,空闲时不设上限。

cgroup v2 cpuset 核心与节点绑定

cpuset.cpus 与 cpuset.mems 把一组任务限定在指定 CPU 与 NUMA 节点上运行,属于硬性隔离,常用于核心独占。

cpufreq 调频调速器

governor 决定 CPU 频率如何随负载变化:performance 恒高频、powersave 最低频、schedutil 由调度器驱动;低延迟场景常固定 performance。

CPU 使用率高排查流程

按层级排查:系统整体 → 具体进程 → 具体线程 → 函数级热点 → 归因(计算/系统调用/锁/GC),每步都有对应工具。

sched_nr_migrate 批量迁移任务数

单次负载均衡操作中最多尝试迁移的任务数(默认 32);大量短命任务场景影响均衡效率与单次暂停时长。

nice / renice 调整普通优先级

nice 值 -20..19(越小优先级越高);普通用户只能调大 nice,调小需要 CAP_SYS_NICE;renice 立即生效但不持久。

taskset 绑定 CPU 亲和性

用掩码或 -c 列表把进程限制在指定 CPU 上运行,减少跨核迁移与缓存失效;systemd 服务可用 CPUAffinity 持久化。

平均负载高但 CPU 空闲的排查

Linux 的平均负载把不可中断睡眠(D 状态,多为等 IO)计入;负载高而 CPU 空闲通常是磁盘或网络文件系统阻塞。

systemd 单元 CPU 资源控制

systemd 通过 CPUQuota/CPUWeight/AllowedCPUs/TasksMax 等指令在单元级限制资源;set-property 即时生效并生成 drop-in 持久化。

温度与降频排查

CPU 因温度或功耗墙降频时表现为性能下滑、频率低于标称;从 thermal zone、dmesg 与 /proc/cpuinfo 三处交叉验证。

软中断与 ksoftirqd 排查

网络与块设备的收尾工作在软中断中完成;压力高时 ksoftirqd 线程接手处理,单核 si 高往往对应中断集中或包处理风暴。

numa_balancing 自动 NUMA 均衡

内核自动把任务与内存页向访存更近的节点迁移;开启可改善通用负载的跨节点访问,确定性的内存密集负载常关闭改为手工绑定。

numactl 绑定核与内存节点

numactl --physcpubind 限定逻辑核、--membind/--preferred 控制内存节点;--localalloc 让分配尽量就近,降低跨节点延迟。

PREEMPT_DYNAMIC 抢占模型

PREEMPT_DYNAMIC 允许同一内核在启动时或运行时切换抢占模型(voluntary/full 等),在吞吐与内核态延迟间取舍。

soft lockup 排查

某 CPU 长时间不让出调度时内核报 soft lockup(dmesg 可见 BUG: soft lockup),常见于驱动或内核路径长时间占用/关抢占。

tuna 查看与调整线程/中断亲和

tuna 可列出线程与 IRQ 的当前 CPU 亲和性并批量移动,常用于把中断与工作线程固定到指定核心,减少干扰。

vmstat 的 r 列:运行队列长度

r 列是等待运行的进程数(含正在运行);持续大于逻辑核数说明 CPU 侧排队,需要结合 cs/in 列区分缺 CPU、锁竞争还是中断风暴。

cgroup v2 cpu.stat 节流诊断

cpu.stat 提供 usage_usec、nr_periods、nr_throttled、throttled_usec 等计数;nr_throttled 增长说明任务反复撞上 cpu.max 限额。

cgroup v2 pids.max 进程数限制

pids.max 限制 cgroup 内可创建的进程与线程总数,防 fork 炸弹;触顶后 fork/clone 返回 EAGAIN。

intel_pstate 驱动与 EPP

Intel 平台默认使用 intel_pstate(active 模式),governor 退化为 performance/powersave 两档,功耗与延迟平衡由 EPP 偏好控制。

turbostat 频率与 C-state 观测

turbostat 直接读取 MSR 输出每核实际频率、C-state 驻留与功耗估算,是验证调频/降频是否生效的量化工具。

用户态与内核态占比判读

us/sy 比例定位 CPU 消耗归属:用户态高是应用计算,内核态高指向系统调用、锁竞争、页错误或网络栈处理。

kworker 高占用排查

kworker 线程执行内核延迟工作(IO 完成、驱动任务等);持续高占用通常意味着存储/网络路径上有持续负载或驱动问题。

irqbalance 中断均衡服务

irqbalance 自动把硬件中断分散到各核心,减少单核软中断热点;与手动 IRQ 亲和性设置冲突时需二选一。

中断亲和性手动绑定

把网卡/块设备中断固定到指定核,降低单核 softirq 热点;/proc/interrupts 看计数分布,smp_affinity_list 写核列表。

threadirqs 中断线程化

内核参数 threadirqs 让大部分中断处理程序以内核线程运行,可对其设置调度策略与亲和性,便于控制中断抖动。

PSI CPU 压力指标

Pressure Stall Information(内核 4.20+)在 /proc/pressure 下量化任务因等 CPU/IO/内存而停顿的比例,avg10/60/300 便于看趋势。

sched_debug 调度器视图

/proc/sched_debug 展示每 CPU 运行队列、当前任务、负载与调度域,用于确认绑核、隔离与负载分布是否按预期生效。

sched/features 调度特性开关

部分调度特性通过 debugfs 的 /sys/kernel/debug/sched/features 暴露,可临时开关用于定位回归;属于调试接口非稳定 ABI。

cpuidle 空闲状态管理

空闲时 CPU 进入的 C-state 深度由 governor 与延迟容忍决定;深睡省电但唤醒慢,延迟敏感场景可用 latency 限制或调换 governor。

steal time 判读(虚拟化)

虚拟机 CPU 时间被宿主或其他租户抢占的部分记为 steal;持续偏高说明资源超卖或邻居争抢,虚机内部优化无法根治。

cyclictest 实时延迟测量

cyclictest 以高精度定时器循环唤醒并测量实际延迟,输出 Min/Avg/Max,是评估系统调度抖动的常用量化手段。

实时优先级权限(rtprio 限制)

普通用户设置实时策略需要 rtprio 资源限制(ulimit -r);权限不足时 sched_setscheduler 返回 EPERM,systemd 服务用 LimitRTPRIO 放行。

sched_rr_timeslice_ms 轮转时间片

SCHED_RR 每个时间片的长度(默认 100ms);FIFO 不轮转,RR 在片用完或更高优先级任务到来时让出。

线程级排查:ps -eLf / top -H

按线程维度观察 CPU 占用:ps 用 LWP 列、top -H 显示线程;定位热点线程后再用 perf 等工具深挖。

pidstat -t 线程级统计

sysstat 的 pidstat 可按线程输出 CPU 与上下文切换数据,适合定位多线程服务中的热点线程与切换大户。

cpupower 频率与 C-state 管理

cpupower 提供频率策略设置(frequency-set)、信息查询(frequency-info)、空闲状态统计与监视(idle-info / monitor)等能力。

mpstat 每核利用率与中断分布

sysstat 的 mpstat -P ALL 展示每逻辑核的 usr/sys/iowait/soft/steal;-I 汇总中断统计,用于发现单核热点与中断集中。

调度调参方法论

调度类调参流程:先录制参数基线,再明确目标指标(延迟/吞吐),一次只改一项,用压测对比,未达标即回退。

schedstat 调度统计

开启 CONFIG_SCHEDSTATS 后可读 /proc/schedstat 与 /proc/<pid>/schedstat,观察运行时长、排队等待与迁移计数,验证调度行为。

CPU 逻辑核上下线

通过 /sys/devices/system/cpu/cpuN/online 动态启用/关闭逻辑核,用于故障隔离、维护或演练;下线前任务会被迁走。

内存与 OOM

内存分布、缓存回收与 OOM 排查

vm.overcommit_kbytes 固定提交上限

overcommit_memory=2 时可改用固定字节数作为提交上限(非 0 时优先于 overcommit_ratio),适合需要精确控制可提交内存的机器。

vm.watermark_scale_factor 回收水位间距

决定 kswapd 提前回收的积极程度:各 zone 的 low 与 high 水位间距按内存规模乘以该系数(默认 10 即 0.1%),调大让回收更超前。

vm.compaction_proactiveness 主动碎片整理

内核主动做内存碎片整理的积极度(0-100,5.18 起默认 20);也可向 /proc/sys/vm/compact_memory 写值手动触发一次全局整理。

Transparent HugePage 全局开关

/sys/kernel/mm/transparent_hugepage/enabled 控制 THP:always 全局启用、madvise 仅对声明区间启用、never 关闭;数据库类负载常选 madvise/never。

cgroup v2 memory.max 硬上限

内存硬限额:用量触顶时先在组内回收,无法满足则触发 cgroup 级 OOM;是容器与关键服务内存隔离的主力接口。

cgroup v2 memory.min/low 保底

memory.min 为硬保底:内存短缺时该组内存不会被回收;memory.low 为软保底:仅在别无选择时才回收。用于保护关键服务的最小工作集。

set_mempolicy 与 mbind 应用级 NUMA 策略

应用可通过系统调用设置 NUMA 内存策略:MPOL_DEFAULT 默认、MPOL_BIND 绑定节点、MPOL_PREFERRED 优先、MPOL_INTERLEAVE 交错分布。

内存分配失败的分层排查

ENOMEM/EAGAIN 报错按层排查:进程地址空间限制(ulimit -v)→ cgroup 限额 → overcommit 模式 → max_map_count → 碎片/大页。

/proc/buddyinfo 碎片观测

按内存区和阶数展示空闲块数量;高阶块(order 5 以上)长期为 0 说明碎片化严重,大页与高阶分配会很吃力。

THP defrag 碎片整理策略

defrag 决定为凑 2MiB 大页是否同步整理内存:always/defer/madvise/never;always 可能造成明显延迟尖峰,defer 后台异步处理。

静态大页(HugePages)配置

通过 vm.nr_hugepages 预留固定数量的大页供应用显式使用(MAP_HUGETLB / SHM_HUGETLB),避免运行时分配 2MiB 连续内存的碎片问题。

MADV_HUGEPAGE 按需启用大页

应用对特定内存区间声明 MADV_HUGEPAGE 启用、MADV_NOHUGEPAGE 关闭 THP,在全局 always 之外获得按需控制能力。

oom_score_adj 调整 OOM 倾向

在 -1000..1000 范围调整进程被杀倾向:负值降低(保护),正值提高(可牺牲);systemd 服务可用 OOMScoreAdjust 固化。

dmesg OOM 日志解读

OOM 触发时 dmesg 会打印节点/memcg 内存概况、进程 rss 与 oom_score,最后才是 Killed process 结论行。

cgroup v2 memory.high 软限额

软限制:超过后抑制分配、强制回收,进程变慢但不直接被杀;适合“先刹车”再观察的过渡手段。

cgroup v2 memory.stat 构成分析

memory.stat 拆分内存构成:anon、file、slab、shmem 及 pgscan/pgsteal、pgmajfault 等,用于区分泄漏(anon 涨)与缓存(file 涨)。

/proc/meminfo 关键字段解读

关注 MemTotal/MemFree/MemAvailable/Buffers/Cached/Slab(SReclaimable/SUnreclaim)/Committed_AS/CommitLimit 的组合,而不是单看 MemFree。

创建并启用 swap 文件

在磁盘上创建 swap 文件并启用:fallocate 建文件(或 dd 兜底)→ chmod 600 → mkswap → swapon,写入 fstab 持久化。

zram 压缩内存交换

把一部分内存做成压缩块设备当 swap 使用:换出页压缩存放,减少真实磁盘 IO,用 CPU 换内存,适合内存紧张而 CPU 富余的场景。

kswapd 回收线程排查

kswapd0 负责后台回收;持续高 CPU 说明内存压力大或水位配置导致长期回收,应结合回收计数与 PSI 判断而非直接调参。

直接回收(allocstall)诊断

分配内存失败时内核在分配路径上同步回收,造成延迟尖峰;allocstall 计数增长即表示发生过直接回收。

slab 增长与内核泄漏排查

定位内核对象泄漏:slabtop 找持续增长缓存 → 读 /sys/kernel/slab/<cache>/ 的 objects → 必要时启用 kmemleak 扫描。

应用内存泄漏定位(smaps 差分)

对进程做 smaps_rollup 定期采样做差:anon/private 持续增长指向应用分配泄漏,file 增长多为缓存;再用 pmap 找具体增长段。

MADV_DONTNEED / MADV_FREE 主动释放

应用用 madvise 主动释放区间页:DONTNEED 立即丢弃(文件页可重读、匿名页数据丢失),FREE 延迟回收但在内存紧张前保留数据。

glibc 内存归还(arena 与 malloc_trim)

多线程 glibc 应用 RSS 偏高常与 per-thread arena 有关:可用 MALLOC_ARENA_MAX 限制 arena 数量,或调用 malloc_trim(0) 主动归还空闲堆。

vm.watermark_boost_factor 瞬时抬升水位

按比例临时抬高低水位,缓解碎片化时的分配失败;属于瞬态缓冲,不是长期给系统多留内存的手段。

vm.extfrag_threshold 碎片判定阈值

高阶分配失败时用于判断该优先碎片整理还是直接回收的阈值(默认 500);判定依赖内核的碎片指数,一般无需调整。

/proc/zoneinfo 水位与页状态

逐 zone 展示 min/low/high 水位、free 页与活跃/非活跃页统计,用于判断水线是否健康、是否长期贴着低水位运行。

khugepaged 合并线程观测

khugepaged 后台把连续 4KiB 页合并为 2MiB 大页;pages_collapsed 持续增长说明合并活跃,合并过程可能影响相关进程的延迟。

cgroup v2 memory.swap.max 限制

限制该组可使用 swap 的上限;设为 0 表示该组不使用 swap,让内存压力以更早的 OOM 暴露而非长期抖动。

cgroup v2 memory.oom.group 整组终止

设为 1 时该 cgroup 发生 OOM 会整组一起被终止,避免组内部分进程死亡留下的不一致状态,适合不可分割的工作负载。

cgroup v2 memory.events 事件计数

记录 low/high/max/oom/oom_kill 等事件累计次数;max 与 oom_kill 增长说明限额曾被打穿,high 增长说明发生过节流。

cgroup v2 memory.current 与 peak

memory.current 是当前用量(含缓存),memory.peak(5.19+)记录峰值;用峰值判断与限额的安全距离比瞬时值可靠。

内存压力 PSI(/proc/pressure/memory)

量化因内存不足导致的停顿:some 表示至少一个任务受影响,full 表示所有任务都被回收阻断;avg300 适合看长期趋势。

/proc/vmstat 内存计数速查

pgpgin/pgpgout、pswpin/pswpout、pgmajfault、pgscan_direct、allocstall、oom_kill 等累计计数是做趋势与告警的原始数据。

缺页统计(minor / major fault)

次缺页(minor)在内存中解决页表映射,主缺页(major)需要磁盘 IO;major fault 速率直接影响应用延迟。

swapoff 的风险与步骤

关闭 swap 会把已换出的页全部读回物理内存;若余量不足将触发 OOM,操作前必须核对 MemAvailable 与 Committed_AS。

zswap 前端压缩缓存

换出页先进入压缩内存池,命中则免去磁盘写;池满后按策略回写后端 swap,属于“前置换出缓存”机制。

回收效率指标 pgscan/pgsteal

pgscan 是扫描页数、pgsteal 是成功回收页数;两者比值反映回收效率,效率低说明扫描的多是不可回收或高频访问页。

手动清理页面缓存

向 /proc/sys/vm/drop_caches 写 1(页缓存)/2(dentry、inode)/3(两者)触发清理;用于测试或演示,生产需评估副作用。

smaps_rollup 进程内存汇总

/proc/<pid>/smaps_rollup 汇总 Rss/Pss/Shared/Private 等字段,读取开销远小于全量 smaps,适合定期采样做差定位增长。

numastat 跨节点访问统计

按节点统计 numa_hit/miss/foreign 等命中情况;foreign 与 miss 持续偏高说明跨节点访问多,是 NUMA 调优的信号。

tmpfs 占用内存排查

tmpfs 上的文件直接消耗内存并计入 Shmem;df 看用量、du 找文件、/proc/meminfo 的 Shmem 看总量,容器 /dev/shm 与 /tmp 是高发区。

/dev/shm 与共享内存限制

/dev/shm 是 tmpfs 挂载点,进程间共享内存常放这里;默认尺寸与容器参数相关,共享段用 ipcs 查看。

mlock 锁定内存

mlock/mlockall 把页面锁定在内存中避免换出,用于低延迟场景;受 RLIMIT_MEMLOCK 限制,服务可配 LimitMEMLOCK。

kdump 崩溃转储配置检查

内核崩溃时由 kdump 捕获 vmcore 供 crash 分析;需要预留 crashkernel 内存并启用相应服务,确认转储目标空间充足。

KSM 同页合并

Kernel Samepage Merging 扫描并合并内容相同的页,节省内存(虚拟化场景常见),代价是 CPU 扫描开销。

大页使用量核对

/proc/meminfo 的 HugePages_Total/Free/Rsvd/Surp 显示预留与使用情况;Surp 为超额分配预留计数,长期大量 Free 表示预留浪费。

oom_kill 计数与内存告警

/proc/vmstat 的 oom_kill 计数累计系统内 OOM 次数;做增量监控可在业务无感知前发现内存问题。

MemAvailable 与 free 的差异

MemAvailable 是内核基于可回收缓存与 slab 估算的可用量(free 的 available 列),比 MemFree 更能代表还能分配多少;完整空闲只是 MemFree。

swap 换入换出判读(si/so)

vmstat 的 si/so 是换入换出速率;持续非零说明内存紧张,伴随延迟升高时要考虑扩容或调整内存策略,而非只调 swappiness。

swap 设备优先级

多块 swap 用 pri 决定使用顺序:数值大的优先使用;swapon --priority 立即生效,fstab 里写 pri= 持久化。

slabtop 内核缓存观测

按占用排序展示 slab 对象缓存(dentry、inode 等),是定位内核态内存增长来源的第一站。

ps 内存列含义:VSZ 与 RSS

VSZ 是虚拟地址空间大小(可能大部分未使用),RSS 是常驻物理页(包含共享页);多进程相加大于物理内存属于共享重复计数。

pmap 进程映射明细

逐段列出进程地址空间的映射与 RSS/Dirty,定位大块匿名映射、文件映射或异常增长段。

smem 的 PSS 报表

smem 以 USS/PSS/RSS 三个口径输出进程与用户内存报表,PSS 按共享比例分摊,适合多进程共享库场景的真实占用评估。

Buffers 与 Cached 的区别

Buffers 是块设备元数据缓存,Cached 是文件内容与 tmpfs 的缓存;free 的 buff/cache 为两者合计,大部分可回收、tmpfs 部分不可。

vmtouch 页面缓存探查与预热

vmtouch 可查看文件/目录在页缓存中的覆盖率,也可预热(-t)或驱逐(-e)缓存,用于验证缓存命中和控制内存占用。

磁盘与 IO

IO 调度器、文件系统与磁盘瓶颈

块设备 IO 调度器切换

单队列与多队列调度器名称不同:none(直通,NVMe 常用)、mq-deadline(默认折中)、bfq(交互友好)、kyber。

fio 基准测试入门

fio 用参数化 job 描述负载:rw 指定读写模式、bs 块大小、iodepth 队列深度、numjobs 并发、direct=1 绕过缓存。

iostat -x 关键列解读

r/s、w/s 是每秒请求数;await 是平均完成时间(含排队);aqu-sz 是平均队列深度;%util 是设备忙碌时间比例,多列合看才准确。

fio 延迟与百分位解读

fio 报告含 IOPS、带宽与 lat/clat 分布;关注 clat percentiles 的 P99/P99.9,均值会掩盖尾延迟问题。

cgroup v2 io.max / io.weight

io.max 按设备限速(rbps/wbps/riops/wiops),io.weight 分配 IO 权重;设备用主:次号(如 8:0)标识。

iowait 高排查步骤

按顺序排查:确认 iowait 与 steal 占比 → 找 IO 进程 → 看设备指标 → 评估内存回收干扰,避免直接归因存储。

blktrace 块层跟踪

采集块设备事件流(Q/G/I/D 等阶段),blkparse 可读输出;配合 btt 分解 Q2C 延迟定位慢在排队还是设备。

/proc/diskstats 字段速览

每设备一行:读完成数、读合并、读扇区、写完成数、写扇区、在途请求、IO 时间与加权时间等,是 iostat/sar 的数据源。

预读参数 readahead

预读让顺序读提前加载数据;两种口径:blockdev --setra(512B 扇区)与 /sys/block/<dev>/queue/read_ahead_kb(KiB)。

nr_requests 队列深度

每设备允许排队的请求数上限;调大提升突发吞吐但抬高峰值延迟,NVMe 默认往往已较大。

SSD TRIM 与 fstrim 定时任务

TRIM 让 SSD 感知已删除块以维持性能:可手动 fstrim、启用挂载选项 discard,或依赖 fstrim.timer 周期性执行。

挂载选项 noatime 减少写放大

noatime 省去每次读触发的访问时间写回;relatime 是常见折中(更早或超过一天才更新),多数发行版默认已是 relatime。

dd 快速顺序读写测试

用 dd 做顺序写/读基准:of 指定目标、oflag/iflag=direct 绕缓存、conv=fsync 强制落盘;看最终 MB/s 估算吞吐。

SMART 磁盘健康检查

smartctl -H 快速健康判定,-A 看关键属性(重分配扇区、待映射扇区、介质错误、温度);属性号随厂商不同。

NVMe 设备健康与清单

nvme list 列出命名空间,nvme smart-log 读取温度、已用寿命百分比与介质错误计数,是 NVMe 设备的第一手健康数据。

inode 耗尽排查(df -i)

空间足够却无法创建文件常见于 inode 用尽;df -i 看用量,find 统计小文件密集目录。

df 卡住的挂载点排查

df 卡在某个挂载点通常是被挂起的网络文件系统(NFS/CIFS/FUSE);用 df -l 绕过网络挂载,findmnt 列出来源。

定位大目录与大文件

du 按目录汇总排序找大目录(-x 限制同一文件系统),find 按大小筛大文件;两者配合快速定位空间去向。

稀疏文件与 du/ls 差异

稀疏文件逻辑大小远大于实际占用:ls 看逻辑、du 看实际块;打包传输要用支持稀疏的工具保持体积优势。

ionice 设置 IO 调度类

ionice 调整进程 IO 类别:-c1 realtime、-c2 best-effort(-n 0-7 优先级)、-c3 idle(仅空闲时使用磁盘)。

fsync 尾延迟观测

应用 fsync/fdatasync 的耗时决定写入确认延迟;用 strace -T 看单次耗时,或在写入路径上叠加监控观察 P99。

tune2fs 查看 ext4 参数

tune2fs -l 只读查看 ext4 超级块信息(保留块比例、挂载计数、特性、日志),评估保留空间与维护状态。

iostat 间隔采样与单位

iostat 首次输出是自启动以来的均值,后续为区间值;用 -m 换可读单位、-d 只看设备、-p 显示分区。

iotop 进程级 IO 观测

按进程显示读写速率与等待占比;-o 只看有活动的进程、-P 按进程而不是线程、-b -n 用于脚本采样。

pidstat -d 进程 IO 统计

sysstat 的 pidstat -d 输出每进程读写 KB/s 与 IO 等待,适合定位“哪几个进程在打盘”。

vmstat 的 IO 列判读

bi/bo 是每秒进出块设备的块数,wa 是 CPU 等待 IO 的时间比例;bi/bo 高且 wa 高通常意味着 IO 路径是瓶颈。

sar -d 历史磁盘指标

sysstat 若启用采集,可用 sar -d 回看任意时点的磁盘 tps、读写扇区、await、util,适合事后复盘与容量趋势。

sar -b IO 总览行

tps 是每秒 IO 请求数,rtps/wtps 是读写请求速率,bread/s、bwrtn/s 是扇区吞吐;适合快速判断压力方向。

设备类型确认(rotational)

/sys/block/<dev>/queue/rotational 标记设备是否旋转(1 机械、0 SSD/虚拟);调度器与预读策略常按它选择。

hdparm 盘测速与写缓存状态

hdparm -tT 分别测缓存与磁盘读取速度、-W 查看写缓存开关;主要面向 ATA/SATA 设备。

已删除仍占空间的文件

df 显示满、du 却对不上:进程仍持有已删除文件句柄;lsof +L1 按链接数筛选,释放需要进程重新打开或重启。

filefrag 文件碎片查看

filefrag -v 列出文件 extent 数量与分布;extent 数量异常多说明碎片化,可能拖慢顺序读。

网络栈调优

队列、拥塞控制与连接数优化

监听队列溢出诊断

客户端报连接超时、服务日志出现握手失败时,用溢出计数与 ss 队列读数区分 SYN 队列满还是 accept 队列满,再决定调参数或改应用。

TIME-WAIT 堆积诊断

短连接服务出现大量 TIME-WAIT 时, 先量化数量与端口分布, 再判断是否真的影响端口可用性, 避免盲目关闭时间等待。

网卡中断亲和与队列绑定

/proc/interrupts 里每个网卡队列有独立中断号, 把中断绑定到固定核可减少迁移开销, 并可与收包应用同 NUMA 规划。

net.core.netdev_budget 软中断预算

每轮网络软中断最多处理的包数与时间预算(netdev_budget / netdev_budget_usecs);高 PPS 丢包时可评估调整。

tcp_limit_output_bytes 与排队延迟

该参数限制单个 TCP socket 在内核 qdisc 上可排队的字节数, 是权衡吞吐与本地排队延迟的重要开关。

UDP 收发错误计数定位

UDP 丢包不报错, 需要靠内核计数器区分: 缓冲不足、端口未监听还是校验错误, 再对症处理。

/proc/net/softnet_stat 丢包定位

网卡到协议栈之间的丢包会统计在 softnet_stat: 第二列增长代表 backlog 溢出, 第三列增长代表软中断预算耗尽。

net.ipv4.tcp_sack 选择性确认

SACK 让接收方通告缺口以外的已收数据,重传只补丢失段;默认开启,是高速链路丢包恢复的基础机制。

net.ipv4.tcp_notsent_lowat 发送缓冲水位

控制发送队列中未发送字节的阈值:低于阈值才通知应用可写,用于抑制缓冲区膨胀(bufferbloat)与控制内存占用。

net.netfilter.nf_conntrack_buckets 哈希桶

连接跟踪表的哈希桶数量,影响查找效率与内存;与 nf_conntrack_max(上限)是两个维度。

连接跟踪表满诊断

nf_conntrack_count 接近 nf_conntrack_max 时,新连接会被丢弃并出现 table full 日志;先治连接泄漏再谈扩容。

nf_conntrack_tcp_timeout_established

已建立连接的表项保持时间(默认 432000 秒即 5 天);调小加快回收,避免表项被长连接长期占用。

net.ipv4.ipfrag_high_thresh 分片重组内存

IP 分片重组占用的内存上限(配套 low_thresh 触发回收);隧道、VPN、大数据包路径出现分片时关注其压力。

发送缓冲写阻塞定位

应用 write/send 偶发卡住不返回, 常见原因是发送缓冲已满且对端读取慢; 用 ss -m 观察 socket 排队量与缓冲上限。

net.ipv4.tcp_dsack 重复 SACK

D-SACK 让接收方报告重复收到的数据段,发送方可据此识别伪重传与网络重复包,修正拥塞窗口判断。

net.ipv4.tcp_adv_win_scale 窗口换算

决定接收缓冲中协议开销与可用窗口的换算比例(默认 1);影响通告窗口的估算方式,属于底层微调项。

net.ipv4.tcp_moderate_rcvbuf 自动调节

接收缓冲自动调节开关(默认 1):根据连接速率动态扩缩 rcvbuf;关闭后缓冲固定为初始值,容易限制吞吐或浪费内存。

net.ipv4.tcp_rfc1337 TIME_WAIT 防护

按 RFC 1337 处理 TIME_WAIT 状态的可疑 RST,避免连接被过早终止;默认 0(关闭),高安全要求场景可启用。

net.ipv4.tcp_max_orphans 孤儿套接字上限

限制未附着到用户进程的 TCP socket 数量,防止本地资源耗尽;超出时连接会被重置并在日志中体现。

net.ipv4.tcp_retries2 重传上限

未被确认的重传次数上限(默认 15),决定连接多久被判死(分钟级);调小能更快感知断链,也可能误杀慢链路。

net.ipv4.tcp_rto_min / tcp_rto_max

RTO(重传超时)的上下限:默认下限 200ms、上限 120s;内核按 RTT 计算实际值并在区间内收缩。

net.ipv4.udp_mem 全局内存三值

UDP 全局内存水位(min/pressure/max,单位页);高吞吐 UDP 服务丢包排查时需结合 sockstat 核对缓冲使用。

net.core.rmem_default 默认接收缓冲

未显式 setsockopt 时 socket 的初始接收缓冲;与 rmem_max 是上限的关系,应用可按需覆盖。

net.core.wmem_default 默认发送缓冲

socket 初始发送缓冲;高带宽单流场景常需应用显式调大 wmem,而不是只改全局默认。

net.ipv4.icmp_ratelimit 响应限速

限制内核发送 ICMP 响应的频率(默认 1000ms 的间隔基数,配合 icmp_msgs_per_sec),用于抑制 ICMP 放大与滥用。

TCP_DEFER_ACCEPT 减少空连接唤醒

让内核在收到首个数据包后再唤醒 accept, 减少对空连接轮询与唤醒开销, 适合先连接后发数据的服务。

socket 缓冲与带宽延迟积估算

高 RTT 链路上单流吞吐受限, 往往是 socket 缓冲小于带宽延迟积; 先估算目标 BDP, 再设置收发缓冲。

net.core.netdev_budget_usecs 软中断时间预算

softirq 每轮处理收包的时间预算(微秒), 与按包数限制的 netdev_budget 配套; 突发场景 underrun 时评估提高。

nf_conntrack UDP 超时调优

UDP 会话在连接跟踪表里的存活时间由独立超时控制; 过长会堆积死条目, 过短会回收仍在通信的长会话。

arp_ignore 与 arp_announce 场景配置

多网卡与浮动 IP 场景控制 ARP 应答与宣告行为, 不当配置会造成地址漂移冲突或 VIP 不可达。

抓包文件离线分析流程

线上只负责采集, 分析放到离线: 用 tshark 统计与过滤能力定位重传、窗口与响应时间问题。

TLS 握手延迟测量

用 openssl s_client 观察握手过程与协商结果, 结合 time 命令量化握手开销。

多路径 ECMP 哈希策略

ECMP 场景下哈希字段决定流量分布: L3 哈希对单一大流稳定, 短连接多时评估 L4 哈希改善均衡。

应用侧 TCP keepalive 参数

在单个连接上开启保活并定制空闲、间隔与次数, 用于快速回收异常对端连接。

TCP_USER_TIMEOUT 控制未确认数据等待

应用级超时接口: 设置后, 已发送数据在指定毫秒内未获确认即断开连接, 用于卡死连接的快速回收。

tcp_challenge_ack_limit 挑战 ACK 限速

限制内核响应盲窗口内可疑 ACK 的挑战 ACK 数量, 降低被利用做旁路探测的风险, 属安全侧参数。

tcp_invalid_ratelimit 无效报文响应限速

限制对无效 TCP 报文回送 RST 的速率, 缓解盲重置类攻击与反射, 支持毫秒级时间窗写法。

重传与超时诊断链路

区分快速重传与 RTO 超时两类现象: 前者多为丢包/乱序快速恢复, 后者代表超时重发, 影响更大。

fq_codel 出口排队与缓冲膨胀抑制

fq_codel 是常见默认 qdisc 之一, 通过公平排队与主动管理抑制本地出口排队延迟, 适合高并发发送的服务器。

网络调优闭环方法

网络参数调优需要基线、单变量变更与回滚记录: 先量化现状, 一次只改一项并用同一测量方法复测。

MTU 与分片问题定位

小包正常、大包卡住是典型 MTU 问题: 先确认接口 MTU 与路径 MTU, 再判断是否黑洞场景。

RPS/RFS 软件收包分发

单队列网卡或中断集中导致单核软中断打满时, 可用 RPS 把收包处理分散到多核, 再用 RFS 让同一条流固定到应用所在核。

XPS 发送队列绑定

XPS 把发送队列绑定到指定 CPU, 减少跨核发送时的队列竞争, 常与 CPU 亲和及中断布局一起规划。

ethtool 流哈希与 RSS 分布

多队列网卡按四元组做 RSS 哈希分流; 检查与调整流哈希输入字段, 可排查流分布不均与单队列热点。

/proc/net/snmp 协议计数速查

协议栈各层的累计计数来源: 头部行与数值行成对出现, 用列序对位解读重传、错误等指标。

多队列网卡队列数查看与调整

队列数影响收包并行度; 用 ethtool 查看当前与上限, 高 PPS 场景评估增加 combined 队列。

ethtool -S 网卡统计解读

驱动级计数器(丢包、错误、暂停帧)都在 ethtool -S: 针对性地筛选增长项, 判断问题在硬件侧还是协议栈侧。

ethtool 环缓冲查看与调整

网卡环形缓冲过小会丢突发流量, 过大会增加排队延迟; 用 -g 查看, -G 调整且立即生效。

中断合并参数调整

中断合并决定网卡攒包再中断的频率: 提高合并有利于吞吐, 降低或关闭更利于低延迟场景。

收发 offload 开关与抓包一致性

GRO/LRO 会把收到的数据段合并成大包, 抓包时看到超大帧属于正常合并结果; 需要逐包分析时再临时关闭。

发送队列丢弃与 txqueuelen

发送侧丢弃要区分本地队列满与物理链路丢包: ip -s link 的 TX dropped 与 tc 队列统计结合看, 再评估队列长度设置。

tc -s qdisc 出口队列读数

出口排队情况要看 qdisc 统计: backlog 表示当前排队字节, dropped/overlimits/requeues 提示限速与竞争情况。

conntrack 命令查看跟踪表

conntrack-tools 提供表内容、计数与事件流: 排查 NAT、丢连接、表容量问题时按条件过滤查看。

nftables 规则速查

现代发行版默认包过滤框架; 用 nft 检查与追加规则, 规则经 nft list ruleset 统一查看。

nftables flowtable 快速转发

转发与 NAT 场景下, flowtable 让已建立连接绕过完整协议栈路径, 以软件方式加速转发。

邻居缓存 GC 与 stale 时间

邻居表(ARP/ND)条目过期后先标记 stale 再回收; 用 ip neigh 与 gc_stale_time 排查地址无法解析与缓存积压。

邻居表故障定位

同网段部分地址不通时, 先看邻居表状态: FAILED 条目说明地址解析无响应, 结合 arping 与链路检查定位。

inet_peer 缓存参数概览

内核为对端 IP 维护共享缓存(如路径 MTU 等信息); inet_peer 系列参数控制其规模与回收节奏, 常规无需调整。

SO_REUSEPORT 多进程监听分流

多个进程绑定同一端口由内核按流哈希分流, 替代单进程 accept 的锁竞争; 监听前各进程都要设置该选项。

tcp_migrate_req 请求队列迁移

开启后, 同 REUSEPORT 组内某监听队列将满时, 内核可把新请求迁移到负载较低的监听者, 缓解单进程队列溢出。

tcpdump 常用过滤表达式

抓包的价值在于精准过滤: 按地址、端口、方向与 TCP 标志组合, 把噪声挡在抓取阶段之外。

内核丢包点追踪

怀疑协议栈内部丢包时, 追踪 skb:kfree_skb 丢弃原因, 直接定位丢在哪个子系统。

ip -s link 接口错误计数

接口级收发包与错误计数在 ip -s link: errors、dropped、missed 含义不同, 要分别对照驱动与协议栈层。

iperf3 TCP 吞吐测量

端到端吞吐基线工具: 服务端常驻, 客户端发起, 多流并行与双向模式覆盖不同场景。

iperf3 UDP 丢包与抖动测量

UDP 模式输出丢包率与抖动, 适合评估实时业务的路径质量; 服务端会给出双向统�计。

mtr 逐跳丢包与延迟

持续探测路径上每一跳的丢包与延迟; 判定丢包要观察从哪一跳开始且持续到终点。

netem 延迟与丢包模拟

在测试环境用 netem 注入延迟、丢包与乱序, 验证应用在弱网下的超时与重试逻辑。

tc tbf 出口限速

用令牌桶给出口限速, 模拟带宽约束或约束单机外发速率; burst 与 latency 决定突发容忍度。

ss -ti 解读单连接 TCP 状态

单连接吞吐或延迟问题时, ss -ti 输出的 cwnd、rtt、retrans 与发送队列是最直接的证据。

ss -s 传输层总览

快速查看 socket 总量与各类状态分布, 以及 socket 缓冲内存占用, 适合作为排查第一步。

curl 计时模板量化 HTTP 各阶段

用 -w 模板把 DNS、连接、TLS、首字节与总时长拆开, 定位延迟发生在链路还是服务端。

/proc/net/sockstat 速读

按协议汇总 socket 使用量: TCP inuse/orphan/tw/alloc 与内存占用, 适合脚本化采集。

nstat 差值观测协议计数

nstat 为内核网络计数器提供名称并按差值展示, 比原始 snmp 文件更适合连续观测。

网卡驱动与固件版本核对

驱动与固件版本影响 offload 支持与稳定性; 出现异常时先记录当前版本再寻求升级路径。

ipfrag_time 分片重组超时

控制分片报文在重组队列中的保留时间; 大量游离分片占用内存时, 评估缩短保留时间。

ip_nonlocal_bind 与浮动地址

允许进程绑定未在本机配置的地址, 供 VIP 漂移场景在地址未就位时先行绑定。

tcp_orphan_retries 与连接关闭

控制已无进程持有的连接重试次数; FIN_WAIT 类状态堆积时, 结合该参数与孤儿计数分析。

IPv6 关闭的完整做法

关闭 IPv6 需同时设置 all 与 default, 否则新接口仍可能启用; 关闭前评估依赖 v6 的服务。

bonding 链路状态检查

聚合接口问题先看 /proc/net/bonding: 模式、活动从口与各成员链路状态一目了然。

ping RTT 与抖动基线

延迟问题先用 ping 建立基线: 平均值与 mdev 波动是判断网络质量的第一步。

ethtool 流控(pause)查看与调整

链路层流控用暂停帧阻止对端继续发送, 突发场景可减少丢包, 但链路两端需协商一致。

nc 连通性探测与端口检查

从指定主机验证目标端口可达性: 服务端本地看监听, 客户端侧看路径与防火墙。

dig 解析耗时与解析器对比

解析延迟影响新建连接时间; 用 dig 的 Query time 对比不同解析器的响应表现。

跟踪表状态分布统计

按状态统计连接跟踪条目, 快速发现 SYN_RECV 堆积、大量 UNREPLIED 或关闭态残留。

listen() backlog 与应用层队列

应用 listen 的 backlog 决定内核为该监听 socket 保留的处理队列长度, 最终生效值受 somaxconn 约束。

SO_REUSEADDR 快速重启绑定

服务重启时避免因 TIME_WAIT 地址占用导致 bind 失败; 服务器监听 socket 常规设置项。

SO_LINGER 与主动 RST 关闭

SO_LINGER 控制 close 时未发送数据的行为: 超时归零可立即以 RST 关闭, 常规关闭则尽力发送。

TCP_MAXSEG 限制单段大小

按连接限制 TCP 最大段长, 隧道或特殊链路场景可避免超出路径能力, 常规环境保持默认。

TCP_QUICKACK 立即确认模式

对延迟敏感的请求响应型连接, 可开启立即确认减少等待; 默认延迟确认是为批量吞吐设计。

SO_RCVLOWAT 读唤醒阈值

控制 socket 可读事件的触发阈值: 提高后减少小报文唤醒次数, 适合批量读取且追求 CPU 效率的场景。

TCP_NODELAY 与交互延迟

小请求响应型连接可开启 TCP_NODELAY, 避免发送端攒包等待与延迟确认叠加造成额外往返。

按连接选择拥塞控制

在 socket 级选择拥塞控制算法, 相比全局切换影响面更小; 先用系统列表确认算法可用。

SO_BINDTODEVICE 绑定出口设备

把 socket 绑定到指定网络接口, 多网卡环境用于固定出口路径, 常与策略路由配合排查走向。

网络命名空间排查方法

容器网络问题先在对应 netns 内查看: 监听、地址、路由与宿主看到的可能完全不同。

veth 虚拟网卡对定位

veth 成对出现: 通过 iflink 找到对端口, 结合两侧统计判断丢包发生在容器侧还是宿主侧。

NAT 映射异常排查

NAT 相关丢连接看跟踪条目的双向字段与 UNREPLIED 标记, 结合后端服务与回程路由定位。

SYN_RECV 堆积诊断

半连接堆积常见于 SYN 队列满或来源伪造: 用状态计数与内核计数器交叉确认。

iptables 后端与规则来源核对

同一台机器可能存在 nft 与 legacy 两套后端: 先确认当前 iptables 命令的实际后端, 再看规则全貌。

性能分析工具

perf、sar、iostat 与火焰图思路

perf stat 总览用法

perf stat 给出执行窗口内的硬件与软件计数总览, 是判断 CPU 效率与瓶颈方向的入口命令。

perf stat 事件选择

通过 -e 选择硬件、缓存与软件事件: 缓存未命中与分支预测失败常用来锁定执行效率问题。

perf stat 间隔输出

用 -I 让计数按固定毫秒间隔输出, 把性能波动与时间线上的事件对齐。

perf stat 的观测目标

perf 支持按进程、线程、CPU 与系统范围选择观测对象: 定位问题前先明确观测边界。

perf record 与 report 采样工作流

采样记录后用 report 聚合热点: 这是 perf 的核心工作流, 频率与调用栈是质量关键。

perf top 实时热点

实时查看系统或进程内热点函数, 适合快速浏览当前 CPU 消耗分布。

perf 调用栈采集方式

-g 搭配 fp 或 dwarf 采集调用链, 决定火焰图与归因的可用深度。

perf annotate 下钻到指令/代码行

对热点函数做指令级注释, 观察具体指令的采样占比, 定位到代码行。

perf script 导出与管道处理

把采样数据导出为可读事件流, 供自定义统计或生成火焰图输入格式。

perf sched 调度延迟分析

记录调度事件并汇总等待与调度延迟, 定位运行队列竞争与唤醒延迟问题。

perf lock 锁竞争分析

采集内核锁事件并汇总竞争与等待耗时, 用于定位并发度提升后的瓶颈转向。

perf mem 内存访问采样

对访存进行采样, 区分加载/存储来源与层级, 支持内存带宽与缓存侧问题定位。

perf c2c 伪共享与缓存行竞争

通过缓存一致性事件定位伪共享: 多核之间对同一缓存行的竞争会在报告中显现。

perf trace 系统调用追踪

以低开销方式观测系统调用路径与耗时, 快速浏览进程与内核的交互。

perf list 事件检索

perf list 列出硬件、软件、缓存与 tracepoint 事件, 是写 -e 参数前的核对步骤。

perf probe 动态探针

在函数或代码行上动态添加 kprobe/uprobe, 用 perf record 采集命中次数或参数。

perf 符号与调试信息处理

热点显示为地址或 unknown 时, 需要核对符号来源: 调试信息、build-id 与内核符号路径。

perf report 排序与过滤

通过排序维度与过滤条件把报告聚焦到可行动的信息: 按进程、库或符号聚合。

perf diff 比较两次采样

对比两次 perf.data 的差异, 用于验证优化效果或定位版本间热点漂移。

perf + FlameGraph 火焰图流程

把 perf 采样导出后经 collapse 生成火焰图: 宽度代表采样占比, 层级代表调用栈, 用于整体归因。

BCC profile 生成 On-CPU 火焰图

profile 工具按栈采样并直接输出折叠格式, 省去 perf 导出步骤。

Off-CPU 火焰图定位等待

on-cpu 火焰图看不到阻塞; offcputime 按栈统计离开 CPU 的等待时间, 专治锁与 IO 等待。

bpftrace 入门与单行程序

bpftrace 用一行表达式描述内核事件统计, 适合临时观测: 运行到 Ctrl-C 后输出聚合结果。

bpftrace 常用一行速查

汇总高频单行: 按进程计数、按参数聚合与错误过滤, 覆盖日常快速观测。

bpftrace 直方图统计延迟

用 kprobe/kretprobe 配对测函数耗时, hist() 直接输出对数分布直方图。

bpftrace 追踪点浏览与使用

先列后查字段再写程序: tracepoint 稳定且带结构化参数, 是首选的观测点类型。

bpftrace 探针参数与返回值

kprobe 可用 argN 读取参数, kretprobe 用 retval 读取返回值; 用于没有追踪点的内核函数。

bpftrace 用户态探针

对应用二进制函数插桩, 观测用户态调用频率与返回耗时, 无需重启应用。

bpftrace On-CPU 采样

profile 探针按频率对运行中的 CPU 采样, 快速得到按栈的 CPU 占比。

BCC 工具集总览

BCC 提供一组开箱即用的 eBPF 工具, 覆盖进程、文件系统、块层、网络与调度观测。

execsnoop 短命进程追踪

捕获新进程的启动记录, 用于发现脚本拉起、定时任务与异常重试等难观测行为。

biolatency 块层延迟分布

按直方图统计块设备 IO 完成延迟, 判断存储侧延迟形态: 长尾还是整体抬高。

biosnoop 逐 IO 明细追踪

逐条显示块 IO 的进程、读写、扇区与延迟, 用于点名慢 IO 的来源进程。

ext4slower 慢文件操作追踪

只打印超过阈值的文件操作及其耗时, 定位偶发慢调用与涉及文件的进程。

runqlat 运行队列延迟分布

直方图展示任务可运行到实际获得 CPU 的等待, 直接反映调度侧压力。

offcputime 阻塞时间归因

按调用栈累计离开 CPU 的时间, 与 on-cpu 采样互补, 用于定位锁等待与 IO 阻塞。

tcpretrans TCP 重传追踪

实时打印发生重传的连接与地址, 把网络重传落到具体对端与状态。

没有匹配的条目。换个关键词试试,或直接全站搜索。
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌