首页 > 代码库 > linux 的proc文件系统

linux 的proc文件系统

linux中的/proc文件系统是一个虚拟的文件系统,由内核在运行时动态生成。它提供了内核运行时的配置和状态信息。用户可以通过这些文件来获取、或修改内核的信息。
关于proc,可以通过 man proc 获取详细的说明。

运行 mount 命令,可以看到 proc 文件系统的挂载信息。

mount -t proc proc /proc

/proc 目录下的文件

/proc/cpuinifo       CPU的信息(型号、家族、缓存大小等)

/proc/meminfo    物理内存、交换空间
/proc/mounts      已加载的文件系统的列表
/proc/devices  可用设备的列表
/proc/filesystems   被支持的文件系统
/proc/modules   已加载的模块
/proc/virsion   内核版本
/proc/cmdline   系统启动时输入的内核命令行参数
/proc/XXX    XXX是指以数字编号的目录,有不少这样的目录,每一个目录表示一个进程(即线程组)。
/proc/swaps   要获知swap空间的使用情况
/proc/uptime   获取系统的正常运行时间
/proc/fs/nfsd/exports  列出由NFS共享的文件系统
/proc/kmsg  该文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用
/proc/self -- 到当前进程/proc目录的符号链接,通过这个目录可以获取当前运行进程的信息。
/proc/pci -- 挂接在PCI总线上的设备
/proc/tty/driver/serial --串口配置、统计信息
/proc/version -- 系统版本信息
/proc/sys/kernel/ostype
/proc/sys/kernel/osrelease
/proc/sys/kernel/version
/proc/sys/kernel/hostname -- 主机名
/proc/sys/kernel/domainname -- 域名
/proc/partitions -- 硬盘设备分区信息
/proc/sys/dev/cdrom/info -- CDROM信息
/proc/locks -- 当前系统中所有的文件锁
/proc/loadavg -- 系统负荷信息
/proc/uptime -- 系统启动后的运行时间

----------------------------------------------------------------------------------------------------------------------------------------------------------

查看系统内存信息的命令:   cat /proc/meminfo

MemTotal:     3266180 kB
MemFree:        17456kB
Buffers:       111328kB
Cached:       2664024kB
SwapCached:         0kB
Active:        467236kB
Inactive:     2644928 kB
HighTotal:         0kB
HighFree:          0kB
LowTotal:     3266180 kB
LowFree:        17456kB
SwapTotal:    2048276kB
SwapFree:     1968116 kB
Dirty:            8kB
Writeback:         0kB
Mapped:        345360kB
Slab:         112344kB
Committed_AS:   535292kB
PageTables:      2340 kB
VmallocTotal: 536870911 kB
VmallocUsed:    272696kB
VmallocChunk: 536598175 kB
HugePages_Total:    0
HugePages_Free:     0
Hugepagesize:    2048kB

解析:

MemTotal: 所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)
MemFree: LowFree与HighFree的总和,被系统留着未使用的内存
Buffers: 用来给文件做缓冲大小
Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ).
SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小
           已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。
Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.
Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
HighTotal:
HighFree: 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。
LowTotal:
LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。Among many
         other things, it is where everything from the Slab is
         allocated.  Bad things happen when you‘re out of lowmem.

SwapTotal: 交换空间的总大小
SwapFree: 未被使用交换空间的大小
Dirty: 等待被写回到磁盘的内存大小。
Writeback: 正在被写回到磁盘的内存大小。
AnonPages:未映射页的内存大小
Mapped: 设备和文件等映射的大小。
Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
SReclaimable:可收回Slab的大小
SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
PageTables:管理内存分页页面的索引表的大小。
NFS_Unstable:不稳定页表的大小
VmallocTotal: 可以vmalloc虚拟内存大小
VmallocUsed: 已经被使用的虚拟内存大小。
VmallocChunk: largest contigious block of vmalloc area which is free

------------------------------------------------------------------------------------------------------

/proc/stat 文件的字段解析:

 user    systemnice    idle      iowait  irq    softirq
cpu  17906755 86377 53312329 1322524322 29311124 101704 1096939
cpu0 4665564  22883  13417357330376020  7206071 99986  297154
cpu1 4488897  20352  13351971330749128  7202582     271926
cpu2 4434851  22675  13302518330622140  7455115 1718   245786
cpu3 4317443  20467  13240483330777034  7447356     282073
输出解释
CPU 以及CPU0、CPU1、CPU2、CPU3每行的每个参数意思(以第一行为例)为:

参数 解释
user (432661) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice (13295) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
system (86656) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
idle (422145968) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
iowait (171474) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq (233) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
softirq (5346) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

CPU时间=user+system+nice+idle+iowait+irq+softirq

“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。

那么CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)*100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100

以下用分别用bash和perl做的一个cpu利用率的计算:
total_0USER[0]+NICE[0]+SYSTEM[0]+IDLE[0]+IOWAIT[0]+IRQ[0]+SOFTIRQ[0]
total_1=USER[1]+NICE[1]+SYSTEM[1]+IDLE[1]+IOWAIT[1]+IRQ[1]+SOFTIRQ[1]
cpu usage=(IDLE[0]-IDLE[1]) / (total_0-total_1) * 100


linux 的proc文件系统