天天看点

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  0          271926

cpu2 4434851  22675  13302518330622140  7455115  1718    245786

cpu3 4317443  20467  13240483330777034  7447356  0          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

继续阅读