linux proc系统

这篇具有很好参考价值的文章主要介绍了linux proc系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux的/proc文件系统是一个特殊的文件系统,它提供了访问内核和进程信息的接口。它不是一个存储在硬盘上的文件系统,而是一个虚拟的文件系统,存在于内存中,用于向用户和进程展示有关系统状态和进程信息的数据。

系统相关信息

/proc目录下的文件和子目录提供了对系统状态和进程信息的访问点。一些常见的子目录和文件包括:

/proc/cpuinfo:包含有关CPU的信息,如型号、频率、缓存大小等。
/proc/meminfo:包含有关内存的信息,如总内存、可用内存、交换空间等。
/proc/net:包含有关网络协议和连接的信息。
/proc/PID:每个运行的进程都有一个以PID命名的子目录,包含该进程的相关信息,如命令行参数、打开的文件、内存映射等。
/proc/sys:包含了系统内核的运行时参数和配置信息,可以通过读写这些文件来修改内核参数。
访问/proc文件系统:
/proc文件系统可以像访问普通文件和目录一样进行读取和写入操作。可以使用标准的文件I/O操作函数(如open()、read()、write())或命令行工具(如cat、echo)来访问/proc中的文件和目录。

获取系统和进程信息:
/proc文件系统提供了一种方便的方式来获取系统和进程的信息,可以通过读取相应的文件来获得特定的信息。例如:

获得CPU信息:

cat /proc/cpuinfo

获得内存信息:

cat /proc/meminfo

获得进程列表:

ls /proc

修改内核参数:
/proc/sys目录下的文件提供了一种方式来修改内核运行时的参数和配置。可以通过修改这些文件的内容来调整系统的行为。例如:

修改文件句柄限制:

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

注意事项:

/proc文件系统中的文件和目录是动态生成的,它们的内容是实时反映系统状态的。
对/proc文件系统的读取操作是非阻塞的,读取时会立即返回当前可用的数据。
/proc文件系统中的一些文件只有超级用户(root)才能访问。
/proc文件系统是Linux中非常有用的一个功能,它提供了对系统和进程信息的实时访问。通过读取和操作/proc文件系统中的文件和目录,可以获取关于系统状态、硬件信息、进程信息等各种有用的数据。下面是继续描述Linux的/proc系统的一些重要信息:

进程相关信息

/proc/[PID]/status:包含有关特定进程(使用PID替换[PID])的状态信息,如进程ID、父进程ID、内存使用情况等。
/proc/[PID]/cmdline:包含特定进程的命令行参数。
/proc/[PID]/fd:是一个目录,包含特定进程打开的文件描述符的符号链接。
/proc/[PID]/maps:包含特定进程的内存映射信息,显示进程使用的内存区域及其权限等。
/proc/[PID]/stat:包含特定进程的统计信息,如CPU使用时间、状态等。
/proc/[PID]/cpuinfo:包含特定进程运行在哪个CPU核心上的信息。
系统状态和硬件信息:

/proc/loadavg:包含系统的平均负载情况。
/proc/uptime:包含系统自上次启动以来的运行时间和空闲时间。
/proc/meminfo:包含系统内存使用情况,如总内存、可用内存、缓存等。
/proc/version:包含系统内核版本信息。
/proc/cpuinfo:包含系统CPU信息,如型号、频率、缓存等。
/proc/filesystems:包含支持的文件系统类型。
网络和网络连接信息:

/proc/net/dev:包含网络设备的统计信息,如接收和发送的数据包数量、错误等。
/proc/net/arp:包含ARP(Address Resolution Protocol)缓存信息。
/proc/net/tcp:包含当前TCP连接的信息。
/proc/net/udp:包含当前UDP连接的信息。
/proc/net/icmp:包含ICMP(Internet Control Message Protocol)统计信息。
其他一些有用的信息:

/proc/sys:是一个目录,包含系统内核运行时的参数和配置信息,如文件句柄限制、网络参数等。
/proc/self:是一个指向当前正在运行的进程自身的符号链接。可以使用它访问当前进程的信息,类似于/proc/[PID]。
需要注意的是,/proc文件系统中的文件和目录可能因Linux发行版和内核版本的不同而有所差异。此外,对/proc文件系统的读取和操作需要适当的权限,某些文件只能由超级用户(root)访问。

