Linux进程(4)
free :查看内存使用情况
- free 获取的内存使用信息,使用从 /proc/meminfo 文件中获取的
- free [-s delay] [-c num]
-s delay :指定几秒刷新一次
-c num :指定刷新几次后退出
-h
-w
[root@node2 ~]# free -wh total used free shared buffers cache available Mem: 976M 107M 366M 12M 680K 502M 675M Swap: 2.0G 51M 1.9G
shared:tmpfs 总用的内存空间。对内核版本有要求,若版本不够,则显示为0 |
uname :查看系统与内核相关信息
- uname [OPTION]…
-a : 显示所有的信息
-m :显示机器(硬件)架构
-n :显示机器的网络节点主机名
-r :显示操作系统内核发行版本
-s :显示操作系统名
-p :显示主机处理器(CPU)架构
-v :显示操作系统版本
-i :显示硬件平台
-o :显示操作系统
dmesg :分析内核产生的信息
- dmesg [options]
-H:以人类可读的方式显示,并在 less 中打开
-l, --level list :将输出严格到定义(逗号分隔)的级别列表 ;例如: dmesg --level=err,warn
-L:彩色化重要信息查看系统启动后 systemd 创建的进程:
dmesg | grep systemd
查看所有被内核检测到的硬盘设备:
dmesg | grep sd
/proc:
- /proc/pid/*:
cmdline:启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
cwd:指向当前进程运行目录的一个符号链接
environ:当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示
exe:指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝
fd/:这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向
实际文件的一个符号链接
fdinfo/:一个目录,包含每个打开的文件描述符的位置和标记
limits:当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的
UID用户读取
maps:当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表
mem:当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取
root:指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于
独立的根目录
stat:当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
statm:当前进程占用内存的状态信息,通常以"页面"(page)表示
a)进程占用的总的内存
b)进程当前时刻占用的物理内存
c)同其它进程共享的内存
d)进程的代码段
e)共享库(从2.6版本起,这个值为0)
f)进程的堆栈
g)dirty pages(从2.6版本起,这个值为0)
status:与stat所提供信息类似,但可读性较
task:目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由
线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容
stack:/proc/[pid]/stack显示当前进程的内核调用栈信息,只有内核编译时打开了CONFIG_STACKTRACE
编译选项,才会生成这个文件
syscall:显示当前进程正在执行的系统调用
smaps:该文件显示每个进程映射的内存消耗情况
wchan:显示当进程 sleep 时,kernel 当前运行的函数
io:这个文件包含每个正在运行的进程的IO统计信息
/proc/apm:高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用
/proc/buddyinfo:用于诊断内存碎片问题的相关信息文件
/proc/cmdline:在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递
/proc/cpuinfo:处理器的相关信息的文件
/proc/crypto:系统上已安装的内核使用的密码算法及每个算法的详细信息列表
/proc/devices:系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组
(与主设备号对应的设备类型)名
/proc/diskstats:每块磁盘设备的磁盘I/O统计信息列表
/proc/dma:每个正在使用且注册的ISA DMA通道的信息列表
/proc/execdomains:内核当前支持的执行域(每种操作系统独特"个性")信息列表
/proc/fb:帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息
/proc/filesystems:当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的
支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型
/proc/interrupts:X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个
I/O设备均有自己的中断号
/proc/iomem:每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息
/proc/ioports:当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,
第一列表示注册的I/O端口范围,其后表示相关的设备
/proc/kallsyms:模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;通常这个文件中的
信息量相当大
/proc/kcore:系统使用的物理内存,以ELF核心文件(core file)格式存储,其文件大小为已使用的物理内存
(RAM)加上4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由GBD通常调试工具使用,但不能
使用文件查看命令打开此文件
/proc/kmsg:此文件用来保存由内核输出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要试图使用查看
命令打开此文件
/proc/loadavg:保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载
平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实
体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个
由内核创建的进程的PID
/proc/locks:保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个
惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,
由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,
ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户
任何形式的访问
[root@node1 proc]# cat /proc/locks 1: FLOCK ADVISORY WRITE 1121 fd:00:366349 0 EOF 2: FLOCK ADVISORY WRITE 1121 fd:00:100663378 0 EOF 3: FLOCK ADVISORY WRITE 688 00:13:16834 0 EOF 4: POSIX ADVISORY WRITE 493 00:13:13915 0 EOF |
/proc/mdstat:保存RAID相关的多块磁盘的当前状态信息,在没有使用RAID机器上,其显示为如下状态:
[root@node1 proc]# cat /proc/mdstat Personalities : unused devices: <none> |
/proc/meminfo:系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取
此文件,其内容显示为两列,前者为统计属性,后者为对应的值
/proc/mounts:在内核2.4.29版本以前,此文件的内容为系统当前挂载的所有文件系统,在2.4.19以后的内核中引进
了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向/proc/self/mounts(每个进程自身挂载
名称空间中的所有挂载点列表)文件的符号链接;/proc/self是一个独特的目录,后文中会对此目录进行介绍
/proc/modules:当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;如下所示,
其中第一列表示模块名,第二列表示此模块占用内存空间大小,第三列表示此模块有多少实例被装入,
第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:已经装入;Loading:
正在装入;Unloading:正在卸载),第六列表示此模块在内核内存(kernel memory)中的偏移量
[root@node1 proc]# cat /proc/modules ip6t_rpfilter 12595 1 - Live 0xffffffffc0675000 ipt_REJECT 12541 2 - Live 0xffffffffc0670000 …… |
/proc/partitions:块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的
块(block)数目
/proc/pci:内核初始化时发现的所有PCI设备及其配置信息列表,其配置信息多为某PCI设备相关IRQ信息,
可读性不高,可以用"/sbin/lspci –vb"命令获得较易理解的相关信息;在2.6内核以后,此文件已
为/proc/bus/pci目录及其下的文件代替
/proc/slabinfo:在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,
而/proc/slabinfo文件列出了这些对象相关slap的信息;详情可以参见内核文档中slapinfo的手册页
/proc/stat:实时追踪自系统上次启动以来的多种统计信息;如下所示,其中,
"cpu"行后的八个值分别表示以1/100(jiffies)秒为单位的统计值(包括系统运行于用户模式、低优先级用户
模式,运系统模式、空闲模式、I/O等待模式的时间等)
"intr"行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中
断自系统启动以来所发生的次数;
"ctxt"给出了自系统启动以来CPU发生的上下文交换的次数
"btime"给出了从系统启动到现在为止的时间,单位为秒
"processes (total_forks) 自系统启动以来所创建的任务的个数目
"procs_running":当前运行队列的任务的数目
"procs_blocked":当前被阻塞的任务的数目
/proc/swaps:当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别
存储于/proc/swap目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大;下面是作者系统中
只有一个交换分区时的输出信息
/proc/uptime:系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统
空闲时间,单位是秒
/proc/version:当前系统运行的内核版本号
[root@node1 proc]# cat /proc/version Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017 |
/proc/vmstat:当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好
/proc/zoneinfo:内存区域(zone)的详细信息列表,信息量较大
/proc/sysvipc:包括共享内存与进程间通信 (IPC)信息