proc(5) - Linux 手册页
名称
proc - 进程信息伪文件系统
描述
proc 文件系统是一个伪文件系统,用作内核数据结构的接口。它通常挂载在 /proc。大部分是只读的,但有些文件允许更改内核变量。
以下概要快速浏览 /proc 层次结构。
- /proc/[pid]
- 每个正在运行的进程都有一个数字子目录;子目录以进程 ID 命名。每个这样的子目录都包含以下伪文件和目录。
- /proc/[pid]/auxv (自 2.6.0-test7)
- 这包含在执行时传递给进程的 ELF 解释器信息的内容。格式是每个条目一个 unsigned long ID 加上一个 unsigned long 值。最后一个条目包含两个零。
- /proc/[pid]/cgroup (自 Linux 2.6.24)
- 此文件描述了进程/任务所属的控制组。对于每个 cgroup 层次结构,都有一个条目,其中包含以下形式的冒号分隔字段:
5:cpuacct,cpu,cpuset:/daemons
- 冒号分隔的字段,从左到右依次是
- 1.
层次结构 ID 号
2.
绑定到层次结构的一组子系统
3.
进程所属层次结构中的控制组
- 此文件仅在启用 CONFIG_CGROUPS 内核配置选项时才存在。
- /proc/[pid]/cmdline
- 这保存了进程的完整命令行,除非该进程是僵尸进程。在后一种情况下,此文件为空:即,读取此文件将返回 0 个字符。命令行参数在此文件中以由空字节 ('\0') 分隔的字符串集形式出现,最后一个字符串后还有一个空字节。
- /proc/[pid]/coredump_filter (自内核 2.6.23)
- 参见 core(5)。
- /proc/[pid]/cpuset (自内核 2.6.12)
- 参见 cpuset(7)。
- /proc/[pid]/cwd
- 这是一个指向进程当前工作目录的符号链接。例如,要查找进程 20 的当前工作目录,您可以这样做:
-
$ cd /proc/20/cwd; /bin/pwd
- 请注意,pwd 命令通常是 shell 内置命令,可能无法正常工作。在 bash(1) 中,您可以使用 pwd -P。
在多线程进程中,如果主线程已终止(通常通过调用 pthread_exit(3)),则此符号链接的内容不可用。
- /proc/[pid]/environ
- 此文件包含进程的环境变量。条目之间用空字节 ('\0') 分隔,末尾可能有一个空字节。因此,要打印进程 1 的环境变量,您可以这样做:
-
$ (cat /proc/1/environ; echo) | tr '\000' '\n'
- /proc/[pid]/exe
- 在 Linux 2.2 及更高版本中,此文件是一个符号链接,包含所执行命令的实际路径名。此符号链接可以正常解引用;尝试打开它将打开可执行文件。您甚至可以键入 /proc/[pid]/exe 来运行与进程 [pid] 正在运行的相同可执行文件的另一个副本。在多线程进程中,如果主线程已终止(通常通过调用 pthread_exit(3)),则此符号链接的内容不可用。
在 Linux 2.0 及更早版本中,/proc/[pid]/exe 是指向已执行二进制文件的指针,并显示为符号链接。在 Linux 2.0 下对此文件调用 readlink(2) 返回的字符串格式为:
[设备]:inode
例如,[0301]:1502 将是设备主号 03 (IDE、MFM 等驱动器) 次号 01 (第一个驱动器上的第一个分区) 上的 inode 1502。
可以使用带 -inum 选项的 find(1) 来定位文件。
- /proc/[pid]/fd
- 这是一个子目录,其中包含进程打开的每个文件的条目,以其文件描述符命名,并且是实际文件的符号链接。因此,0 是标准输入,1 是标准输出,2 是标准错误,等等。
在多线程进程中,如果主线程已终止(通常通过调用 pthread_exit(3)),则此目录的内容不可用。
如果程序将文件名作为命令行参数,但在未提供参数时不会从标准输入获取输入,或者写入以命令行参数命名的文件,但在未提供参数时不会将其输出发送到标准输出,那么仍然可以使用 /proc/[pid]/fd 来使用标准输入或标准输出。例如,假设 -i 是指定输入文件的标志,-o 是指定输出文件的标志:
-
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
- 并且您有一个可用的过滤器。
/proc/self/fd/N 大致与某些 UNIX 和类 UNIX 系统中的 /dev/fd/N 相同。实际上,大多数 Linux MAKEDEV 脚本将 /dev/fd 符号链接到 /proc/self/fd。
大多数系统提供符号链接 /dev/stdin、/dev/stdout 和 /dev/stderr,它们分别链接到 /proc/self/fd 中的文件 0、1 和 2。因此,上面的示例命令可以写成:
-
$ foobar -i /dev/stdin -o /dev/stdout ...
- /proc/[pid]/fdinfo/ (自内核 2.6.22)
- 这是一个子目录,其中包含进程打开的每个文件的条目,以其文件描述符命名。可以读取每个文件的内容以获取有关相应文件描述符的信息,例如:
-
$ cat /proc/12015/fdinfo/4 pos: 1000 flags: 01002002
- pos 字段是一个十进制数字,显示当前文件偏移量。flags 字段是一个八进制数字,显示文件访问模式和文件状态标志(参见 open(2))。
此目录中的文件只能由进程所有者读取。
- /proc/[pid]/limits (自内核 2.6.24)
- 此文件显示进程每个资源限制的软限制、硬限制和度量单位(参见 getrlimit(2))。在 Linux 2.6.35 及以前版本中,此文件受保护,只允许进程的真实 UID 读取。自 Linux 2.6.36 起,此文件可由系统上的所有用户读取。
- /proc/[pid]/maps
- 一个包含当前映射内存区域及其访问权限的文件。
格式为
address perms offset dev inode pathname 08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm 08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm 08058000-0805b000 rwxp 00000000 00:00 0 40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so 40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so 4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so 40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so 4013e000-40142000 rw-p 00000000 00:00 0 bffff000-c0000000 rwxp 00000000 00:00 0
其中 "address" 是进程占用的地址空间,"perms" 是一组权限r = read w = write x = execute s = shared p = private (copy on write)
"offset" 是文件/其他内容的偏移量,"dev" 是设备(主设备号:次设备号),"inode" 是该设备上的 inode。0 表示没有 inode 与内存区域关联,例如 BSS(未初始化数据)的情况。在 Linux 2.0 下没有提供路径名的字段。
- /proc/[pid]/mem
- 此文件可用于通过 open(2)、read(2) 和 lseek(2) 访问进程内存的页面。
- /proc/[pid]/mountinfo (自 Linux 2.6.26)
- 此文件包含有关挂载点的信息。它包含以下形式的行:
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue (1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
- 括号中的数字是下面描述的标签
- (1)
挂载 ID:挂载的唯一标识符(在 umount(2) 后可能会被重用)。
(2)
父 ID:父挂载的 ID(或挂载树顶部的自身的 ID)。
(3)
major:minor:文件系统上文件的 st_dev 值(参见 stat(2))。
(4)
root:文件系统内挂载的根。
(5)
挂载点:相对于进程根的挂载点。
(6)
挂载选项:每个挂载的选项。
(7)
可选字段:零个或多个形式为 "tag[:value]" 的字段。
(8)
分隔符:标记可选字段的结束。
(9)
文件系统类型:形式为 "type[.subtype]" 的文件系统名称。
(10)
挂载源:文件系统特定信息或 "none"。
(11)
超级选项:每个超级块的选项。
- 解析器应忽略所有无法识别的可选字段。目前可能的可选字段有:
- shared:X
挂载在对等组 X 中共享
master:X
挂载是 X 对等组的从属
propagate_from:X
挂载是从属并从对等组 X 接收传播 (*)
unbindable
不可解绑的挂载
- (*) X 是进程根目录下最近的优势对等组。如果 X 是挂载的直接主控,或者在同一根目录下没有优势对等组,则只存在 "master:X" 字段,而不存在 "propagate_from:X" 字段。
有关挂载传播的更多信息,请参阅 Linux 内核源代码树中的 Documentation/filesystems/sharedsubtree.txt。
- /proc/[pid]/mounts (自 Linux 2.4.19)
- 这是进程挂载命名空间中当前挂载的所有文件系统的列表。此文件的格式在 fstab(5) 中有文档说明。自内核版本 2.6.15 起,此文件可轮询:打开文件进行读取后,此文件中的更改(即文件系统挂载或卸载)会导致 select(2) 将文件描述符标记为可读,并且 poll(2) 和 epoll_wait(2) 将文件标记为存在错误情况。
- /proc/[pid]/mountstats (自 Linux 2.6.17)
- 此文件导出有关进程命名空间中挂载点的信息(统计数据、配置信息)。此文件中的行形式为:
device /dev/sda7 mounted on /home with fstype ext3 [statistics] ( 1 ) ( 2 ) (3 ) (4)
- 每行中的字段是:
- (1)
挂载设备的名称(如果不存在相应设备,则为 "nodevice")。
(2)
文件系统树中的挂载点。
(3)
文件系统类型。
(4)
可选的统计数据和配置信息。目前(截至 Linux 2.6.26),只有 NFS 文件系统通过此字段导出信息。
- 此文件只能由进程所有者读取。
- /proc/[pid]/ns/ (自 Linux 3.0)
- 这是一个子目录,其中包含每个支持通过 setns(2) 进行操作的命名空间的条目。有关命名空间的信息,请参见 clone(2)。
- /proc/[pid]/ns/ipc (自 Linux 3.0)
- 将此文件(参见 mount(2))绑定挂载到文件系统中的其他位置,即使命名空间中当前所有进程都终止,也能使由 pid 指定的进程的 IPC 命名空间保持活动。
打开此文件会返回由 pid 指定的进程的 IPC 命名空间的文件句柄。只要此文件描述符保持打开状态,IPC 命名空间就会保持活动,即使命名空间中的所有进程都终止。此文件描述符可以传递给 setns(2)。
- /proc/[pid]/ns/net (自 Linux 3.0)
- 将此文件(参见 mount(2))绑定挂载到文件系统中的其他位置,即使命名空间中所有进程都终止,也能使由 pid 指定的进程的网络命名空间保持活动。
打开此文件会返回由 pid 指定的进程的网络命名空间的文件句柄。只要此文件描述符保持打开状态,网络命名空间就会保持活动,即使命名空间中的所有进程都终止。此文件描述符可以传递给 setns(2)。
- /proc/[pid]/ns/uts (自 Linux 3.0)
- 将此文件(参见 mount(2))绑定挂载到文件系统中的其他位置,即使命名空间中当前所有进程都终止,也能使由 pid 指定的进程的 UTS 命名空间保持活动。
打开此文件会返回由 pid 指定的进程的 UTS 命名空间的文件句柄。只要此文件描述符保持打开状态,UTS 命名空间就会保持活动,即使命名空间中的所有进程都终止。此文件描述符可以传递给 setns(2)。
- /proc/[pid]/numa_maps (自 Linux 2.6.14)
- 参见 numa(7)。
- /proc/[pid]/oom_adj (自 Linux 2.6.11)
- 此文件可用于调整在内存不足(OOM)情况下选择要终止的进程所使用的分数。内核将此值用于进程 oom_score 值的位移操作:有效值的范围是 -16 到 +15,以及特殊值 -17,该值完全禁用此进程的 OOM 终止。正分数会增加此进程被 OOM 杀手终止的可能性;负分数会降低可能性。
- 此文件的默认值为 0;新进程会继承其父进程的 oom_adj 设置。进程必须具有特权(CAP_SYS_RESOURCE)才能更新此文件。
自 Linux 2.6.36 起,此文件的使用已被弃用,推荐使用 /proc/[pid]/oom_score_adj。
- /proc/[pid]/oom_score (自 Linux 2.6.11)
- 此文件显示内核为选择由 OOM 杀手终止的进程而赋予此进程的当前分数。分数越高意味着进程越有可能被 OOM 杀手选中。此分数的基础是进程使用的内存量,并根据以下因素增加 (+) 或减少 (-):
- *
进程是否使用 fork(2) 创建了大量子进程 (+);
*
进程是否已长时间运行,或者使用了大量 CPU 时间 (-);
*
进程的 nice 值是否较低(即 > 0)(+);
*
进程是否具有特权 (-); 以及
*
进程是否正在进行直接硬件访问 (-)。
- oom_score 也反映了进程的 oom_score_adj 或 oom_adj 设置所指定的调整。
- /proc/[pid]/oom_score_adj (自 Linux 2.6.36)
- 此文件可用于调整在内存不足情况下选择要终止的进程所使用的“糟糕程度启发式”评分。
“糟糕程度启发式”为每个候选任务分配一个从 0(永不终止)到 1000(总是终止)的值,以确定目标进程。单位大致是进程可以分配的允许内存范围内的一个比例,基于对其当前内存和交换使用情况的估计。例如,如果一个任务使用了所有允许的内存,其糟糕程度分数为 1000。如果它使用了一半允许的内存,其分数为 500。
糟糕程度分数中包含一个额外因素:root 进程比其他任务多获得 3% 的额外内存。
“允许”内存量取决于调用 OOM 杀手的上下文。如果原因是分配任务的 cpuset 分配的内存已耗尽,则允许内存代表分配给该 cpuset 的内存集(参见 cpuset(7))。如果原因是内存策略的 node(s) 已耗尽,则允许内存代表内存策略节点集。如果原因是达到了内存限制(或交换限制),则允许内存是该配置限制。最后,如果原因是整个系统内存不足,则允许内存代表所有可分配资源。
oom_score_adj 的值在用于确定要终止哪个任务之前被添加到糟糕程度分数中。可接受的值范围从 -1000 (OOM_SCORE_ADJ_MIN) 到 +1000 (OOM_SCORE_ADJ_MAX)。这允许用户空间控制 OOM 终止的偏好,范围从总是偏好某个任务到完全禁用其 OOM 终止。最低可能值 -1000 等同于完全禁用该任务的 OOM 终止,因为它将始终报告糟糕程度分数为 0。
因此,用户空间定义每个任务要考虑的内存量非常简单。例如,将 oom_score_adj 值设置为 +500,大致相当于允许共享相同系统、cpuset、内存策略或内存控制器资源的其余任务使用至少 50% 的额外内存。另一方面,值 -500 大致相当于将任务允许内存的 50% 从计入任务得分中扣除。
为了与早期内核的向后兼容性,/proc/[pid]/oom_adj 仍然可以用于调整糟糕程度分数。其值与 oom_score_adj 成线性比例。
写入 /proc/[pid]/oom_score_adj 或 /proc/[pid]/oom_adj 将以其缩放值改变另一个。
- /proc/[pid]/root
- UNIX 和 Linux 支持通过 chroot(2) 系统调用设置的每个进程的文件系统根目录的概念。此文件是一个指向进程根目录的符号链接,其行为与 exe、fd/* 等文件相同。
在多线程进程中,如果主线程已终止(通常通过调用 pthread_exit(3)),则此符号链接的内容不可用。
- /proc/[pid]/smaps (自 Linux 2.6.14)
- 此文件显示进程每个映射的内存消耗。每个映射都有一系列行,如下所示:
-
08048000-080bc000 r-xp 00000000 03:02 13130 /bin/bash Size: 464 kB Rss: 424 kB Shared_Clean: 424 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB
- 这些行中的第一行显示的信息与 /proc/[pid]/maps 中为映射显示的信息相同。其余行显示映射的大小、当前驻留在 RAM 中的映射量、映射中干净和脏的共享页数,以及映射中干净和脏的私有页数。
此文件仅在启用 CONFIG_MMU 内核配置选项时才存在。
- /proc/[pid]/stat
- 有关进程的状态信息。这由 ps(1) 使用。它定义在 /usr/src/linux/fs/proc/array.c 中。
这些字段按顺序排列,带有其适当的 scanf(3) 格式说明符,如下所示:
- pid %d
(1) 进程 ID。
comm %s
(2) 可执行文件的文件名,用括号括起来。无论可执行文件是否被换出,此项都可见。
state %c
(3) 字符串 "RSDZTW" 中的一个字符,其中 R 表示正在运行,S 表示在可中断等待中睡眠,D 表示在不可中断磁盘睡眠中等待,Z 表示僵尸,T 表示被跟踪或停止(收到信号),W 表示正在分页。
ppid %d
(4) 父进程的 PID。
pgrp %d
(5) 进程的进程组 ID。
session %d
(6) 进程的会话 ID。
tty_nr %d
(7) 进程的控制终端。(次设备号包含在位 31 到 20 和 7 到 0 的组合中;主设备号在位 15 到 8 中。)
tpgid %d
(8) 进程控制终端的前景进程组 ID。
- flags %u (在 Linux 2.6.22 之前为 %lu)
(9) 进程的内核标志字。有关位含义,请参见 Linux 内核源文件 include/linux/sched.h 中的 PF_* 定义。详细信息取决于内核版本。
- minflt %lu
(10) 进程发生的次要错误数,这些错误不需要从磁盘加载内存页。
cminflt %lu
(11) 进程等待的子进程发生的次要错误数。
majflt %lu
(12) 进程发生的主要错误数,这些错误需要从磁盘加载内存页。
cmajflt %lu
(13) 进程等待的子进程发生的主要错误数。
utime %lu
(14) 此进程在用户模式下调度的时间量,以时钟节拍(clock ticks)测量(除以 sysconf(_SC_CLK_TCK))。这包括 guest time,guest_time(运行虚拟 CPU 所花费的时间,见下文),以便不知道 guest time 字段的应用程序不会从其计算中丢失该时间。
stime %lu
(15) 此进程在内核模式下调度的时间量,以时钟节拍测量(除以 sysconf(_SC_CLK_TCK))。
cutime %ld
(16) 此进程等待的子进程在用户模式下调度的时间量,以时钟节拍测量(除以 sysconf(_SC_CLK_TCK))。 (另请参见 times(2)。)这包括 guest time,cguest_time(运行虚拟 CPU 所花费的时间,见下文)。
cstime %ld
(17) 此进程等待的子进程在内核模式下调度的时间量,以时钟节拍测量(除以 sysconf(_SC_CLK_TCK))。
- priority %ld
(18) (Linux 2.6 解释) 对于运行实时调度策略的进程(下面的 policy;参见 sched_setscheduler(2)),这是调度优先级的负值减一;即,一个在 -2 到 -100 范围内的数字,对应于实时优先级 1 到 99。对于在非实时调度策略下运行的进程,这是内核中表示的原始 nice 值(setpriority(2))。内核将 nice 值存储为 0(高)到 39(低)范围内的数字,对应于用户可见的 nice 范围 -20 到 19。
在 Linux 2.6 之前,这是一个基于为此进程分配的调度器权重的缩放值。
- nice %ld
(19) nice 值(参见 setpriority(2)),一个从 19(低优先级)到 -20(高优先级)范围内的值。
- num_threads %ld
(20) 此进程中的线程数(自 Linux 2.6)。在内核 2.6 之前,此字段被硬编码为 0,作为早期已删除字段的占位符。
- itrealvalue %ld
(21) 在下一个 SIGALRM 因间隔定时器发送到进程之前的 jiffies 时间。自内核 2.6.17 起,此字段不再维护,并被硬编码为 0。
- starttime %llu (在 Linux 2.6 之前为 %lu)
(22) 系统启动后进程启动的时间。在 Linux 2.6 之前的内核中,此值以 jiffies 表示。自 Linux 2.6 起,此值以时钟节拍表示(除以 sysconf(_SC_CLK_TCK))。
- vsize %lu
(23) 虚拟内存大小,以字节为单位。
rss %ld
(24) 驻留集大小(Resident Set Size):进程在实际内存中的页数。这仅计算文本、数据或栈空间占用的页。不包括尚未按需加载或已换出的页。
rsslim %lu
(25) 进程 RSS 的当前软限制,以字节为单位;参见 getrlimit(2) 中 RLIMIT_RSS 的描述。
- startcode %lu
(26) 程序代码可以运行的起始地址。
- endcode %lu
(27) 程序代码可以运行的结束地址。
- startstack %lu
(28) 栈的起始(即底部)地址。
- kstkesp %lu
(29) ESP(栈指针)的当前值,在进程的内核栈页中找到。
kstkeip %lu
(30) 当前 EIP(指令指针)。
signal %lu
(31) 待处理信号的位图,显示为十进制数字。已过时,因为它不提供实时信号的信息;请改用 /proc/[pid]/status。
blocked %lu
(32) 阻塞信号的位图,显示为十进制数字。已过时,因为它不提供实时信号的信息;请改用 /proc/[pid]/status。
- sigignore %lu
(33) 忽略信号的位图,显示为十进制数字。已过时,因为它不提供实时信号的信息;请改用 /proc/[pid]/status。
- sigcatch %lu
(34) 已捕获信号的位图,显示为十进制数字。已过时,因为它不提供实时信号的信息;请改用 /proc/[pid]/status。
- wchan %lu
(35) 这是进程正在等待的“通道”。它是系统调用的地址,如果您需要文本名称,可以在命名列表中查找。(如果您有最新的 /etc/psdatabase,那么尝试 ps -l 可以看到 WCHAN 字段的实际作用。)
nswap %lu
(36) 已换出页数(未维护)。
cnswap %lu
(37) 子进程的累积 nswap(未维护)。
- exit_signal %d (自 Linux 2.1.22)
(38) 当进程终止时发送给父进程的信号。
- processor %d (自 Linux 2.2.8)
(39) 最后执行的 CPU 号。
- rt_priority %u (自 Linux 2.5.19;在 Linux 2.6.22 之前为 %lu)
(40) 实时调度优先级,对于在实时策略下调度的进程,其范围为 1 到 99,对于非实时进程,则为 0(参见 sched_setscheduler(2))。
- policy %u (自 Linux 2.5.19;在 Linux 2.6.22 之前为 %lu)
(41) 调度策略(参见 sched_setscheduler(2))。使用 linux/sched.h 中的 SCHED_* 常量进行解码。
- delayacct_blkio_ticks %llu (自 Linux 2.6.18)
(42) 累计块 I/O 延迟,以时钟节拍(百分之一秒)测量。
- guest_time %lu (自 Linux 2.6.24)
(43) 进程的客机时间(为客机操作系统运行虚拟 CPU 所花费的时间),以时钟节拍测量(除以 sysconf(_SC_CLK_TCK))。
- cguest_time %ld (自 Linux 2.6.24)
(44) 进程子进程的客机时间,以时钟节拍测量(除以 sysconf(_SC_CLK_TCK))。
- /proc/[pid]/statm
- 提供有关内存使用情况的信息,以页为单位。列是:
-
size (1) total program size (same as VmSize in /proc/[pid]/status) resident (2) resident set size (same as VmRSS in /proc/[pid]/status) share (3) shared pages (i.e., backed by a file) text (4) text (code) lib (5) library (unused in Linux 2.6) data (6) data + stack dt (7) dirty pages (unused in Linux 2.6) - /proc/[pid]/status
- 以一种更易于人类解析的格式提供了 /proc/[pid]/stat 和 /proc/[pid]/statm 中的大部分信息。这是一个示例:
-
$ cat /proc/$$/status Name: bash State: S (sleeping) Tgid: 3515 Pid: 3515 PPid: 3452 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 100 100 100 100 FDSize: 256 Groups: 16 33 100 VmPeak: 9136 kB VmSize: 7896 kB VmLck: 0 kB VmHWM: 7572 kB VmRSS: 6316 kB VmData: 5224 kB VmStk: 88 kB VmExe: 572 kB VmLib: 1708 kB VmPTE: 20 kB Threads: 1 SigQ: 0/3067 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000010000 SigIgn: 0000000000384004 SigCgt: 000000004b813efb CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: 00000001 Cpus_allowed_list: 0 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 150 nonvoluntary_ctxt_switches: 545
- 字段如下
- *
Name: 此进程运行的命令。
*
State: 进程的当前状态。以下之一:"R
- (运行中)", "S (睡眠中)", "D (磁盘睡眠)", "T (已停止)", "T (跟踪停止)", "Z (僵尸)", 或 "X (已死亡)"。
- *
Tgid: 线程组 ID(即,进程 ID)。
*
Pid: 线程 ID(参见 gettid(2))。
*
PPid: 父进程的 PID。
*
TracerPid: 跟踪此进程的进程的 PID(如果未被跟踪则为 0)。
*
Uid, Gid: 真实、有效、保存的集合以及文件系统 UID(GID)。
- *
FDSize: 当前已分配的文件描述符槽位数。
*
Groups: 辅助组列表。
*
VmPeak: 峰值虚拟内存大小。
*
VmSize: 虚拟内存大小。
*
VmLck: 锁定内存大小(参见 mlock(3))。
*
VmHWM: 峰值驻留集大小("高水位线")。
*
VmRSS: 驻留集大小。
*
VmData, VmStk, VmExe: 数据、栈和文本段的大小。
*
VmLib: 共享库代码大小。
*
VmPTE: 页表条目大小(自 Linux 2.6.10)。
*
Threads: 包含此线程的进程中的线程数。
*
SigQ: 此字段包含两个斜杠分隔的数字,它们与此进程的真实用户 ID 的排队信号有关。第一个是此真实用户 ID 当前排队信号的数量,第二个是此进程排队信号数量的资源限制(参见 getrlimit(2) 中 RLIMIT_SIGPENDING 的描述)。
*
SigPnd, ShdPnd: 线程和整个进程待处理信号的数量(参见 pthreads(7) 和 signal(7))。
*
SigBlk, SigIgn, SigCgt: 表示信号被阻塞、忽略和捕获的掩码(参见 signal(7))。
*
CapInh, CapPrm, CapEff: 在可继承、允许和有效集中启用的能力的掩码(参见 capabilities(7))。
*
CapBnd: 能力边界集(自内核 2.6.26,参见 capabilities(7))。
*
Cpus_allowed: 此进程可以运行的 CPU 掩码(自 Linux 2.6.24,参见 cpuset(7))。
*
Cpus_allowed_list: 与前一个相同,但采用“列表格式”(自 Linux 2.6.26,参见 cpuset(7))。
*
Mems_allowed: 允许此进程访问的内存节点掩码(自 Linux 2.6.24,参见 cpuset(7))。
*
Mems_allowed_list: 与前一个相同,但采用“列表格式”(自 Linux 2.6.26,参见 cpuset(7))。
*
voluntary_context_switches, nonvoluntary_context_switches: 自愿和非自愿上下文切换次数(自 Linux 2.6.23)。
- /proc/[pid]/task (自 Linux 2.6.0-test6)
- 这是一个目录,其中包含进程中每个线程的一个子目录。每个子目录的名称是线程的数字线程 ID ([tid])(参见 gettid(2))。在这些子目录中,有一组文件具有与 /proc/[pid] 目录下相同的文件名和内容。对于所有线程共享的属性,task/[tid] 子目录下的每个文件的内容将与父 /proc/[pid] 目录中相应文件的内容相同(例如,在多线程进程中,所有 task/[tid]/cwd 文件都将具有与父目录中的 /proc/[pid]/cwd 文件相同的值,因为进程中的所有线程共享一个工作目录)。对于每个线程不同的属性,task/[tid] 下的相应文件可能具有不同的值(例如,每个 task/[tid]/status 文件中的各种字段可能因线程而异)。
在多线程进程中,如果主线程已终止(通常通过调用 pthread_exit(3)),则 /proc/[pid]/task 目录的内容不可用。
- /proc/apm
- 在内核编译时定义 CONFIG_APM 后,可获取高级电源管理版本和电池信息。
- /proc/bus
- 包含已安装总线的子目录。
- /proc/bus/pccard
- 在内核编译时设置 CONFIG_PCMCIA 后,用于 PCMCIA 设备的子目录。
- /proc/bus/pccard/drivers
- /proc/bus/pci
- 包含各种总线子目录和伪文件,其中包含有关 PCI 总线、已安装设备和设备驱动程序的信息。其中一些文件不是 ASCII 格式。
- /proc/bus/pci/devices
- 有关 PCI 设备的信息。可以通过 lspci(8) 和 setpci(8) 访问它们。
- /proc/cmdline
- 启动时传递给 Linux 内核的参数。通常通过启动管理器(如 lilo(8) 或 grub(8))完成。
- /proc/config.gz (自 Linux 2.6)
- 此文件公开了用于构建当前运行内核的配置选项,其格式与配置内核时(使用 make xconfig、make config 或类似命令)生成的 .config 文件中显示的一致。文件内容是压缩的;可以使用 zcat(1)、zgrep(1) 等命令查看或搜索它们。只要以下文件未更改,/proc/config.gz 的内容与以下文件提供的内容相同:
-
cat /lib/modules/$(uname -r)/build/.config
- 仅当内核配置了 CONFIG_IKCONFIG_PROC 时,才提供 /proc/config.gz。
- /proc/cpuinfo
- 这是 CPU 和系统架构相关项的集合,每个受支持的架构都有不同的列表。两个常见条目是 processor(给出 CPU 编号)和 bogomips;一个在内核初始化期间计算的系统常量。SMP 机器为每个 CPU 都有信息。lscpu(1) 命令从该文件获取其信息。
- /proc/devices
- 主设备号和设备组的文本列表。MAKEDEV 脚本可以使用此信息以与内核保持一致。
- /proc/diskstats (自 Linux 2.5.69)
- 此文件包含每个磁盘设备的磁盘 I/O 统计信息。有关详细信息,请参阅 Linux 内核源文件 Documentation/iostats.txt。
- /proc/dma
- 这是正在使用的已注册 ISA DMA(直接内存访问)通道的列表。
- /proc/driver
- 空子目录。
- /proc/execdomains
- 执行域(ABI 个性)列表。
- /proc/fb
- 在内核编译期间定义 CONFIG_FB 时的帧缓冲信息。
- /proc/filesystems
- 内核支持的文件系统的文本列表,即已编译到内核中的文件系统或其内核模块当前已加载的文件系统。(另请参见 filesystems(5)。)如果文件系统标记为 "nodev",这意味着它不需要块设备即可挂载(例如,虚拟文件系统、网络文件系统)。
顺便提一下,当未指定文件系统且无法确定文件系统类型时,mount(8) 可能会使用此文件。然后会尝试此文件中包含的文件系统(标记为 "nodev" 的除外)。
- /proc/fs
- 空子目录。
- /proc/ide
- 此目录存在于带有 IDE 总线的系统上。每个 IDE 通道和连接的设备都有目录。文件包括:
-
cache buffer size in KB capacity number of sectors driver driver version geometry physical and logical geometry identify in hexadecimal media media type model manufacturer's model number settings drive settings smart_thresholds in hexadecimal smart_values in hexadecimal
- hdparm(8) 实用程序以友好的格式提供对此信息的访问。
- /proc/interrupts
- 这用于记录每个 CPU 每个 IO 设备的 interrupts 次数。自 Linux 2.6.24 起,对于 i386 和 x86_64 架构至少如此,这还包括系统内部中断(即,不与设备本身关联),例如 NMI(不可屏蔽中断)、LOC(本地定时器中断),对于 SMP 系统,还有 TLB(TLB 刷新中断)、RES(重新调度中断)、CAL(远程函数调用中断)以及其他可能的中断。格式非常易读,以 ASCII 编码。
- /proc/iomem
- Linux 2.4 中的 I/O 内存映射。
- /proc/ioports
- 这是正在使用的当前已注册的输入-输出端口区域列表。
- /proc/kallsyms (自 Linux 2.5.71)
- 这保存了由 modules(X) 工具用于动态链接和绑定可加载模块的内核导出符号定义。在 Linux 2.5.47 及更早版本中,一个语法略有不同的类似文件名为 ksyms。
- /proc/kcore
- 此文件表示系统的物理内存,并以 ELF 核心文件格式存储。通过此伪文件和未剥离的内核 (/usr/src/linux/vmlinux) 二进制文件,GDB 可用于检查任何内核数据结构的当前状态。
文件的总长度是物理内存 (RAM) 大小加上 4KB。
- /proc/kmsg
- 此文件可用于代替 syslog(2) 系统调用来读取内核消息。进程必须具有超级用户权限才能读取此文件,并且只能由一个进程读取此文件。如果正在运行使用 syslog(2) 系统调用设施记录内核消息的 syslog 进程,则不应读取此文件。
此文件中的信息通过 dmesg(1) 程序检索。
- /proc/ksyms (Linux 1.1.23-2.5.47)
- 参见 /proc/kallsyms。
- /proc/loadavg
- 此文件中的前三个字段是负载平均值,表示在运行队列中(状态 R)或等待磁盘 I/O(状态 D)的作业数,分别平均计算 1、5 和 15 分钟。它们与 uptime(1) 和其他程序给出的负载平均值相同。第四个字段由两个用斜杠 (/) 分隔的数字组成。第一个是当前可运行的内核调度实体(进程、线程)的数量。斜杠后的值是当前系统上存在的内核调度实体的数量。第五个字段是系统上最近创建的进程的 PID。
- /proc/locks
- 此文件显示当前的文件锁(flock(2) 和 fcntl(2))和租约(fcntl(2))。
- /proc/malloc (仅适用于 Linux 2.2 及更早版本)
- 此文件仅在编译期间定义了 CONFIG_DEBUG_MALLOC 时才存在。
- /proc/meminfo
- 此文件报告系统内存使用情况的统计信息。它由 free(1) 使用,以报告系统上的空闲和已用内存量(包括物理内存和交换内存),以及内核使用的共享内存和缓冲区。文件的每一行由参数名称、冒号、参数值以及可选的度量单位(例如 "kB")组成。下面的列表描述了参数名称以及读取字段值所需的格式说明符。除非另有说明,所有字段自 Linux 2.6.0 起就已存在。某些字段仅在内核配置了各种选项时才显示;这些依赖关系在列表中注明。
- MemTotal %lu
总可用 RAM(即物理 RAM 减去一些保留位和内核二进制代码)。
- MemFree %lu
LowFree+HighFree 的总和。
- Buffers %lu
用于原始磁盘块的相对临时存储,不应变得非常大(大约 20MB)。
- Cached %lu
从磁盘读取的文件(页缓存)的内存中缓存。不包括 SwapCached。
- SwapCached %lu
曾经被换出,又被换回但仍存在于交换文件中的内存。(如果内存压力很高,这些页面不需要再次换出,因为它们已经存在于交换文件中。这节省了 I/O。)
- Active %lu
最近使用过且通常除非绝对必要才会被回收的内存。
- Inactive %lu
较少使用过的内存。它更有可能被回收用于其他目的。
- Active(anon) %lu (自 Linux 2.6.28)
[待补充文档。]
- Inactive(anon) %lu (自 Linux 2.6.28)
[待补充文档。]
- Active(file) %lu (自 Linux 2.6.28)
[待补充文档。]
- Inactive(file) %lu (自 Linux 2.6.28)
[待补充文档。]
- Unevictable %lu (自 Linux 2.6.28)
(从 Linux 2.6.28 到 2.6.30,需要 CONFIG_UNEVICTABLE_LRU。) [待补充文档。]
- Mlocked %lu (自 Linux 2.6.28)
(从 Linux 2.6.28 到 2.6.30,需要 CONFIG_UNEVICTABLE_LRU。) [待补充文档。]
- HighTotal %lu
(自 Linux 2.6.19 起,需要 CONFIG_HIGHMEM。) 高端内存(highmem)总量。高端内存是物理内存中大约 860MB 以上的所有内存。高端内存区域供用户空间程序或页面缓存使用。内核必须使用技巧来访问此内存,使其访问速度慢于低端内存(lowmem)。
- HighFree %lu
(自 Linux 2.6.19 起,需要 CONFIG_HIGHMEM。) 空闲高端内存量。
- LowTotal %lu
(自 Linux 2.6.19 起,需要 CONFIG_HIGHMEM。) 低端内存(lowmem)总量。低端内存可用于高端内存可用于的所有用途,但也可用供内核用于其自身数据结构。在许多其他方面,所有 Slab 都从这里分配。当低端内存不足时,会发生不好的事情。
- LowFree %lu
(自 Linux 2.6.19 起,需要 CONFIG_HIGHMEM。) 空闲低端内存量。
- MmapCopy %lu (自 Linux 2.6.29)
(需要 CONFIG_MMU。) [待补充文档。]
- SwapTotal %lu
可用交换空间总量。
- SwapFree %lu
当前未使用的交换空间量。
- Dirty %lu
等待被写回磁盘的内存。
- Writeback %lu
正在积极写回磁盘的内存。
- AnonPages %lu (自 Linux 2.6.18)
映射到用户空间页表的非文件支持页。
- Mapped %lu
已通过 mmap 映射的文件,例如库。
- Shmem %lu (自 Linux 2.6.32)
[待补充文档。]
- Slab %lu
内核内部数据结构缓存。
- SReclaimable %lu (自 Linux 2.6.19)
Slab 的一部分,可能被回收,例如缓存。
- SUnreclaim %lu (自 Linux 2.6.19)
Slab 的一部分,在内存压力下无法回收。
- KernelStack %lu (自 Linux 2.6.32)
分配给内核栈的内存量。
- PageTables %lu (自 Linux 2.6.18)
分配给最低级别页表的内存量。
- Quicklists %lu (自 Linux 2.6.27)
(需要 CONFIG_QUICKLIST。) [待补充文档。]
- NFS_Unstable %lu (自 Linux 2.6.18)
发送到服务器但尚未提交到稳定存储的 NFS 页面。
- Bounce %lu (自 Linux 2.6.18)
用于块设备“bounce buffers”的内存。
- WritebackTmp %lu (自 Linux 2.6.26)
FUSE 用于临时写回缓冲区的内存。
- CommitLimit %lu (自 Linux 2.6.10)
基于过量提交比率 ('vm.overcommit_ratio'),这是系统当前可分配的内存总量。此限制仅在启用严格过量提交记账时才有效(/proc/sys/vm/overcommit_ratio 中的模式 2)。CommitLimit 使用以下公式计算:
CommitLimit = (overcommit_ratio * 物理 RAM) + 交换空间
例如,在一个具有 1GB 物理 RAM 和 7GB 交换空间,且 overcommit_ratio 为 30 的系统上,此公式得出 CommitLimit 为 7.3GB。有关更多详细信息,请参阅内核源文件 Documentation/vm/overcommit-accounting 中的内存过量提交文档。
- Committed_AS %lu
系统当前已分配的内存量。已提交内存是进程已分配的所有内存的总和,即使它们尚未“使用”这些内存。一个分配了 1GB 内存(使用 malloc(3) 或类似方法),但只触及其中 300MB 的进程,即使它已为整个 1GB 分配了地址空间,也只会显示为使用了 300MB 内存。这 1GB 内存是 VM“提交”的内存,分配应用程序可以随时使用。在系统上启用严格过量提交(/proc/sys/vm/overcommit_memory 中的模式 2)时,将不允许超出 CommitLimit(如上所述)的分配。如果需要保证进程在内存成功分配后不会因内存不足而失败,这会很有用。
- VmallocTotal %lu
vmalloc 内存区域的总大小。
- VmallocUsed %lu
已使用的 vmalloc 区域量。
- VmallocChunk %lu
空闲 vmalloc 区域中最大的连续块。
- HardwareCorrupted %lu (自 Linux 2.6.32)
(需要 CONFIG_MEMORY_FAILURE。) [待补充文档。]
- AnonHugePages %lu (自 Linux 2.6.38)
(需要 CONFIG_TRANSPARENT_HUGEPAGE。) 映射到用户空间页表的非文件支持的巨页。
- HugePages_Total %lu
(需要 CONFIG_HUGETLB_PAGE。) 巨页池的大小。
- HugePages_Free %lu
(需要 CONFIG_HUGETLB_PAGE。) 池中尚未分配的巨页数量。
- HugePages_Rsvd %lu (自 Linux 2.6.17)
(需要 CONFIG_HUGETLB_PAGE。) 这是已承诺从巨页池中分配,但尚未实际分配的巨页数量。这些保留的巨页保证应用程序能够在发生错误时从巨页池中分配到一个巨页。
- HugePages_Surp %lu (自 Linux 2.6.24)
(需要 CONFIG_HUGETLB_PAGE。) 这是池中超出 /proc/sys/vm/nr_hugepages 值以外的巨页数量。过剩巨页的最大数量由 /proc/sys/vm/nr_overcommit_hugepages 控制。
- Hugepagesize %lu
(需要 CONFIG_HUGETLB_PAGE。) 巨页的大小。
- /proc/modules
- 系统已加载模块的文本列表。另请参见 lsmod(8)。
- /proc/mounts
- 在内核 2.4.19 之前,此文件是系统上当前所有已挂载文件系统的列表。随着 Linux 2.4.19 中引入每进程挂载命名空间,此文件成为 /proc/self/mounts 的链接,后者列出进程自身挂载命名空间的挂载点。此文件的格式在 fstab(5) 中有文档说明。
- /proc/mtrr
- 内存类型范围寄存器。有关详细信息,请参阅 Linux 内核源文件 Documentation/mtrr.txt。
- /proc/net
- 各种网络伪文件,所有这些文件都提供了网络层某个部分的状况。这些文件包含 ASCII 结构,因此可以使用 cat(1) 读取。但是,标准的 netstat(8) 套件提供了更清晰的访问这些文件的方式。
- /proc/net/arp
- 这保存了内核 ARP 表的 ASCII 可读转储,用于地址解析。它将显示动态学习的和预编程的 ARP 条目。格式为:
IP address HW type Flags HW address Mask Device 192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0 192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
这里“IP address”是机器的 IPv4 地址,“HW type”是 RFC 826 中地址的硬件类型。标志是 ARP 结构的内部标志(如 /usr/include/linux/if_arp.h 中定义),“HW address”是如果已知该 IP 地址的数据链路层映射。 - /proc/net/dev
- dev 伪文件包含网络设备状态信息。这给出了接收和发送的数据包数量、错误和冲突数量以及其他基本统计数据。这些信息由 ifconfig(8) 程序用于报告设备状态。格式为:
Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0 eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0 ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0 tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
- /proc/net/dev_mcast
- 定义于 /usr/src/linux/net/core/dev_mcast.c
indx interface_name dmi_u dmi_g dmi_address 2 eth0 1 0 01005e000001 3 eth1 1 0 01005e000001 4 eth2 1 0 01005e000001
- /proc/net/igmp
- Internet 组管理协议。定义于 /usr/src/linux/net/core/igmp.c。
- /proc/net/rarp
- 此文件使用与 arp 文件相同的格式,并包含用于提供 rarp(8) 反向地址查找服务的当前反向映射数据库。如果内核中未配置 RARP,则此文件将不存在。
- /proc/net/raw
- 保存 RAW 套接字表的转储。除调试外,大部分信息用途不大。“sl”值是套接字的内核哈希槽,“local_address”是本地地址和协议号对。“St”是套接字的内部状态。“tx_queue”和“rx_queue”是按内核内存使用量计算的出站和入站数据队列。“tr”、“tm->when”和“rexmits”字段不被 RAW 使用。“uid”字段保存套接字创建者的有效 UID。
- /proc/net/snmp
- 此文件保存 SNMP 代理的 IP、ICMP、TCP 和 UDP 管理信息库所需的 ASCII 数据。
- /proc/net/tcp
- 保存 TCP 套接字表的转储。除调试外,大部分信息用途不大。“sl”值是套接字的内核哈希槽,“local_address”是本地地址和端口号对。“rem_address”是远程地址和端口号对(如果已连接)。“St”是套接字的内部状态。“tx_queue”和“rx_queue”是按内核内存使用量计算的出站和入站数据队列。“tr”、“tm->when”和“rexmits”字段保存内核套接字状态的内部信息,仅用于调试。“uid”字段保存套接字创建者的有效 UID。
- /proc/net/udp
- 保存 UDP 套接字表的转储。除调试外,大部分信息用途不大。“sl”值是套接字的内核哈希槽,“local_address”是本地地址和端口号对。“rem_address”是远程地址和端口号对(如果已连接)。“St”是套接字的内部状态。“tx_queue”和“rx_queue”是按内核内存使用量计算的出站和入站数据队列。“tr”、“tm->when”和“rexmits”字段不被 UDP 使用。“uid”字段保存套接字创建者的有效 UID。格式为:
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid 1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0 1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0 1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
- /proc/net/unix
- 列出系统中存在的 UNIX 域套接字及其状态。格式为:
Num RefCount Protocol Flags Type St Path 0: 00000002 00000000 00000000 0001 03 1: 00000001 00000000 00010000 0001 01 /dev/printer
这里“Num”是内核表槽位号,“RefCount”是套接字用户数,“Protocol”目前始终为 0,“Flags”表示保存套接字状态的内部内核标志。目前,类型始终为“1”(内核尚不支持 UNIX 域数据报套接字)。“St”是套接字的内部状态,Path 是套接字的绑定路径(如果有)。 - /proc/partitions
- 包含每个分区的主次设备号,以及块数和分区名称。
- /proc/pci
- 这是内核初始化期间发现的所有 PCI 设备及其配置的列表。
此文件已被弃用,取而代之的是用于 PCI 的新 /proc 接口 (/proc/bus/pci)。它在 Linux 2.2 中成为可选(在内核编译时设置 CONFIG_PCI_OLD_PROC 可用)。在 Linux 2.4 中再次非可选启用。接下来,在 Linux 2.6 中被弃用(仍可通过设置 CONFIG_PCI_LEGACY_PROC 使用),并最终自 Linux 2.6.17 起完全移除。
- /proc/profile (自 Linux 2.4)
- 此文件仅在内核以 profile=1 命令行选项启动时才存在。它以二进制格式公开内核性能分析信息,供 readprofile(1) 使用。向此文件写入(例如,一个空字符串)会重置性能分析计数器;在某些架构上,写入一个大小为 sizeof(int) 的二进制整数“性能分析乘数”会设置性能分析中断频率。
- /proc/scsi
- 一个目录,包含 scsi 中级伪文件和各种 SCSI 低级驱动程序目录,这些目录包含此系统中每个 SCSI 主机的文件,所有这些文件都给出了 SCSI IO 子系统某个部分的状况。这些文件包含 ASCII 结构,因此可以使用 cat(1) 读取。
您还可以写入某些文件以重新配置子系统或打开/关闭某些功能。
- /proc/scsi/scsi
- 这是内核已知的所有 SCSI 设备的列表。该列表类似于启动时看到的列表。scsi 当前仅支持 add-single-device 命令,该命令允许 root 将热插拔设备添加到已知设备列表中。
命令
-
echo 'scsi add-single-device 1 0 5 0' > /proc/scsi/scsi
- 将导致主机 scsi1 在 SCSI 通道 0 上扫描 ID 5 LUN 0 上的设备。如果此地址上已存在已知设备或地址无效,将返回错误。
- /proc/scsi/[drivername]
- [drivername] 当前可以是 NCR53c7xx、aha152x、aha1542、aha1740、aic7xxx、buslogic、eata_dma、eata_pio、fdomain、in2000、pas16、qlogic、scsi_debug、seagate、t128、u15-24f、ultrastore 或 wd7000。这些目录会显示注册了至少一个 SCSI HBA 的所有驱动程序。每个目录包含每个注册主机的一个文件。每个主机文件都以初始化期间分配给主机的编号命名。
读取这些文件通常会显示驱动程序和主机配置、统计信息等。
写入这些文件允许在不同的主机上执行不同的操作。例如,使用 latency 和 nolatency 命令,root 可以在 eata_dma 驱动程序中打开和关闭命令延迟测量代码。使用 lockup 和 unlock 命令,root 可以控制由 scsi_debug 驱动程序模拟的总线死锁。
- /proc/self
- 此目录指代访问 /proc 文件系统的进程,并且与以相同进程的进程 ID 命名的 /proc 目录相同。
- /proc/slabinfo
- 有关内核缓存的信息。自 Linux 2.6.16 起,此文件仅在启用 CONFIG_SLAB 内核配置选项时才存在。/proc/slabinfo 中的列是:
-
cache-name num-active-objs total-objs object-size num-active-slabs total-slabs num-pages-per-slab
- 有关详细信息,请参见 slabinfo(5)。
- /proc/stat
- 内核/系统统计信息。因架构而异。常见条目包括:
- cpu 3357 0 4313 1362393
系统在各种状态下花费的时间量,以 USER_HZ 单位测量(在大多数架构上为 1/100 秒,使用 sysconf(_SC_CLK_TCK) 获取正确值):
user
(1) 在用户模式下花费的时间。
nice
(2) 在用户模式下以低优先级 (nice) 花费的时间。
system
(3) 在系统模式下花费的时间。
idle
(4) 在空闲任务中花费的时间。此值应为 USER_HZ 乘以 /proc/uptime 伪文件中的第二个条目。
iowait (自 Linux 2.5.41)
(5) 等待 I/O 完成的时间。
irq (自 Linux 2.6.0-test4)
(6) 处理中断的时间。
softirq (自 Linux 2.6.0-test4)
(7) 处理软中断的时间。
steal (自 Linux 2.6.11)
(8) 被窃取时间,即在虚拟化环境中运行时在其他操作系统中花费的时间
guest (自 Linux 2.6.24)
(9) 在 Linux 内核控制下为客机操作系统运行虚拟 CPU 所花费的时间。
guest_nice (自 Linux 2.6.33)
(10) 运行 nice 过的客机(在 Linux 内核控制下为客机操作系统运行虚拟 CPU)所花费的时间。
- page 5741 1808
系统换入的页数和换出(从磁盘)的页数。
- swap 1 0
已换入和换出的交换页数量。
- intr 1462898
此行显示自启动时间以来处理的中断计数,针对每个可能的系统中断。第一列是处理的所有中断的总数;后续每一列是特定中断的总数。
- disk_io: (2,0):(31,30,5764,1,2) (3,0)...
(主设备号,磁盘索引):(无信息, 读取IO操作数, 读取块数, 写入IO操作数, 写入块数)
(仅限 Linux 2.4)
- ctxt 115315
系统发生的上下文切换次数。
- btime 769041601
启动时间,自 Unix 纪元(1970-01-01 00:00:00 +0000 (UTC))以来的秒数。
- processes 86031
自启动以来的 fork 数量。
- procs_running 6
处于可运行状态的进程数。(Linux 2.5.45 及更高版本。)
- procs_blocked 2
因等待 I/O 完成而阻塞的进程数。(Linux 2.5.45 及更高版本。)
- /proc/swaps
- 正在使用的交换区域。另请参见 swapon(8)。
- /proc/sys
- 此目录(自 1.3.57 版起存在)包含与内核变量对应的多个文件和子目录。可以使用 /proc 文件系统和(已弃用的)sysctl(2) 系统调用读取和有时修改这些变量。
- /proc/sys/abi (自 Linux 2.4.10)
- 此目录可能包含带有应用程序二进制信息的文件。有关更多信息,请参阅 Linux 内核源文件 Documentation/sysctl/abi.txt。
- /proc/sys/debug
- 此目录可能为空。
- /proc/sys/dev
- 此目录包含设备特定信息(例如,dev/cdrom/info)。在某些系统上,它可能为空。
- /proc/sys/fs
- 此目录包含与文件系统相关的内核变量的文件和子目录。
- /proc/sys/fs/binfmt_misc
- 此目录中文件的文档可在 Linux 内核源代码 Documentation/binfmt_misc.txt 中找到。
- /proc/sys/fs/dentry-state (自 Linux 2.2)
- 此文件包含有关目录缓存 (dcache) 状态的信息。该文件包含六个数字:nr_dentry、nr_unused、age_limit(以秒为单位的年龄)、want_pages(系统请求的页数)和两个虚拟值。
- *
nr_dentry 是已分配的 dentry(dcache 条目)的数量。此字段在 Linux 2.2 中未使用。
*
nr_unused 是未使用的 dentry 数量。
*
age_limit 是当内存不足时,dcache 条目可以被回收的秒数。
*
当内核已调用 shrink_dcache_pages() 且 dcache 尚未修剪时,want_pages 为非零。
- /proc/sys/fs/dir-notify-enable
- 此文件可用于在系统范围内禁用或启用 fcntl(2) 中描述的 dnotify 接口。此文件中的值 0 会禁用该接口,值 1 会启用它。
- /proc/sys/fs/dquot-max
- 此文件显示最大缓存磁盘配额条目数。在某些 (2.4) 系统上,它可能不存在。如果空闲缓存磁盘配额条目数量非常少,并且您有大量并发系统用户,您可能需要提高此限制。
- /proc/sys/fs/dquot-nr
- 此文件显示已分配的磁盘配额条目数和空闲磁盘配额条目数。
- /proc/sys/fs/epoll (自 Linux 2.6.28)
- 此目录包含文件 max_user_watches,可用于限制 epoll 接口消耗的内核内存量。有关详细信息,请参见 epoll(7)。
- /proc/sys/fs/file-max
- 此文件定义了所有进程打开文件数量的系统范围限制。(另请参见 setrlimit(2),进程可使用它来设置每个进程打开文件数量的限制 RLIMIT_NOFILE。)如果您在内核日志中看到大量关于文件句柄耗尽的错误消息(查找 "VFS: file-max limit <number> reached"),请尝试增加此值。
echo 100000 > /proc/sys/fs/file-max
内核常量 NR_OPEN 对可放入 file-max 的值施加了上限。如果您增加 /proc/sys/fs/file-max,请务必将 /proc/sys/fs/inode-max 增加到 /proc/sys/fs/file-max 新值的 3-4 倍,否则您将耗尽 inode。
特权进程(CAP_SYS_ADMIN)可以覆盖 file-max 限制。
- /proc/sys/fs/file-nr
- 此(只读)文件包含三个数字:已分配文件句柄的数量(即当前打开的文件数量);空闲文件句柄的数量;以及文件句柄的最大数量(即与 /proc/sys/fs/file-max 相同的值)。如果已分配文件句柄的数量接近最大值,您应该考虑增加最大值。在 Linux 2.6 之前,内核动态分配文件句柄,但不会再次释放它们。相反,空闲文件句柄保留在一个列表中以供重新分配;“空闲文件句柄”值表示该列表的大小。大量的空闲文件句柄表明过去打开文件句柄的使用量达到过峰值。自 Linux 2.6 起,内核确实会解除分配已释放的文件句柄,“空闲文件句柄”值始终为零。
- /proc/sys/fs/inode-max
- 此文件包含内存中 inode 的最大数量。在某些 (2.4) 系统上,它可能不存在。此值应比 file-max 中的值大 3-4 倍,因为 stdin、stdout 和网络套接字也需要一个 inode 来处理它们。当您经常耗尽 inode 时,需要增加此值。
- /proc/sys/fs/inode-nr
- 此文件包含 inode-state 中的前两个值。
- /proc/sys/fs/inode-state
- 此文件包含七个数字:nr_inodes、nr_free_inodes、preshrink 和四个虚拟值。nr_inodes 是系统已分配的 inode 数量。这可能略多于 inode-max,因为 Linux 一次分配一整页。nr_free_inodes 表示空闲 inode 的数量。当 nr_inodes > inode-max 且系统需要修剪 inode 列表而不是分配更多时,preshrink 为非零。
- /proc/sys/fs/inotify (自 Linux 2.6.13)
- 此目录包含文件 max_queued_events、max_user_instances 和 max_user_watches,可用于限制 inotify 接口消耗的内核内存量。有关详细信息,请参见 inotify(7)。
- /proc/sys/fs/lease-break-time
- 此文件指定了内核在向持有文件租约(fcntl(2))的进程发送信号通知它另一个进程正在等待打开该文件后,授予该进程的宽限期。如果租约持有者在此宽限期内未移除或降级租约,内核将强制打破该租约。
- /proc/sys/fs/leases-enable
- 此文件可用于在系统范围内启用或禁用文件租约(fcntl(2))。如果此文件包含值 0,则租约被禁用。非零值启用租约。
- /proc/sys/fs/mqueue (自 Linux 2.6.6)
- 此目录包含文件 msg_max、msgsize_max 和 queues_max,它们控制 POSIX 消息队列使用的资源。有关详细信息,请参见 mq_overview(7)。
- /proc/sys/fs/overflowgid 和 /proc/sys/fs/overflowuid
- 这些文件允许您更改固定 UID 和 GID 的值。默认值为 65534。某些文件系统仅支持 16 位 UID 和 GID,尽管在 Linux 中 UID 和 GID 为 32 位。当其中一个文件系统以写入启用模式挂载时,任何超出 65535 的 UID 或 GID 在写入磁盘之前都会转换为溢出值。
- /proc/sys/fs/pipe-max-size (自 Linux 2.6.35)
- 此文件中的值定义了使用 fcntl(2) 的 F_SETPIPE_SZ 操作来提高管道容量的上限。此限制仅适用于非特权进程。此文件的默认值为 1,048,576。分配给此文件的值可能会向上取整,以反映实际用于方便实现的数值。要确定向上取整后的值,请在为其分配值后显示此文件的内容。可以分配给此文件的最小值是系统页大小。
- /proc/sys/fs/protected_hardlinks (自 Linux 3.6)
- 当此文件中的值为 0 时,对硬链接的创建不施加任何限制(即,这是 Linux 3.6 之前的历史行为)。当此文件中的值为 1 时,只有满足以下条件之一,才能为目标文件创建硬链接:
- *
调用者拥有 CAP_FOWNER 能力。
*
创建链接的进程的文件系统 UID 与目标文件的所有者(UID)匹配(如 credentials(7) 中所述,进程的文件系统 UID 通常与其有效 UID 相同)。
*
以下所有条件都为真:
- • 目标是普通文件;
• 目标文件未启用其设置用户 ID 权限位;
• 目标文件未同时启用其设置组 ID 和组可执行权限位; 并且
• 调用者有权读取和写入目标文件(通过文件权限掩码或因为它具有适当的能力)。
- 此文件的默认值为 0。将值设置为 1 可防止由基于硬链接的“检查时与使用时竞争条件”(time-of-check, time-of-use races)引起的一类长期存在的安全问题,最常见于全局可写目录,如 /tmp。利用此缺陷的常见方法是在跟踪给定硬链接时跨越权限边界(即,root 进程跟踪由其他用户创建的硬链接)。此外,在没有单独分区的系统上,这可以阻止未经授权的用户“固定”易受攻击的设置用户 ID 和设置组 ID 文件,使其无法被管理员升级,或链接到特殊文件。
- /proc/sys/fs/protected_symlinks (自 Linux 3.6)
- 当此文件中的值为 0 时,对跟随符号链接不施加任何限制(即,这是 Linux 3.6 之前的历史行为)。当此文件中的值为 1 时,仅在以下情况下跟随符号链接
- *
跟随链接的进程的文件系统 UID 与符号链接的所有者 (UID) 匹配(如 credentials(7) 中所述,进程的文件系统 UID 通常与其有效 UID 相同);
*
该链接不在一个粘滞位的全局可写目录中;或者
*
符号链接及其父目录具有相同的所有者 (UID)
- 因上述限制而未能跟随符号链接的系统调用会在 errno 中返回 EACCES 错误。
此文件中的默认值为 0。将值设置为 1 可避免在访问符号链接时,基于检查时与使用时(TOCTOU)竞争条件的一类长期存在的安全问题。
- /proc/sys/fs/suid_dumpable (自 Linux 2.6.13 起)
- 此文件中的值决定是否为 set-user-ID 或其他受保护/被污染的二进制文件生成核心转储文件。可以指定三种不同的整数值
- 0(默认)
这提供了传统的(Linux 2.6.13 之前)行为。对于已更改凭据(通过调用 seteuid(2)、setgid(2) 或类似函数,或通过执行 set-user-ID 或 set-group-ID 程序)的进程,或其二进制文件未启用读取权限的进程,将不会生成核心转储。
- 1(“调试”)
所有进程在可能时都会转储核心。核心转储归属于转储进程的文件系统用户 ID,不施加任何安全性。这仅适用于系统调试情况。ptrace 不受检查。
- 2(“suidsafe”)
任何通常不会被转储的二进制文件(参见上文“0”的说明)将只允许 root 用户读取。这允许用户删除核心转储文件,但不能读取它。出于安全原因,在此模式下的核心转储不会相互覆盖或覆盖其他文件。当管理员尝试在正常环境中调试问题时,此模式是合适的。
此外,自 Linux 3.6 起,/proc/sys/kernel/core_pattern 必须是绝对路径名或管道命令,详细信息请参见 core(5)。如果 core_pattern 不遵循这些规则,警告将写入内核日志,并且不会生成核心转储。
- /proc/sys/fs/super-max
- 此文件控制超级块的最大数量,从而控制内核可以拥有的挂载文件系统的最大数量。仅当您需要挂载的文件系统数量超过 super-max 当前值允许的数量时,才需要增加 super-max。
- /proc/sys/fs/super-nr
- 此文件包含当前已挂载的文件系统数量。
- /proc/sys/kernel
- 此目录包含控制一系列内核参数的文件,如下所述。
- /proc/sys/kernel/acct
- 此文件包含三个数字:highwater(高水位线)、lowwater(低水位线)和 frequency(频率)。如果启用了 BSD 风格的进程记账,这些值将控制其行为。如果日志所在文件系统上的可用空间低于 lowwater 百分比,记账将暂停。如果可用空间超过 highwater 百分比,记账将恢复。frequency 决定内核检查可用空间的频率(值为秒)。默认值为 4、2 和 30。也就是说,如果可用空间为 2% 或更少,则暂停记账;如果可用空间为 4% 或更多,则恢复记账;将可用空间信息视为 30 秒内有效。
- /proc/sys/kernel/cap-bound (从 Linux 2.2 到 2.6.24)
- 此文件保存内核能力边界集的值(表示为有符号十进制数)。此集与在 execve(2) 期间允许进程的能力进行 AND 运算。从 Linux 2.6.25 开始,系统范围的能力边界集消失了,取而代之的是每线程边界集;详情请参见 capabilities(7)。
- /proc/sys/kernel/core_pattern
- 请参见 core(5)。
- /proc/sys/kernel/core_uses_pid
- 请参见 core(5)。
- /proc/sys/kernel/ctrl-alt-del
- 此文件控制键盘 Ctrl-Alt-Del 的处理方式。当此文件中的值为 0 时,Ctrl-Alt-Del 将被捕获并发送到 init(8) 程序以进行优雅重启。当值大于 0 时,Linux 对瓦肯神经钳 (tm) 的反应将是立即重启,甚至不同步其脏缓冲区。注意:当程序(如 dosemu)将键盘置于“原始”模式时,Ctrl-Alt-Del 会在到达内核 tty 层之前被程序截获,由程序决定如何处理它。
- /proc/sys/kernel/dmesg_restrict (自 Linux 2.6.37 起)
- 此文件中的值决定谁可以查看内核系统日志内容。此文件中的值为 0 不施加任何限制。如果值为 1,则只有特权用户才能读取内核系统日志。(有关更多详细信息,请参见 syslog(2)。)自 Linux 3.4 起,只有具有 CAP_SYS_ADMIN 能力的用户才能更改此文件中的值。
- /proc/sys/kernel/domainname 和 /proc/sys/kernel/hostname
- 可以用于设置 NIS/YP 域名和您机器的主机名,方式与命令 domainname(1) 和 hostname(1) 完全相同,即
-
# echo 'darkstar' > /proc/sys/kernel/hostname # echo 'mydomain' > /proc/sys/kernel/domainname
- 具有与以下相同的效果:
-
# hostname 'darkstar' # domainname 'mydomain'
- 然而请注意,经典的 darkstar.frop.org 的主机名是“darkstar”,DNS(互联网域名服务器)域名是“frop.org”,这不应与 NIS(网络信息服务)或 YP(黄页)域名混淆。这两个域名通常是不同的。有关详细讨论,请参见 hostname(1) 手册页。
- /proc/sys/kernel/hotplug
- 此文件包含热插拔策略代理的路径。此文件中的默认值是 /sbin/hotplug。
- /proc/sys/kernel/htab-reclaim
- (仅限 PowerPC)如果此文件设置为非零值,则每当系统进入空闲循环时,PowerPC htab(参见内核文件 Documentation/powerpc/ppc_htab.txt)都会被修剪。
- /proc/sys/kernel/kptr_restrict (自 Linux 2.6.38 起)
- 此文件中的值决定内核地址是否通过 /proc 文件和其他接口暴露。此文件中的值为 0 不施加任何限制。如果值为 1,则使用 %pK 格式说明符打印的内核指针将被替换为零,除非用户具有 CAP_SYSLOG 能力。如果值为 2,则无论用户的能力如何,使用 %pK 格式说明符打印的内核指针都将被替换为零。此文件的初始默认值为 1,但在 Linux 2.6.39 中默认值更改为 0。自 Linux 3.4 起,只有具有 CAP_SYS_ADMIN 能力的用户才能更改此文件中的值。
- /proc/sys/kernel/l2cr
- (仅限 PowerPC)此文件包含一个标志,用于控制 G3 处理器主板的 L2 缓存。如果为 0,则缓存被禁用。如果为非零,则启用。
- /proc/sys/kernel/modprobe
- 此文件包含内核模块加载器的路径。默认值为 /sbin/modprobe。仅当内核以启用 CONFIG_MODULES(Linux 2.6.26 及更早版本中为 CONFIG_KMOD)选项构建时,此文件才存在。它由 Linux 内核源文件 Documentation/kmod.txt 描述(仅存在于内核 2.4 及更早版本中)。
- /proc/sys/kernel/modules_disabled (自 Linux 2.6.31 起)
- 一个开关值,指示在模块化内核中是否允许加载模块。此开关默认为关闭 (0),但可以设置为真 (1)。一旦设置为真,模块既不能加载也不能卸载,并且该开关不能重新设置为假。仅当内核以启用 CONFIG_MODULES 选项构建时,此文件才存在。
- /proc/sys/kernel/msgmax
- 此文件定义了一个系统范围的限制,指定 System V 消息队列中单个消息的最大字节数。
- /proc/sys/kernel/msgmni
- 此文件定义了系统范围内消息队列标识符数量的限制。(此文件仅在 Linux 2.4 及更高版本中存在。)
- /proc/sys/kernel/msgmnb
- 此文件定义了一个系统范围的参数,用于初始化后续创建的消息队列的 msg_qbytes 设置。msg_qbytes 设置指定可以写入消息队列的最大字节数。
- /proc/sys/kernel/ostype 和 /proc/sys/kernel/osrelease
- 这些文件提供了 /proc/version 的子字符串。
- /proc/sys/kernel/overflowgid 和 /proc/sys/kernel/overflowuid
- 这些文件与 /proc/sys/fs/overflowgid 和 /proc/sys/fs/overflowuid 文件相同。
- /proc/sys/kernel/panic
- 此文件提供对内核变量 panic_timeout 的读/写访问。如果此值为零,则内核将在 panic 时循环;如果为非零,则表示内核应在此秒数后自动重启。当您使用软件看门狗设备驱动程序时,建议的设置为 60。
- /proc/sys/kernel/panic_on_oops (自 Linux 2.5.68 起)
- 此文件控制内核在遇到 oops 或 BUG 时的行为。如果此文件包含 0,则系统会尝试继续运行。如果包含 1,则系统会延迟几秒(以便给 klogd 时间记录 oops 输出),然后 panic。如果 /proc/sys/kernel/panic 文件也为非零,则机器将重启。
- /proc/sys/kernel/pid_max (自 Linux 2.5.34 起)
- 此文件指定 PID 环绕的值(即,此文件中的值比最大 PID 大一)。此文件的默认值 32768,会产生与早期内核相同的 PID 范围。在 32 位平台上,32768 是 pid_max 的最大值。在 64 位系统上,pid_max 可以设置为最高 2^22(PID_MAX_LIMIT,大约 4 百万)的任何值。
- /proc/sys/kernel/powersave-nap (仅限 PowerPC)
- 此文件包含一个标志。如果设置,Linux-PPC 将使用“nap”节能模式,否则将使用“doze”模式。
- /proc/sys/kernel/printk
- 此文件中的四个值分别是 console_loglevel(控制台日志级别)、default_message_loglevel(默认消息日志级别)、minimum_console_level(最小控制台级别)和 default_console_loglevel(默认控制台日志级别)。这些值影响 printk() 在打印或记录错误消息时的行为。有关不同日志级别的更多信息,请参见 syslog(2)。优先级高于 console_loglevel 的消息将打印到控制台。没有明确优先级的消息将以 default_message_level 优先级打印。minimum_console_loglevel 是 console_loglevel 可以设置的最小(最高)值。default_console_loglevel 是 console_loglevel 的默认值。
- /proc/sys/kernel/pty (自 Linux 2.6.4 起)
- 此目录包含两个文件,涉及系统上 UNIX 98 伪终端的数量(请参见 pts(4))。
- /proc/sys/kernel/pty/max
- 此文件定义了伪终端的最大数量。
- /proc/sys/kernel/pty/nr
- 此只读文件指示当前正在使用的伪终端数量。
- /proc/sys/kernel/random
- 此目录包含控制文件 /dev/random 操作的各种参数。有关更多信息,请参见 random(4)。
- /proc/sys/kernel/real-root-dev
- 此文件记录在 Linux 内核源文件 Documentation/initrd.txt 中。
- /proc/sys/kernel/reboot-cmd (仅限 Sparc)
- 此文件似乎是向 SPARC ROM/Flash 引导加载程序传递参数的一种方式。也许是为了告诉它重启后做什么?
- /proc/sys/kernel/rtsig-max
- (仅在内核 2.6.7 及更早版本中;请参见 setrlimit(2))此文件可用于调整系统中可以未决的 POSIX 实时(排队)信号的最大数量。
- /proc/sys/kernel/rtsig-nr
- (仅在内核 2.6.7 及更早版本中。)此文件显示当前排队的 POSIX 实时信号数量。
- /proc/sys/kernel/sem (自 Linux 2.4 起)
- 此文件包含 4 个数字,定义 System V IPC 信号量的限制。这些字段按顺序如下
- SEMMSL
每个信号量集的最大信号量数。
SEMMNS
所有信号量集中信号量数量的系统范围限制。
SEMOPM
在 semop(2) 调用中可以指定的最大操作数。
SEMMNI
最大信号量标识符数量的系统范围限制。
- /proc/sys/kernel/sg-big-buff
- 此文件显示通用 SCSI 设备 (sg) 缓冲区的大小。您目前无法对其进行调整,但可以在编译时通过编辑 include/scsi/sg.h 并更改 SG_BIG_BUFF 的值来修改它。然而,通常没有理由更改此值。
- /proc/sys/kernel/shmall
- 此文件包含 System V 共享内存总页数的系统范围限制。
- /proc/sys/kernel/shmmax
- 此文件可用于查询和设置最大(System V IPC)共享内存段大小的运行时限制。内核现在支持高达 1GB 的共享内存段。此值默认为 SHMMAX。
- /proc/sys/kernel/shmmni
- (在 Linux 2.4 及更高版本中可用)此文件指定系统范围内可以创建的 System V 共享内存段的最大数量。
- /proc/sys/kernel/sysrq
- 此文件控制允许 SysRq 键调用的功能。默认情况下,文件包含 1,表示允许所有可能的 SysRq 请求(在旧的内核版本中,SysRq 默认是禁用的,并且您需要在运行时专门启用它,但现在情况并非如此)。此文件中可能的值是
0 - 完全禁用 sysrq 1 - 启用 sysrq 的所有功能 >1 - 允许的 sysrq 功能的位掩码,如下所示: 2 - 启用控制台日志级别控制 4 - 启用键盘控制(SAK,unraw) 8 - 启用进程等调试转储 16 - 启用 sync 命令 32 - 启用重新挂载为只读 64 - 启用进程信号(终止、杀死、OOM 杀死) 128 - 允许重启/关机 256 - 允许调整所有实时任务的优先级
此文件仅当启用了 CONFIG_MAGIC_SYSRQ 内核配置选项时才存在。有关更多详细信息,请参见 Linux 内核源文件 Documentation/sysrq.txt。
- /proc/sys/kernel/version
- 此文件包含一个类似以下内容的字符串
#5 Wed Feb 25 21:49:24 MET 1998
“#5”表示这是从该源代码库构建的第五个内核,后面的日期表示内核的构建时间。
- /proc/sys/kernel/threads-max (自 Linux 2.3.11 起)
- 此文件指定系统上可以创建的线程(任务)数量的系统范围限制。
- /proc/sys/kernel/zero-paged (仅限 PowerPC)
- 此文件包含一个标志。当启用(非零)时,Linux-PPC 将在空闲循环中预置零页,可能会加快 get_free_pages 的速度。
- /proc/sys/net
- 此目录包含网络相关内容。此目录下一些文件的解释可以在 tcp(7) 和 ip(7) 中找到。
- /proc/sys/net/core/somaxconn
- 此文件定义了 listen(2) 的 backlog 参数的上限值;详情请参见 listen(2) 手册页。
- /proc/sys/proc
- 此目录可能为空。
- /proc/sys/sunrpc
- 此目录支持用于网络文件系统 (NFS) 的 Sun 远程过程调用。在某些系统上,此目录可能不存在。
- /proc/sys/vm
- 此目录包含用于内存管理调优、缓冲区和缓存管理的文件。
- /proc/sys/vm/drop_caches (自 Linux 2.6.16 起)
- 写入此文件会导致内核从内存中丢弃干净的缓存、dentries 和 inodes,从而使该内存变为可用。
要释放页面缓存,请使用 echo 1 > /proc/sys/vm/drop_caches;要释放 dentries 和 inodes,请使用 echo 2 > /proc/sys/vm/drop_caches;要释放页面缓存、dentries 和 inodes,请使用 echo 3 > /proc/sys/vm/drop_caches。
因为这是一个非破坏性操作,并且脏对象无法释放,用户应首先运行 sync(8)。
- /proc/sys/vm/legacy_va_layout (自 Linux 2.6.9 起)
- 如果为非零,这将禁用新的 32 位内存映射布局;内核将为所有进程使用传统的(2.4)布局。
- /proc/sys/vm/memory_failure_early_kill (自 Linux 2.6.32 起)
- 控制当硬件在后台检测到内核无法处理的未纠正内存错误(通常是内存模块中的 2 位错误)时如何杀死进程。在某些情况下(例如页面在磁盘上仍有有效副本),内核将透明地处理故障,而不影响任何应用程序。但如果没有其他最新的数据副本,它将杀死进程以防止任何数据损坏传播。
此文件具有以下值之一
- 1:
杀死所有具有
- 已损坏且不可重新加载的页面映射的进程,一旦检测到损坏立即执行。请注意,这对于少数类型的页面(如内核内部分配的数据或交换缓存)不支持,但适用于大多数用户页面。
- 0:
仅从所有进程中解除映射损坏的页面,并仅杀死尝试访问它的进程。
- 杀死操作通过 SIGBUS 信号执行,其中 si_code 设置为 BUS_MCEERR_AO。进程如果愿意可以处理此信号;更多详细信息请参见 sigaction(2)。
此功能仅在具有高级机器检查处理功能的架构/平台以及依赖于硬件能力的情况下才有效。
应用程序可以使用 prctl(2) 的 PR_MCE_KILL 操作单独覆盖 memory_failure_early_kill 设置。
仅当内核配置了 CONFIG_MEMORY_FAILURE 时才存在。
- /proc/sys/vm/memory_failure_recovery (自 Linux 2.6.32 起)
- 启用内存故障恢复(当平台支持时)
- 1:
尝试恢复。
0:
内存故障时始终触发内核 panic。
- 仅当内核配置了 CONFIG_MEMORY_FAILURE 时才存在。
- /proc/sys/vm/oom_dump_tasks (自 Linux 2.6.25 起)
- 当内核执行 OOM-killing 时,启用生成系统范围的任务转储(不包括内核线程)。转储包括每个任务(线程、进程)的以下信息:线程 ID、实际用户 ID、线程组 ID(进程 ID)、虚拟内存大小、常驻集大小、任务被调度到的 CPU、oom_adj 分数(参见 /proc/[pid]/oom_adj 的描述)和命令名称。这有助于确定 OOM-killer 被调用的原因,并识别导致它的异常任务。
如果此值包含零,则此信息将被抑制。在拥有数千个任务的超大型系统上,为每个任务转储内存状态信息可能不可行。当不需要这些信息时,不应强制此类系统在 OOM 情况下承受性能损失。
如果此值设置为非零,则当 OOM-killer 实际杀死一个占用大量内存的任务时,此信息将被显示。
默认值为 0。
- /proc/sys/vm/oom_kill_allocating_task (自 Linux 2.6.24 起)
- 此文件启用或禁用在内存不足情况下杀死触发 OOM 的任务。
如果此值设置为零,OOM-killer 将扫描整个任务列表,并根据启发式算法选择一个任务来杀死。这通常会选择一个异常的、占用大量内存的任务,当它被杀死时会释放大量内存。
如果此值设置为非零,OOM-killer 将简单地杀死触发内存不足条件的任务。这避免了可能耗费资源的任务列表扫描。
如果 /proc/sys/vm/panic_on_oom 为非零,则它将优先于 /proc/sys/vm/oom_kill_allocating_task 中使用的任何值。
默认值为 0。
- /proc/sys/vm/overcommit_memory
- 此文件包含内核虚拟内存记账模式。值如下
0:启发式过度分配(这是默认值)
1:总是过度分配,从不检查
2:总是检查,从不过度分配
- 在模式 0 下,对带有 MAP_NORESERVE 的 mmap(2) 调用不进行检查,并且默认检查非常弱,这会导致进程有被“OOM-killed”的风险。在 Linux 2.4 下,任何非零值都意味着模式 1。在模式 2 下(自 Linux 2.6 起可用),系统上的总虚拟地址空间限制为 (SS + RAM*(r/100)),其中 SS 是交换空间的大小,RAM 是物理内存的大小,r 是文件 /proc/sys/vm/overcommit_ratio 的内容。
- /proc/sys/vm/overcommit_ratio
- 请参见 /proc/sys/vm/overcommit_memory 的描述。
- /proc/sys/vm/panic_on_oom (自 Linux 2.6.18 起)
- 此文件启用或禁用在内存不足情况下的内核 panic。
如果此文件设置为 0,内核的 OOM-killer 将杀死某些异常进程。通常,OOM-killer 能够杀死异常进程,系统将得以幸存。
如果此文件设置为 1,则当内存不足时,内核通常会触发 panic。但是,如果进程使用内存策略(mbind(2) MPOL_BIND)或 cpusets(cpuset(7))将分配限制到特定节点,并且这些节点达到内存耗尽状态,则一个进程可能会被 OOM-killer 杀死。在这种情况下不会发生 panic:因为其他节点的内存可能仍然空闲,这意味着整个系统可能尚未达到内存不足状态。
如果此文件设置为 2,则当发生内存不足情况时,内核总是会触发 panic。
默认值为 0。1 和 2 用于集群的故障转移。请根据您的故障转移策略进行选择。
- /proc/sys/vm/swappiness
- 此文件中的值控制内核交换内存页面的积极程度。值越高,积极性越高;值越低,积极性越低。默认值为 60。
- /proc/sysrq-trigger (自 Linux 2.4.21 起)
- 向此文件写入一个字符会触发与输入 ALT-SysRq-<字符> 相同的 SysRq 功能(参见 /proc/sys/kernel/sysrq 的描述)。此文件通常仅由 root 用户可写。有关更多详细信息,请参见 Linux 内核源文件 Documentation/sysrq.txt。
- /proc/sysvipc
- 子目录,包含伪文件 msg、sem 和 shm。这些文件列出了系统上当前存在的 System V 进程间通信 (IPC) 对象(分别是:消息队列、信号量和共享内存),提供与通过 ipcs(1) 可获得的信息类似。这些文件带有标题,并以(每行一个 IPC 对象)格式化,以便于理解。svipc(7) 提供了这些文件显示信息的更多背景知识。
- /proc/tty
- 包含 tty 驱动程序和线路规程的伪文件和子目录。
- /proc/uptime
- 此文件包含两个数字:系统的运行时间(秒),以及在空闲进程中花费的时间量(秒)。
- /proc/version
- 此字符串标识当前正在运行的内核版本。它包括 /proc/sys/kernel/ostype、/proc/sys/kernel/osrelease 和 /proc/sys/kernel/version 的内容。例如
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
- /proc/vmstat (自 Linux 2.6 起)
- 此文件显示各种虚拟内存统计信息。
- /proc/zoneinfo (自 Linux 2.6.13 起)
- 此文件显示内存区域的信息。这对于分析虚拟内存行为很有用。
说明
许多字符串(即,环境变量和命令行)采用内部格式,子字段由空字节 ('\0') 终止,因此您可能会发现如果使用 od -c 或 tr "\000" "\n" 读取它们会更具可读性。另外,echo `cat <file>` 也很好用。
本手册页不完整,可能不准确,并且属于需要经常更新的类型。
参见
cat(1), dmesg(1), find(1), free(1), ps(1), tr(1), uptime(1), chroot(2), mmap(2), readlink(2), syslog(2), slabinfo(5), hier(7), time(7), arp(8), hdparm(8), ifconfig(8), init(8), lsmod(8), lspci(8), mount(8), netstat(8), procinfo(8), route(8)
Linux 内核源文件:Documentation/filesystems/proc.txt 和 Documentation/sysctl/vm.txt。