从PROC文件系统与SYSFS系统获得系统运行时数据


===================
- PROC文件系统介绍
===================

; 显示内存信息,对对应命令: vmstat/free
$ cat /proc/meminfo
$ cat /proc/vmstat
$ cat /proc/vmmemctl

; 显示设备相关信息
$ cat /proc/devices

; 显示磁盘相关信息,第二条命令显示了分区名称,主要设备号与次要设备号,对应命令: fdisk -l
$ cat /proc/diskstats
$ cat /proc/partitions

; 显示启动时间
$ cat /proc/uptime
$ cat /proc/version

; 显示系统中断以及相关信息,用于查看设备所请求的IRQ中断,其中'I8042'为键盘
; 第二个命令显示系统IO所占用的地址范围
; 第三个命令查看系统设备读写的地址空间,编程会用得着
$ cat /proc/interrupts
$ cat /proc/ioports
$ cat /proc/iomem

; 查看CPU信息,查看CPU对指令集的支持
$ cat /proc/cpuinfo | awk '/flags/'
$ cat /proc/cpuinfo | awk '/vendor/'
$ cat /proc/cpuinfo | awk '/MHz/'

; 查看内核所编译的文件系统,即,查看内核所支持的文件系统
$ cat /proc/filesystems

; 查看系统装载的模块,对应命令: lsmod
$ cat /proc/modules

; 查看系统平均负载
$ cat /proc/loadavg
; 查看系统启动命令行,传送到内核的命令行参数
$ cat /proc/cmdline

; 系统调用列表
$ cat /proc/kallsyms


+ 网络
; 显示系统ARP表,"HWADDR"全0表示IP地址未被占用
$ cat /proc/net/arp
; 显示SNMP相关信息,上面一行表示各个字段,下面一行表示值,以下同
$ cat /proc/net/snmp
; 显示接口总流量
$ cat /proc/net/dev
; 显示路由表,注意,这里显示的不是点分10进制,而10完全16进制
$ cat /proc/net/route
; 显示无线相关信息,包含接收到的AP,信号质量等
$ cat /proc/net/wireless

+ 进程<CPU/IO/Fd>
; 基准目录<vw>: /proc/#Pid/
; 查看内存映射表,包括其对动态链接库的引用,堆栈的位置,可以用于故障排除
$ cat $vw/maps
$ cat $vw/smaps
; 查看进程运作状况,如SLEEP参数表明了进程的繁忙程度
$ cat $vw/status
; 查看进程的IO情况,也可以通过此查看进程是否为IO密集型进程
$ cat $vw/io
; 查看进程打开的文件,对对应命令: lsof
$ ls $vw/fd
; 查看进程工作目录
$ ls -l $vw/cwd
; 查看进程可执行文件
$ ls -l $vw/exe
; 查看传入进程的环境变量
$ cat $vw/environ
; 查看传入进程的命令行
$ cat $vw/cmdline | tr "\000" "\n"
; 查看对进程的限制,如打开文件数,运行作业数等
$ cat $vw/limits
; 查看进程锁定的元素
$ cat $vw/locks

+ 设备
; 查看光驱相关信息,注意DRIVENAME,进行挂载时用得着
$ cat /proc/sys/dev/cdrom/info

+ 总线
; 查看PCI总线,对应命令: lspci/setpci
$ cat /proc/bus/pci/devices
; 查看USB总线,对应命令: lsusb
$ cat /proc/bus/usb/devices
; 查看键盘,鼠标,扬声器
$ cat /proc/bus/input/devices
$ cat /proc/bus/input/handler
; 查看SCSI总线
$ cat /proc/scsi/scsi
; 查看SCSI设备
$ cat /proc/scsi/device_info
=====================
* SYS 文件系统
=====================

; 查看网卡原始MAC
$ cat /sys/class/net/ethX/address
; 查看网卡统计数据
$ cat /sys/class/net/ethX/statistics/*
; 查看接口状态
$ cat /sys/class/net/ethX/operstate
 
举个小例子
这段代码统计在10秒内ETH0接口接收的网络流量,单位是BPS
#!/bin/bash
cd /sys/class/net/eth0/statistics
startRX=`cat rx_bytes`
sleep 10
endRX=`cat rx_bytes`
bytesTotal=`expr $endRX - $startRX`
bps=`expr $bytesTotal '/' 10`
echo "The average traffic is RX: ${bps}Bytes/sec"
  后记:从上文可以看到,LINUX性能数据收集工具均是从/PROC文件系统读取性能数据,另外,既然已经知道系统性能数据来源,在系统中没有安装这些工具的情况下,我们也可以自行编写脚本进行数据采集了,另外,在对PROC文件系统不了解的情况下,不可对PROC文件系统中的任何文件进行写操作,特别是线上的系统,否则本人概不负责
 
作者 “NOTHING IS SERIOUS!”

相关内容

    暂无相关文章