﻿# 内核调试与调优指南

## 一、常用sysctl内核参数调优

sysctl是一个用于在运行时配置Linux内核参数的工具，这些参数存储在`/proc/sys/`目录下。

### 1. 网络参数调优
```bash
# 增大TCP缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
# 启用TCP快速打开
sysctl -w net.ipv4.tcp_fastopen=3
# 增大连接队列长度
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# 减少TIME_WAIT数量
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_fin_timeout=30
# 启用SYN Cookies
sysctl -w net.ipv4.tcp_syncookies=1
# 启用BBR拥塞控制算法
sysctl -w net.ipv4.tcp_congestion_control=bbr
```

### 2. 内存参数调优
```bash
# 增大页缓存
sysctl -w vm.swappiness=10
sysctl -w vm.vfs_cache_pressure=50
# 启用透明大页（默认启用）
sysctl -w vm.transparent_hugepage=always
# 禁用透明大页（某些场景建议关闭）
sysctl -w vm.transparent_hugepage=never
# 增大OOM Killer阈值
sysctl -w vm.overcommit_memory=1
```

### 3. 内核参数持久化
将sysctl参数添加到`/etc/sysctl.conf`文件中，系统启动时会自动加载：
```bash
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf
sysctl -p
```

## 二、内核崩溃调试与panic分析

内核崩溃（panic）是指内核遇到无法恢复的错误时，会停止运行并打印调试信息。

### 1. 配置内核崩溃转储
```bash
# 启用内核崩溃转储
sysctl -w kernel.panic=10
sysctl -w kernel.core_pattern=/var/crash/core.%e.%p.%t
# 持久化配置
echo "kernel.panic=10" >> /etc/sysctl.conf
echo "kernel.core_pattern=/var/crash/core.%e.%p.%t" >> /etc/sysctl.conf
```

### 2. 分析内核崩溃转储文件
使用gdb和crash工具来分析内核崩溃转储文件：
```bash
# 安装crash工具
sudo apt install crash
# 分析内核崩溃转储文件
sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/core.*
```

### 3. 常见内核panic原因
- 空指针引用
- 内存访问越界
- 内核死锁
- 中断处理错误
- 驱动程序错误

## 三、硬件性能计数器（PMU）

> PMU 的硬件架构、事件选择机制、PEBS/IBS 精确采样、per-core vs uncore PMU 等内容已独立成篇，详见 [pmu.md](/concepts/cpu/pmu.md)。perf 工具的使用见 [perf.md](/tools/code/perf.md)。

## 四、参考资料
1. Linux内核官方文档：https://www.kernel.org/doc/html/latest/admin-guide/sysctl/
2. 《Linux内核调试与优化》 陈莉君
3. https://man7.org/linux/man-pages/man8/sysctl.8.html
4. https://www.intel.com/content/www/us/en/developer/articles/technical/intel-64-and-ia-32-architectures-software-developer-manual-325462.html
