/proc文件系统 /proc 是 Linux 系统中的一个特殊目录,被称为 虚拟文件系统 (Virtual File System)。它不占用物理磁盘空间,而是由内核动态生成,用于提供 系统运行时信息 和 内核参数配置 的接口
动态系统信息 :实时反映硬件状态(如 CPU、内存、设备)、进程状态、内核行为等。
内核参数调整 :通过修改 /proc/sys
下的文件,动态调整内核行为(如网络、文件系统、内存管理)。
调试与监控 :开发者和管理员可直接读取文件或工具(如 top
、ps
)间接使用 /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 echo 1 > /proc/sys/net/ipv4/ip_forward sysctl -a sysctl -w net.ipv4.ip_forward=1 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.confsysctl -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.confsysctl -p
/sys文件系统 是一个分离出来的文件目录,一般用来做内核模块的调整
加载内核模块modprobe 在一些第三方软件中,需要加载第三方的内核模块来支持软件运行
mod查看
1 2 3 4 5 6 7 8 9 10 11 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.confmodprobe 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.confrmmod loop modprobe loop 2.修改/sys/module中的参数(临时) cat /sys/module/loop/parameters/max_loop8 echo "1" > /sys/module/loop/parameters/max_loop3.加载模块时直接指定(临时) rmmod loop modprobe loop max_loop=5