Linux的/proc文件系统相关信息

/proc/sys/kernel目录:
/proc/sys/kernel/hostname:包含主机名信息。
/proc/sys/kernel/osrelease:包含操作系统内核版本信息。
/proc/sys/kernel/panic:设置系统遇到严重错误时的行为,如重启或转储内存。
/proc/sys/kernel/panic_on_oops:设置是否在内核遇到致命错误(oops)时自动触发panic。
/proc/sys/kernel/sem:包含系统的信号量参数,用于进程间同步。
/proc/sys/kernel/sysrq:用于控制sysrq功能,可以通过sysrq键组合触发一些特殊操作。
/proc/sys/net目录:
/proc/sys/net/core:包含核心网络参数,如最大套接字缓冲区大小、消息队列长度等。
/proc/sys/net/ipv4:包含IPv4网络参数,如IP转发、路由缓存等。
/proc/sys/net/ipv6:包含IPv6网络参数,如IPv6转发、邻居缓存等。
/proc/sys/net/bridge:用于桥接网络设置的参数。
/proc/sys/net/icmp:包含ICMP参数,如ICMP重定向、错误报文等。
/proc/sys/fs目录:
/proc/sys/fs/file-max:限制系统上可以打开的文件句柄数。
/proc/sys/fs/inotify:包含inotify文件系统参数,用于文件和目录监控。
/proc/sys/fs/inotify/max_user_watches:限制一个用户可以监视的inotify对象数。
/proc/sys/fs/inotify/max_user_instances:限制一个用户可以创建的inotify实例数。
/proc/sys/vm目录:
/proc/sys/vm/swappiness:控制内核在内存紧张时将数据交换到交换空间的倾向性。
/proc/sys/vm/dirty_ratio:指定内存脏页的最大比例。
/proc/sys/vm/dirty_background_ratio:指定内存脏页开始写回磁盘的比例。
这些仅是/proc文件系统中的一部分内容,还有许多其他文件和目录可以提供系统和进程的各种信息。/proc系统的使用可以帮助系统管理员、开发人员和调试人员深入了解系统的状态、配置参数和进程行为。请注意,/proc文件系统中的某些文件是只读的,而其他文件允许读取和写入。在使用/proc文件系统时,应小心避免误操作,以免对系统的正常运行产生不良影响。

通过/proc文件系统获取特定进程的CPU和内存使用率的信息

通过 /proc/[PID]/stat 文件查看某一进程的 CPU 活动信息
在 /proc/[PID]/ 目录下的各个文件记录着 这个进程的各项运行指标,通过查看 /proc/[PID]/stat 文件,可以进程运行的详细信息,其中就包括 CPU 占用信息。

[root@rh ~]$ cat /proc/1/stat
1 (init) S 0 1 1 0 -1 4202752 3026 2635222 9 483 5 165 102346 3188016 20 0 1 0 1 19820544 384 18446744073709551615 1 1 0 0 0 0 0 4096 536962595 18446744073709551615 0 0 0 4 0 0 34 0 0

/proc/[PID]/stat 文件信息解释

1)我们可以通过 man 5 proc 命令查看文档,找到 /proc/[pid]/stat 节点,就可以看到各字段的意思了。如:

/proc/[pid]/stat
Status information about the process.  This is used by ps(1).  It is defined in /usr/src/linux/fs/proc/array.c.
The fields, in order, with their proper scanf(3) format specifiers, are:
pid %d      The process ID.
comm %s     The  filename  of the executable, in parentheses.  This is visible whether or not the executable is swapped out.
state %c    One character from the string "RSDZTW" where R is running, S is sleeping in an interruptible  wait,  D  is waiting in uninterruptible disk sleep, Z is zombie, T is traced or stopped (on a signal), and W is paging.
ppid %d     The PID of the parent.
......

2)具体解释,一个示例:

