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

简介: 【2月更文挑战第8天】

/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。

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

目录
相关文章
|
29天前
|
Linux 定位技术
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
116 24
|
22天前
|
Linux Shell
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
77 19
|
1月前
|
安全 Shell Linux
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
89 3
Linux系统之su命令的基本使用
|
24天前
|
Ubuntu Linux 编译器
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
87 17
|
2月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
127 27
|
2月前
|
Linux
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
193 10
|
2月前
|
存储 NoSQL Linux
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
109 0
|
12月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
3533 0
|
12月前
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
311 0
|
7月前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统
158 0