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

举报
wljslmz 发表于 2024/07/11 09:55:31 2024/07/11
【摘要】 /proc是Linux系统中的一个虚拟文件系统,提供了对运行中内核和进程的实时访问。这个目录下包含了很多以数字命名的目录,每个目录代表一个运行中的进程或者系统信息。每个进程目录下有许多文件,这些文件包含了有关进程的各种信息。/proc的独特之处在于,它不包含任何实际的数据文件。相反,它包含一系列的虚拟文件,这些文件的内容是内核和进程状态的实时表示。 /proc的挂载Linux系统在启动时会自...

/proc是Linux系统中的一个虚拟文件系统,提供了对运行中内核和进程的实时访问。这个目录下包含了很多以数字命名的目录,每个目录代表一个运行中的进程或者系统信息。每个进程目录下有许多文件,这些文件包含了有关进程的各种信息。

/proc的独特之处在于,它不包含任何实际的数据文件。相反,它包含一系列的虚拟文件,这些文件的内容是内核和进程状态的实时表示。

/proc的挂载

Linux系统在启动时会自动挂载/proc文件系统。你可以通过查看/proc/mounts文件来确认/proc是否已经挂载。

cat /proc/mounts | grep /proc

如果/proc已经挂载,你会看到类似于下面的输出:

proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0

这表示/proc以可读写的方式挂载,并且不支持setuid和setgid,不允许执行程序。

/proc文件系统的挂载是系统启动的一部分,通常不需要手动干预。

监控系统信息

查看CPU信息

/proc/cpuinfo文件提供了有关系统中CPU的详细信息。通过查看这个文件,你可以了解到有多少个CPU核心、CPU型号、频率等。

cat /proc/cpuinfo

这将输出一系列关于每个CPU核心的信息。例如:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 165
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 5
microcode       : 0xf8
cpu MHz         : 2900.000
cache size      : 16384 KB
physical id     : 0
siblings        : 16
core id         : 0
cpu cores       : 8
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
...

这显示了第一个CPU核心的一些基本信息。

查看内存信息

/proc/meminfo文件包含了系统内存的详细信息,如总内存、可用内存、缓存、交换空间等。

cat /proc/meminfo

输出可能类似于:

MemTotal:       16007472 kB
MemFree:        11313876 kB
MemAvailable:   12514856 kB
Buffers:          224912 kB
Cached:          1171616 kB
SwapCached:       124276 kB
Active:          1581620 kB
Inactive:        2676820 kB
Active(anon):    1041760 kB
Inactive(anon):  1820624 kB
Active(file):     539860 kB
Inactive(file):   856196 kB
Unevictable:         124 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        1538508 kB
Dirty:                84 kB
Writeback:             0 kB
AnonPages:       2821148 kB
Mapped:           104816 kB
Shmem:               464 kB
KReclaimable:     119864 kB
Slab:             240620 kB
SReclaimable:     119864 kB
SUnreclaim:       120756 kB
KernelStack:        7508 kB
PageTables:        12740 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    10100884 kB
Committed_AS:    4445172 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       59984 kB
VmallocChunk:          0 kB
Percpu:            18752 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      661580 kB
DirectMap2M:    15751168 kB
DirectMap1G:     1048576 kB

这提供了系统当前的内存状态。MemTotal表示总内存,MemFree表示空闲内存,Buffers和Cached表示已经使用的缓存。

监控进程

查看进程列表

/proc目录下包含了以数字命名的目录,每个目录对应一个运行中的进程。你可以使用ls /proc命令来查看当前系统中运行的进程。

ls /proc

输出将是一系列数字,每个数字代表一个进程ID (PID)。

查看进程详细信息

进入一个特定的进程目录,你可以查看有关该进程的详细信息。例如,进程ID为114的进程:

cat /proc/114/status

这将输出关于该进程的详细信息,如进程状态、内存使用情况等。

Name:   writeback
Umask:  0000
State:  I (idle)
Tgid:   114
Ngid:   0
Pid:    114
PPid:   2
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups:
NStgid: 114
NSpid:  114
NSpgid: 0
NSsid:  0
Threads:        1
SigQ:   0/62211
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 000001ffffffffff
CapEff: 000001ffffffffff
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
...

其中,Name表示进程名,State表示进程状态,Tgid表示线程组ID,Pid表示进程ID,PPid表示父进程ID等。

跟踪系统性能

查看系统负载

系统的负载是指系统中活跃进程的数量。/proc/loadavg文件包含了有关系统负载的信息。

cat /proc/loadavg

输出将是一个包含多个值的行,其中最前面的三个值分别表示1分钟、5分钟和15分钟的平均负载。

0.06 0.04 0.01 1/457 2403028

这里,0.10是1分钟的平均负载,0.25是5分钟的平均负载,0.30是15分钟的平均负载。最后的两个数字表示正在运行的和总的进程数。

查看网络统计

/proc/net目录提供了有关网络接口的统计信息。你可以使用以下命令查看网络接口的统计数据。

cat /proc/net/dev

这将输出有关每个网络接口的信息,包括接收和发送的数据包数量、错误数等。

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo: 30934717   87533    0    0    0     0          0         0 30934717   87533    0    0    0     0       0          0
enp3s0: 2589539029 8962291    0 236438    0     0          0   1019791 15337518913 12403934    0    0    0     0       0          0

在上述输出中,eth0是网络接口的名称,接收和发送的数据包数量、错误数等都可以从中得知。

调试与优化

跟踪系统调用

在/proc/sys/kernel目录下的syscall文件包含了系统调用的数量。通过查看这个文件,你可以了解系统调用的使用情况。

cat /proc/sys/kernel/syscall

输出将显示系统调用的数量。

10000

这里的数字表示系统已经执行的系统调用的数量。

动态调整内核参数

通过/proc/sys目录,你可以动态调整内核参数,例如修改文件句柄限制。假设你想修改文件句柄的最大数量,可以使用以下命令:

echo 100000 > /proc/sys/fs/file-max

这会将文件句柄的最大数量设置为100000。

这样的调整是临时的,如果系统重新启动,设置将会失效。如果需要永久性的设置,你应该将相关的修改添加到系统的启动脚本或使用系统特定的配置工具。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。