pid=6873 进程(包括轻量级进程,即线程)号
comm=a.out 应用程序或命令的名字。
task_state=R 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop, Z:zombie, X:dead。
ppid=6723 父进程ID。
pgid=6873 线程组号。
sid=6723 该任务所在的会话组 ID。
tty_nr=34819(pts/3) 该任务的 tty 终端的设备号,INT(34817/256)= 主设备号,(34817-主设备号)= 次设备号。
tty_pgrp=6873 终端的进程组号,当前运行在该任务所在终端的前台任务(包括 shell 应用程序)的 PID。
task->flags=8388608 进程标志位,查看该任务的特性。
min_flt=77 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数。
cmin_flt=0 累计的该任务的所有的 waited-for 进程曾经发生的次缺页的次数目。
maj_flt=0 该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数。
cmaj_flt=0 累计的该任务的所有的 waited-for 进程曾经发生的主缺页的次数目。
utime=1587 该任务在用户态运行的时间,单位为 jiffies。
stime=1 该任务在核心态运行的时间,单位为 jiffies。
cutime=0 累计的该任务的所有的 waited-for 进程曾经在用户态运行的时间,单位为 jiffies。
cstime=0 累计的该任务的所有的 waited-for 进程曾经在核心态运行的时间,单位为 jiffies。
priority=25 任务的动态优先级。
nice=0 任务的静态优先级。
num_threads=3 该任务所在的线程组里线程的个数。
it_real_value=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位。
start_time=5882654 该任务启动的时间,单位为 jiffies。
vsize=1409024(page) 该任务的虚拟地址空间大小。
rss=56(page) 该任务当前驻留物理地址空间的大小;Number of pages the process has in real memory,minu 3 for administrative purpose. 这些页可能用于代码,数据和栈。
rlim=4294967295(bytes) 该任务能驻留物理地址空间的最大值。
start_code=134512640 该任务在虚拟地址空间的代码段的起始地址。
end_code=134513720 该任务在虚拟地址空间的代码段的结束地址。
start_stack=3215579040 该任务在虚拟地址空间的栈的结束地址。
kstkesp=0 esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致。
kstkeip=2097798 指向将要执行的指令的指针, EIP(32 位指令指针)的当前值。
pendingsig=0 待处理信号的位图,记录发送给进程的普通信号。
block_sig=0 阻塞信号的位图。
sigign=0 忽略的信号的位图。
sigcatch=082985 被俘获的信号的位图。
wchan=0 如果该进程是睡眠状态,该值给出调度的调用点。
nswap 被 swapped 的页数,当前没用。
cnswap 所有子进程被 swapped 的页数的和,当前没用。
exit_signal=17 该进程结束时,向父进程所发送的信号。
task_cpu(task)=0 运行在哪个 CPU 上。
task_rt_priority=0 实时进程的相对优先级别。
task_policy=0 进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程

关于进程占用 CPU 的相关信息

在上述的时间中,这些信息会在计算 CPU 占用率时用到:

pid 进程号。
utime 该任务在用户态运行的时间,单位为 jiffies。
stime 该任务在核心态运行的时间,单位为 jiffies。
cutime 累计的该任务的所有的 waited-for 进程曾经在用户态运行的时间,单位为 jiffies。
cstime 累计的该任务的所有的 waited-for 进程曾经在核心态运行的时间,单位为 jiffies。
该进程的 CPU 占用时间(该值包括其所有线程的 CPU 时间):

processCPUTime = utime + stime + cutime + cstime

通过 /proc/[PID]/task/[TID]/stat 文件查看某一进程下的某一线程的活动信息
该文件包含了某一轻量级进程(lwp,即通常所说的线程)所有的活动信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义与 /proc/[PID]/stat 文件类似。该文件中的 tid 字段表示的是轻量级线程号。

该线程的 CPU 占用时间:

threadCPUTime = utime + stime

单核情况下 CPU 使用率的计算

首先,通过读取 /proc/stat 文件获取总的 CPU 时间,读取 /proc/[PID]/stat 获取进程 CPU 时间,读取 /proc/[PID]/task/[TID]/stat 获取线程 CPU 时间。然后,采样两个足够短的时间间隔的 CPU 快照与进程或线程快照来计算其 CPU 使用率。

计算总的 CPU 使用率 totalCPUUse

1)采样两个足够短的时间间隔的 CPU 快照,即读取 /proc/stat 文件,获取两个时间点的下列数据:

