1. 写在前面
本文,主要介绍 Linux /proc
目录内容,以便我们可以更好地了解其功能。值得注意的是,/proc
目录是所有 Linux 发行版的共同特征,无论其类型或架构如何。
注意: /proc
目录并不是传统意义上的常规文件系统。它是一个虚拟文件系统,包含 procfs
中的进程信息和其他系统相关数据。该文件系统映射到 /proc
目录,并在系统启动过程中加载。
2. 什么是 Linux 中的 /proc ?
/proc
文件系统是内核数据结构和运行时信息的接口,通过虚拟文件的层次结构公开这些数据,为用户和应用程序提供了访问进程、系统配置、硬件等详细信息的途径。
要查看 /proc
文件系统中文件和目录的完整列表,可以使用 ls
命令,如下所示:
jpzhang@dev:~# ls /proc
--------------------------------------------------------------------------------------
1 1089 15 19 19316 21048 21247 25 30 340 40 430 576 782 814 85 89 98 consoles driver iomem keys locks mtrr scsi sys uptime
10 11 16 19086 2 21121 21248 26 31 35 41 431 6 788 815 856 9 acpi cpuinfo execdomains ioports kmsg mdstat net self sysrq-trigger version
1009 12 18 19087 20 21144 21249 27 32 36 417 432 671 791 817 86 90 buddyinfo crypto fb irq kpagecgroup meminfo pagetypeinfo slabinfo sysvipc version_signature
... ...
当查阅 /proc
目录时,会发现里面有一些看起来很熟悉的文件以及一大堆编号目录,每个目录都与系统中正在运行的进程相对应。
这些编号目录代表进程,也就是我们熟知的进程 ID(PID),以及其中占用进程的命令。这些文件包含系统信息,如内存(meminfo)、CPU 信息(cpuinfo)和可用文件系统。
关键文件和目录:
-
/proc/cpuinfo
– 列出系统 CPU 的信息,如型号、速度和内核数量; -
/proc/meminfo
– 列出内存使用的详细信息和统计数据,其中包括内存总量、可用内存和每个进程使用的内存; -
/proc/filesystems
– 包含内核支持的所有文件系统的列表; -
/proc/sys
– 列出内核的配置和运行参数; -
/proc/loadavg
– 显示不同时间间隔(如 1、5 和 15 分钟)内的系统平均负载; -
/proc/self
– 进程自身目录符号链接; -
/proc/stat
– 包含有关系统的各种统计信息,如运行进程数、中断数以及 CPU 各状态下所花费的时间; -
/proc/uptime
– 包含系统运行的时间; -
/proc/PID
– 包含特定进程的信息,其中 PID 是进程 ID;
2. 提取系统信息
/proc/meminfo
用于显示 Linux 系统的内存使用和统计信息,其中包含各种内存相关指标的快照,对监控系统性能和资源利用率非常有用。
jpzhang@dev:~# cat /proc/meminfo
--------------------------------------------------------------------------------------
MemTotal: 8167832 kB
MemFree: 5891108 kB
MemAvailable: 7694160 kB
Buffers: 895200 kB
Cached: 699816 kB
SwapCached: 0 kB
Active: 1260540 kB
Inactive: 417240 kB
Active(anon): 83160 kB
Inactive(anon): 280 kB
Active(file): 1177380 kB
Inactive(file): 416960 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 82764 kB
Mapped: 130724 kB
Shmem: 676 kB
Slab: 552168 kB
SReclaimable: 511448 kB
SUnreclaim: 40720 kB
KernelStack: 2240 kB
PageTables: 6044 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4083916 kB
Committed_AS: 617768 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 100204 kB
DirectMap2M: 5142528 kB
DirectMap1G: 5242880 kB
如上输出,/proc/meminfo
包含大量有关系统内存的信息,包括最上面两行的可用内存总量(单位:kb)和空闲内存量。
对 /proc
中的任何文件运行 cat
命令都会输出其内容。有关任何文件的信息都可以在 man page
中找到:
man 5 /proc/<filename>
示例:
jpzhang@dev:~# man 5 /proc/cpuinfo
--------------------------------------------------------------------------------------
processor : 0 vendor_id : GenuineIntel cpu fami‐
ly : 6 model : 58 model name : Intel Xeon
E3‐12xx v2 (Ivy Bridge, IBRS) stepping : 9 mi‐
crocode : 0x1 cpu MHz : 2500.000 cache size :
16384 KB physical id : 0 siblings : 1 core
id : 0 cpu cores : 1 apicid : 0 initial
apicid : 0 fpu : yes fpu_exception : yes cpuid
level : 13 wp : yes flags : fpu vme de
pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm con‐
stant_tsc rep_good nopl xtopology cpuid tsc_known_freq pni
pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt
tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm
cpuid_fault pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority
ept vpid fsgsbase tsc_adjust smep erms xsaveopt arat umip
md_clear arch_capabilities bugs : cpu_meltdown spec‐
tre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs srbds
mmio_unknown bogomips : 5000.00 clflush size : 64
cache_alignment : 64 address sizes : 40 bits physical, 48 bits
virtual power management:
... ...
简单介绍一下 /proc
的文件:
-
/proc/cmdline
– 内核命令行信息; -
/proc/console
– 当前控制台信息,包括 tty; -
/proc/devices
– 当前为运行内核配置的设备驱动程序; -
/proc/dma
– 当前 DMA 通道的信息; -
/proc/fb
– 帧缓冲设备; -
/proc/filesystems
– 当前内核支持的文件系统; -
/proc/iomem
– 当前设备的系统内存映射; -
/proc/ioports
– 与设备进行输入输出通信的注册端口区域; -
/proc/loadavg
– 系统平均负载; -
/proc/locks
– 当前被内核锁定的文件; -
/proc/meminfo
– 有关系统内存的信息; -
/proc/misc
– 为其他主要设备注册的其他驱动程序; -
/proc/modules
– 当前加载的内核模块; -
/proc/mounts
– 系统使用的所有挂载列表; -
/proc/partitions
– 系统可用分区的详细信息; -
/proc/pci
– 每个 PCI 设备的信息; -
/proc/stat
– 记录上次重启后的各种统计信息; -
/proc/swap
– 有关交换空间的信息; -
/proc/uptime
– 正常运行时间信息(以秒为单位); -
/proc/version
– 内核版本、gcc 版本和安装的 Linux 发行版;
3. 提取流程信息
在 /proc
的编号目录中,你会发现一些文件和链接,这些目录的编号与其中运行命令的 PID 相关。
例如,进入 /proc/<PID>
,可获得以下详细信息:
-
/proc/<PID>/cmdline
– 用于启动进程的命令行参数; -
/proc/<PID>/status
– 详细状态信息,包括内存使用情况和进程统计信息; -
/proc/<PID>/fd
– 进程打开的文件的符号链接;
以查看名为 /proc/15
的文件夹为例:
jpzhang@dev:/proc/15# ls
--------------------------------------------------------------------------------------
attr cgroup comm cwd fd io map_files mountinfo net oom_adj pagemap projid_map schedstat smaps stat syscall timerslack_ns
autogroup clear_refs coredump_filter environ fdinfo limits maps mounts ns oom_score patch_state root sessionid smaps_rollup statm task uid_map
auxv cmdline cpuset exe gid_map loginuid mem mountstats numa_maps oom_score_adj personality sched setgroups stack status timers wchan
jpzhang@dev:/proc/15# cat /proc/15/status
--------------------------------------------------------------------------------------
Name: migration/1
Umask: 0000
State: S (sleeping)
Tgid: 15
Ngid: 0
Pid: 15
PPid: 2
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
... ...
可以从状态文件中看到,该进程属于 migration/1。它的当前状态是休眠,进程 ID 显然是 15。
还可以看到谁在运行这个进程,因为 Uid 和 Gid 均为 0,表明该进程属于 root 用户。
在任何编号目录中,都会有类似的文件结构,最重要的文件结构及其说明如下:
-
cmdline
– 进程的命令行; -
environ
– 环境变量; -
fd
– 文件描述符; -
limits
– 包含有关进程限制的信息; -
mounts
– 相关信息;
编号目录中的几个链接:
-
cwd
– 进程当前工作目录的链接; -
exe
– 进程可执行文件的链接; -
root
– 进程工作目录的链接;
本文简单介绍了 /proc
目录。让你了解一些命令是如何获取信息的,如 uptime
、lsof
、mount
和 ps
等。
感谢您花时间阅读文章!
收藏本站不迷路!
原文始发于微信公众号(滑翔的纸飞机):如何使用 /proc 文件系统监控 Linux 系统
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260773.html