【Linux】proc文件系统
前言
一、proc文件系统简介
1.1 proc文件系统是什么?
1.2 proc文件系统的作用和特点
1.3 proc文件系统提供的信息
二、proc文件系统常用节点详述
2.1 /proc/cpuinfo
2.2 /proc/meminfo
2.3 /proc/kallsyms
2.4 /proc/interrupts
2.5 /proc/loadavg
三、总结
重要的环节:带着问题不断前进
在Linux系统中,有一些特殊文件系统,用于进行文件接口统一的操作来完成各种功能,proc文件系统就是其中一个。
- proc文件系统
- proc文件系统的作用和特点
- proc文件系统可以提供什么信息
- proc文件系统常见的用法
在学习Linux笔记老师的课程中,老师讲的精简深入,但学习入门还需要一些知识背景,这里我进行了拓展和总结。
参考文章和视频:https://xuesong.blog.csdn.net/article/details/109522945
https://live.csdn.net/v/263371?spm=1001.2014.3001.5501
Linux系统上的/proc目录是一种文件系统,即proc文件系统。
/与其它常见的文件系统不同的是,/proc是虚拟文件系统,它不包含任何磁盘上的文件,而是由内核在运行时动态生成的文件和目录。
在Linux中存在着一类特殊的伪文件系统,进行文件接口统一的操作来完成各种功能,例如ptyfs、devfs、sysfs和procfs。而procfs就是其中应用最广泛的一种伪文件系统。
proc 文件系统的挂载点是 /proc,它最早设计用于提供进程运行时的信息,比如进程的运行状态、进程当前打开的文件、创建的套接字、虚拟内存的排布等,这也是它名字的由来 (Process Data Filesystem)。后来,很多系统级的内核信息也被加入进来,如中断信息、设备映射信息、内存状态等等。
总的来说,/proc 文件系统为系统管理员和开发人员提供了一种方便的方式来查询和调试系统的状态和性能。
proc 文件系统提供了一些内核中各个子系统的信息,它使得在用户空间简单地使用 cat 和 echo 命令,或者read 和 write 系统调用就可以获得内核各子系统的信息,比如 CPU 型号和参数、内存使用量、可用的定时硬件及详细参数、连接的外部设备及映射地址,等等,还可以在系统运行时动态修改内核参数,而不需要重新编译内核的源代码。
proc文件系统有哪些特点呢?
文件 | 介绍 |
/proc/cpuinfo | 这个文件包含了有关 CPU 的详细信息,包括厂商、型号、频率、缓存等信息 |
/proc/meminfo | 这个文件包含了有关内存的详细信息,包括可用内存、缓存大小、交换分区等信息 |
/proc/loadavg | 这个文件包含了系统的负载平均值,它表示系统正在运行的进程数和等待 CPU 的进程数的平均值。 |
/proc/kallsyms | 该文件是一个符号表,包含了内核的所有全局变量和函数在内存中的地址。 |
/proc/interrupts | 该文件包含了系统记录的在每个 CPU 上处理的各类中断的计数信息。 |
/proc/version | 这个文件包含了系统的版本信息,包括内核版本、GCC 版本等信息。 |
/proc/net/tcp | 这个文件包含了有关 TCP 连接的信息,包括本地地址、远程地址、状态等信息。 |
/proc/net/udp | 这个文件包含了有关 UDP 连接的信息,包括本地地址、远程地址、状态等信息 |
/proc/sys/kernel/hostname | 这个文件包含了系统的主机名 |
/proc/sys/kernel/pid_max | 这个文件包含了系统允许的最大进程 ID |
/proc/sys/fs/file-nr | 这个文件包含了有关打开文件的统计信息,包括当前打开的文件数、已分配的文件句柄数和最大文件句柄 |
该文件包含了当前系统 CPU 的参数信息,包括 CPU 的核心数量、每个核心的工作频率、缓存大小、字宽地址线长度等。比如,在我的个人电脑上,cat /proc/cpuinfo 显示的部分信息如下:
这个文件显示的是系统中当前的内存状态信息,如物理内存总容量、已使用内存、空闲内存、共享内存、交换内存大小,等等。
在日常的开发工作中,开发者通常更偏向于通过 top 命令的输出,查看系统当前的内存使用状况,因为大多数时候,只关心内存的总量和当前的占用量就足够了。
但是在某些特殊情况下,还是需要参考这个文件中提供的更加详细的内存状态信息,如 slab 内存占用量(记录在一个页框中如何划分和分配小存储区用的内存)、可回收内存量 (SReclaimable)、内核栈空间大小(Kernel Stack)、使用 malloc 分配的堆内存总量,以及使用 mmap 映射的内存总量,等等。
该文件是一个符号表,包含了内核的所有全局变量和函数在内存中的地址。
这是一个帮助内核开发者调试内核而加入的文件,在 Linux 系统崩渍时产生的 Opps 信息中,函数调用堆栈中显示出来的函数名,就是在这个文件的帮助下生成的。
该文件包含了系统记录的在每个 CPU 上处理的各类中断的计数信息。
在Linux 中,如果没有特殊的处理,通常所有的中断都会交给 CPU 的第一个核心(CPUO)来处理。有一个叫做 rqbalance 的实用程序可以帮助系统把中断分发给不同的 CPU,实现负载均衡,对多核处理器的性能提升和控制能耗都有明显的作用。
当前的大多数 Linux 发行版都会默认在多核处理器上启动这个服务,但是以防万一,读者可以在自己的系统上确认该服务是否开启,同时通过检查 proc/interrupts 文件来确定中断是不是均衡地分发到了不同的 CPU上。
这个文件显示系统在过去一段时间的平均负载,一个真实的输出如下所示:
上面的信息,具体含义如下:
1.过去一分钟的系统平均负载
2.过去五分钟的系统平均负载
3.过去十五分钟的系统平均负载
4.采样时刻运行队列的任务数/系统中活跃的总任务数
5.采样时刻占用最大的线程ID
这个文件的输出中的前三个值,经常被用来观察系统负载的发展趋势。如果前面的值比后面的值小,说明系统的负载在减轻;反之,说明系统负载开始呈现出上升的趋势。
特殊文件系统的存在,使得Linux对内核数据的查看和修改具有简单到极致的接口,同时又不失强大灵活的功能。
proc文件系统使得系统易于调试维护,系统的稳定性、可维护性提高,