CPUT1 (user1, nice1, system1, idle1, iowait1, irq1, softirq1, stealstolen1, guest1);
CPUT2 (user2, nice2, system2, idle2, iowait2, irq2, softirq2, stealstolen2, guest2);
2)计算总的 CPU 时间 totalCPUTime:

CPUTime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 + stealstolen1 + guest1;
CPUTime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 + stealstolen2 + guest2;
totalCPUTime = CPUTime2 – CPUTime1;

3)计算 CPU 空闲时间 idleCPUTime:

idleCPUTime = idle2 – idle1;

4)计算总的 CPU 使用率 totalCPUUse:

totalCPUUse = (totalCPUTime – idleCPUTime) / totalCPUTime;

计算某一进程的 CPU 使用率 processCPUUse

1)采样两个足够短的时间间隔的 CPU 快照和对应的进程快照,即读取 /proc/stat 文件,获取两个时间点的下列数据:

CPUT1 (user1, nice1, system1, idle1, iowait1, irq1, softirq1, stealstolen1, guest1);
CPUT2 (user2, nice2, system2, idle2, iowait2, irq2, softirq2, stealstolen2, guest2);
读取 /proc/[PID]/stat 文件,获取两个时间点的下列数据:

ProcessT1 (utime1, stime1, cutime1, cstime1);
ProcessT2 (utime2, stime2, cutime2, cstime2);
2)计算总的 CPU 时间 totalCPUTime 和进程时间 processTime:

CPUTime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 + stealstolen1 + guest1;
CPUTime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 + stealstolen2 + guest2;
totalCPUTime = CPUTime2 – CPUTime1;

processTime1 = utime1 + stime1 + cutime1 + cstime1;
processTime2 = utime2 + stime2 + cutime1 + cstime2;
processTime = processTime2 – processTime1;

3)计算该进程的 CPU 使用率 processCPUUse:

processCPUUse = processTime / totalCPUTime;

计算某一线程的 CPU 使用率 threadCPUUse

1)采样两个足够短的时间间隔的 CPU 快照和对应的线程快照,即读取 /proc/stat 文件,获取两个时间点的下列数据:

CPUT1 (user1, nice1, system1, idle1, iowait1, irq1, softirq1, stealstolen1, guest1);
CPUT2 (user2, nice2, system2, idle2, iowait2, irq2, softirq2, stealstolen2, guest2);
读取 /proc/[PID]/task/[TID]/stat 文件,获取两个时间点的下列数据:

threadT1 (utime1, stime1);
threadT2 (utime2, stime2);
2)计算总的 CPU 时间 totalCPUTime 和线程时间 threadTime:

CPUTime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 + stealstolen1 + guest1;
CPUTime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 + stealstolen2 + guest2;
totalCPUTime = CPUTime2 – CPUTime1;

threadTime1 = utime1 + stime1;
threadTime2 = utime2 + stime2;
threadTime = threadTime2 – threadTime1;

3)计算该线程的 CPU 使用率 threadCPUUse:

threadCPUUse = threadTime / totalCPUTime;

多核情况下 CPU 使用率的计算

首先,通过读取 /proc/stat 文件获取总的 CPU 时间,读取 /proc/[PID]/stat 获取进程 CPU 时间,读取 /proc/[PID]/task/[TID]/stat 获取线程 CPU 时间,读取 /proc/cpuinfo 获取 CPU 个数。

在多核情况下计算进程或线程的 CPU 使用率,用上面的方式得到的通常是相对于 CPU 所有核的总共时间的占用率,而我们通常习惯得到进程或线程对某一个单核的占用率。所以我们可以按上面的方式计算得到 CPU 占用率,然后把结果乘上 CPU 的核数,即可得到进程或线程相对于一个单核的占用率。

多核情况下该线程的 CPU 使用率 mThreadCPUUse:

mThreadCPUUse = threadCPUUse * processorNum;文章来源地址https://www.toymoban.com/news/detail-518192.html

