procfs 详解

(0 comments)

Procfs 是 Linux 内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就可以直接对系统信息进行查取和调整。

同时 procfs 也提供了一个接口,使得其他内核模块或用户态程序可以通过 procfs 进行参数的传递。大量的系统工具也通过 procfs 获取内核参数,例如 ps、lspci 等等,没有 procfs 它们将可能不能正常工作。

为了支持 procfs,在编译内核时必须加上 procfs 的选项。

在内核源代码的 Documentation/filesystems/proc.txt 有 procfs 的详细说明。

挂载 Procfs

挂载 procfs 方式有两种,一般系统都在开机时直接加载。

1. 配置 /etc/fstab (大多数系统中默认)

none       /proc        proc    defaults        0 0

2. 使用命令加载(要求内核支持 procfs)

mount -t proc none /proc

调整内核参数

使用编辑工具或 cat 命令直接修改 /proc/sys 目录下的文件,调整是立即生效的,直到系统重启。

Sysctl

Sysctl 是从 BSD 系统继承而来的一种系统参数动态调整方法,修改 /etc/sysctl.conf 后在下次启动时自动生效。不过使用 sysctl -p 可以让改变立即生效。

Procfs 结构

Procfs 主要包含三大类部分:进程相关部分,系统信息部分,以及系统子系统部分。

  • 进程相关部分(只读)

处于 /proc 的顶层目录以数字为名的子目录,数字就是相关进程的进程 ID 号。

  • 内核信息部分(只读)

处于 /proc 的顶层目录的文件,主要是内核的基本信息。

  • 内核各子系统相关部分(部分可调)

非以数字命名的特殊目录,这包括内核各个重要子系统的信息和可调参数。

内核子系统

每个子目录就是一个内核子系统,主要内核子系统包括:

目录 描述
bus 总线信息(只读)
drivers 驱动信息(只读)
fs 文件系统特别信息(只读)
ide IDE 接口信息(只读)
irq IRQ 信息(只读)
net 网络子系统信息(只读)
scsi SCSI 子系统信息(只读)
sysvipc IPC 子系统信息(只读)
tty TTY 子系统信息(只读)
sys 系统内核可调参数(可调)

内核可调参数

大部分内核参数应该时只读,部分系统内核可调参数有:

目录 描述
/proc/sys/fs 文件系统数据
/proc/sys/kernel 通用系统参数
/proc/sys/vm 虚拟内存系统
/proc/sys/dev 设备相关参数
/proc/sys/sunrpc 远程过程调用
/proc/sys/net 网络子系统可调参数
/proc/sys/net/ipv4 IPV4 设置

系统信息

命令 说明
/proc/cpuinfo CPU
/proc/devices 设备驱动列表
/proc/dma 当前使用的 DMA通道
/proc/filesystems 核心配置的文件系统
/proc/interrupts 中断
/proc/ioports 设备 IO 端口
/proc/kcore 系统物理内存映象
/proc/loadavg 系统平均负载
/proc/meminfo 内存信息
/proc/modules 当前加载的核心模块
/proc/partitions 所有设备的所有分区
/proc/pci PCI 设备的信息
/proc/swaps 所有 swap 分区的信息
/proc/uptime 系统启动的时间长度
/proc/version Linux kernel 的版本号信息
/proc/cmdline 系统内核引导时的命令行参数

内核参数调整

内存子系统

网络子系统

  • 允许包转发
net.ipv4.ip_forward = 1
  • TCP buffer

为了优化客户端的网络访问性能,可以增加 TCP buffer 的大小。但是在访问频繁的服务器上调整这个参数会导致系统 buffer 被耗尽。

# increase Linux TCP buffer limits
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.rmem_default = 65536
net.core.wmem_default = 65536

# increase Linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.ipv4.tcp_mem = 8388608 8388608 8388608
Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required