如何使用 /proc 文件系统监控 Linux 系统

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 目录。让你了解一些命令是如何获取信息的,如 uptimelsofmount 和 ps 等。

感谢您花时间阅读文章!

收藏本站不迷路!


原文始发于微信公众号(滑翔的纸飞机):如何使用 /proc 文件系统监控 Linux 系统

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260773.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!