到了这里,关于linux proc系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文搞懂linux的proc文件

      目录 proc文件夹是干嘛用? proc下都有什么系统信息?  /proc/bus /proc/buddyinfo /proc/cgroups        /proc/cmdline /proc/consoles /proc/cpuinfo /proc/crypto /proc/devices /proc/diskstats /proc/execdomains /proc/fb /proc/filesystems        /proc/fs /proc/inerrupts /proc/iomem /proc/ioports /proc/irq /proc/kallsyms /proc/keys /pr

    2024年02月03日
    浏览(72)
  • 【Linux】linux5.6引入struct proc_ops,用以替代struct file_operations在/proc下进行文件操作

    linux5.10生成在/proc目录下的文件时,利用cat读取文件,提示: 该报错是错误码:EPERM,不允许操作 发现是在移植内核代码时,未对proc接口进行适配。 linux-5.6引入结构体struct proc_ops,用以替代struct file_operations在/proc下进行文件操作。 proc_create中的proc_ops结构体类型定义改变,导

    2024年02月08日
    浏览(24)
  • linux下sys目录与proc目录的作用

    在Linux系统中,/sys目录是一个特殊的虚拟文件系统(sysfs),用于提供对内核和设备的运行时信息的访问。它是在内核中运行的驱动程序和子系统的接口,可以用于获取和配置系统的硬件和内核信息。 以下是/sys目录的一些主要作用: 设备和驱动程序信息:/sys目录提供了与设

    2024年02月04日
    浏览(49)
  • Linux查看进程运行输出(/proc/<pid>/fd)

    输入ps或ps -ef root@TinaLinux:/proc/631/fd# ps PID   USER     TIME   COMMAND     1 root       0:03 /sbin/procd ...........   631 root       0:06 ./rt_agent   694 root       0:00 [kworker/2:2]   771 root       0:23 /home/upg/fupg 要查看的进程id为631。 切换到/proc/pid/fd下,如 root@TinaLinux:~# cd /proc/631/fd root@TinaLin

    2024年02月11日
    浏览(42)
  • Linux查看CPU和内存使用情况(ps、free、htop、atop、nmon、/proc/meminfo等)

    1.CPU占用最多的前10个进程: 2.内存消耗最多的前10个进程 3.虚拟内存使用最多的前10个进程 查看某一类进程占用总资源 思路:使用ps命令,对内存相关的列进行求和。 查看哪一列是内存、哪一列是内存百分比 由上图,内存百分比 我们就使用$4, 具体内存(KB)我们就用$6 如下

    2024年02月04日
    浏览(29)
  • 开发中proc文件系统的简单使用

    在Linux系统中, “/proc”文件系统十分有用, 它被内核用于向用户导出信息。 “/proc”文件系统是一个虚拟文件系统, 通过它可以在Linux内核空间和用户空间之间进行通信。 在/proc文件系统中, 我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段, 与普通文

    2024年01月16日
    浏览(28)
  • 【Linux操作系统】探秘Linux奥秘:Linux 操作系统的解密与实战

    🌈个人主页: Sarapines Programmer 🔥 系列专栏: 《操作系统实验室》 🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS 🪐2. Linux 操作系统的解密与实战 🌍1. 实验目的 🌍2. 实验准备 🌍3. 实验内容 🌍4. 实验心得 📝总

    2024年02月03日
    浏览(42)
  • 【Linux】Linux系统编程——Linux目录结构

    Linux的文件系统呈现为一种树状结构,以根目录 / 为最顶层,其下分布着各种不同的子目录,每个目录都有其特定的用途和功能。下面是Linux目录结构的详细介绍: 1. 根目录 / 根目录是整个文件系统的基础。所有的目录和文件都从这里开始分支。 它是所有其他目录的父目录。

    2024年01月20日
    浏览(34)
  • [Linux] Linux文件系统

    🥁 作者 : 华丞臧 . 📕 ​​​​专栏 :【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持( 点赞+收藏+关注 )。如果有错误的地方,欢迎在评论区指出。 信息化时代就是信息产生价值的时代,信息化是当今时代发展的大趋势,代表着先进生产力。通常我们都会

    2024年02月04日
    浏览(25)
  • 【Linux】Linux系统编程——Linux命令解析器

    Linux 命令解析器,通常被称为 shell,是 Linux 操作系统中的一个关键组件。它充当用户和系统内核之间的接口,允许用户通过输入命令来控制和管理操作系统和应用程序。 这张图是 Linux 系统结构的一个简化表示,展示了不同组成部分之间的层次关系。从内到外,各层次代表了

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包