Akemi

Linux内核参数与模块调整

2025/04/24

/proc文件系统

/proc 是 Linux 系统中的一个特殊目录,被称为 虚拟文件系统(Virtual File System)。它不占用物理磁盘空间,而是由内核动态生成,用于提供 系统运行时信息内核参数配置 的接口

  • 动态系统信息:实时反映硬件状态(如 CPU、内存、设备)、进程状态、内核行为等。
  • 内核参数调整:通过修改 /proc/sys 下的文件,动态调整内核行为(如网络、文件系统、内存管理)。
  • 调试与监控:开发者和管理员可直接读取文件或工具(如 topps)间接使用 /proc 数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(1) 系统全局信息
/proc/cpuinfo CPU 详细信息(型号、核心数、缓存、频率等)
/proc/meminfo 内存使用情况(总内存、空闲、缓存、Swap 等)
/proc/version 内核版本、编译信息(GCC 版本、编译时间)
/proc/loadavg 系统负载(1/5/15 分钟平均负载,运行队列任务数)
/proc/mounts 已挂载文件系统的列表(等价于 mount 命令输出)
/proc/devices 已注册的块设备和字符设备列表
/proc/interrupts 中断请求(IRQ)的统计信息(每个 CPU 的中断次数)
/proc/modules 已加载的内核模块列表(等价于 lsmod 命令)

(2) 进程信息(/proc/[PID]/)
/proc/[PID]/status 进程状态(UID、内存占用、信号状态等)
/proc/[PID]/cmdline 启动进程的命令行参数(以 \0 分隔)
/proc/[PID]/exe 进程可执行文件的符号链接(可直接执行,如 /proc/1234/exe)
/proc/[PID]/fd/ 进程打开的文件描述符(每个文件对应一个符号链接)
/proc/[PID]/cwd 进程当前工作目录的符号链接
/proc/[PID]/maps 进程内存映射(加载的共享库、堆栈地址等)

/proc/sys/实时内核调优

/proc/sys/ 是 Linux 系统中 动态调整内核参数 的核心接口目录,它允许用户或管理员在运行时直接修改内核的行为(如网络、内存、文件系统等模块的配置)

名称 默认值 备注
net.ipv4.ip_forward 0 控制是否启用 IPv4 数据包转发(路由器/NAT 需设为 1)。
net.ipv4.tcp_syncookies 1 防御 SYN Flood 攻击(1 启用)。
net.ipv4.icmp_echo_ignore_all 0 忽略所有 ICMP Echo 请求(1 启用后禁 ping)。
net.core.somaxconn 128 TCP 连接队列的最大长度(高并发服务建议调大,如 2048)。
vm.swappiness 60 0 尽量用物理内存,100 尽量用 Swap(redis相关)
vm.overcommit_memory 0 内存分配策略:
0 – 启发式超分配;
2 – 禁止超分配(严格模式)。
vm.drop_caches - 用以手动清理缓存
1 清页缓存
2 清目录项和 inode
3 清全部
fs.file-max - 系统全局最大文件句柄数(限制所有进程打开文件总数)
fs.inotify.max_user_watches 8192 单个用户可监控的文件/目录数量(用于 inotify 机制)。
kernel.panic 0 系统崩溃后自动重启的等待时间
(秒,0 禁用自动重启)。
kernel.pid_max 32768 系统允许的最大进程 PID 值
PID 耗尽会导致新进程无法创建。
vm.dirty_ratio 20 内存中脏页占比超过此值时,强制同步写入磁盘。
调整可平衡 I/O 性能与数据安全
vm.dirty_expire_centisecs 3000 脏页在内存中保留的最长时间(单位:百分之一秒,3000=30秒)。

修改内核参数sysctl

命令行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看当前值
cat /proc/sys/net/ipv4/ip_forward # 查看 IPv4 转发状态

# 临时修改参数
echo 1 > /proc/sys/net/ipv4/ip_forward # 启用 IPv4 转发

# 使用sysctl--非交互式

# 列出所有
sysctl -a

# 临时生效
sysctl -w net.ipv4.ip_forward=1

# 永久生效
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p # 重新加载配置

子配置文件修改方式(推荐)

1
2
3
4
5
6
7
8
子配置文件推荐放在三个目录下,优先级从高到低
一般推荐在/etc下
/etc/sysctl.d/*.conf
/run/sysctl.d/*.conf
/var/lib/sysctl.d/*.conf

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/net.conf
sysctl -p

/sys文件系统

是一个分离出来的文件目录,一般用来做内核模块的调整

加载内核模块modprobe

在一些第三方软件中,需要加载第三方的内核模块来支持软件运行

mod查看

1
2
3
4
5
6
7
8
9
10
11
# 查看当前mod
lsmod

# 查看模块信息
modinfo ip_tables

# 查看模块参数
modinfo -p loop
max_loop:Maximum number of loop devices
max_part:Maximum number of partitions per loop device (int)
hw_queue_depth:Queue depth for each hardware queue. Default: 128

mod加载

这个loop是一个不会预先加载的模块,只会在需要时自动加载,在lsmod也找不到,现在尝试提前加载它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 临时加载模块
modprobe loop

就可以查看到了
lsmod | grep loop
loop 40960 0
ls /sys/module/loop/
coresize initsize notes refcnt sections taint
holders initstate parameters rhelversion srcversion uevent

# 永久加载
echo "options loop max_loop=16" >> /etc/modprobe.d/loop.conf
modprobe loop

# 卸载模块
modprobe -r loop # 推荐
rmmod loop

mod参数调整

1
2
3
4
5
6
7
8
9
10
11
12
13
1.在子配置文件中直接修改然后重新加载
echo "options loop max_loop=8" >> /etc/modprobe.d/loop.conf
rmmod loop
modprobe loop

2.修改/sys/module中的参数(临时)
cat /sys/module/loop/parameters/max_loop
8
echo "1" > /sys/module/loop/parameters/max_loop

3.加载模块时直接指定(临时)
rmmod loop
modprobe loop max_loop=5
CATALOG
  1. 1. /proc文件系统
  2. 2. /proc/sys/实时内核调优
  3. 3. 修改内核参数sysctl
  4. 4. /sys文件系统
  5. 5. 加载内核模块modprobe