/proc/{pid}/stat 文件说明

在 Linux 系统中,/proc 是一个虚拟文件系统,它提供了大量关于系统和正在运行的进程的信息。/proc/[pid]/stat 是其中一个文件,它提供了关于指定进程 ID(PID)的详细状态信息。

/proc/{pid}/stat

/proc/[pid]/stat 文件包含了进程的许多详细信息,这些信息对于系统管理员和开发者在调试、性能分析或系统监控时非常有用。

以下是 /proc/[pid]/stat 文件中一些字段的简要说明:

  • pid:进程的唯一标识符(PID)。
  • comm:进程的命令名(通常是程序的基名)。
  • state:进程的状态,例如 R(运行)、S(睡眠)、D(不可中断的睡眠)等。
  • ppid:父进程的 PID。
  • pgrp:进程的进程组 ID。
  • session:进程所在的会话 ID。
  • tty_nr:控制进程的终端设备的编号。
  • tpgid:前台进程组的 ID。
  • flags:进程的标志,表示进程的状态和行为。
  • minfltmajflt:进程发生的页面错误的次数(次要和主要)。
  • cminfltcmajflt:子进程发生的页面错误的次数(次要和主要)。
  • utimestime:进程在用户模式和内核模式下花费的 CPU 时间。
  • cutimecstime:子进程在用户模式和内核模式下花费的 CPU 时间。
  • prioritynice:进程的优先级和 nice 值。
  • num_threads:进程中的线程数。
  • itrealvaluestimerealvalue:进程的时间片长度和累积的睡眠时间。
  • start_time:进程的启动时间(自系统启动以来的时钟滴答数)。
  • vsize:进程的虚拟内存大小。
  • rss:进程使用的驻留集大小。
  • rsslim:进程的驻留集大小限制。
  • start_codeend_code:进程代码段的地址范围。
  • start_stackkstkesp:进程堆栈的地址范围。
  • kstkeip:进程指令指针的地址。
  • signalblockedsigignoresigcatch:进程的信号相关信息。
  • wchan:进程在等待的通道或资源的地址。
  • nswap:进程交换出的页面数。
  • cnswap:子进程交换出的页面数。
  • exit_signal:进程终止时的信号。
  • processor:执行进程的 CPU 编号。
  • rt_priority:进程的实时优先级。
  • policy:进程的调度策略。
  • delayacct_blkio_ticks:进程在块 I/O 上花费的延迟时间(已废弃)。
  • guest_timecguest_time:进程在虚拟机中花费的 CPU 时间。

要获取关于特定系统上 /proc/[pid]/stat 文件的详细信息,您可以查看 man 5 proc 手册页。

查询进程使用的内存大小

在 Linux 中,你可以使用多种命令来查询进程使用的内存大小。以下是一些常用的方法:

  1. 使用 /proc/[pid]/status 文件
    每个进程在 /proc 目录下都有一个与其 PID 对应的子目录,其中包含了一个名为 status 的文件。这个文件包含了进程的详细信息,包括内存使用情况。

    cat /proc/[pid]/status | grep Vm

    这将显示一系列以 Vm 开头的行,其中 VmSize 表示进程虚拟内存的总大小,VmRSS 表示进程正在使用的物理内存大小(驻留集大小),VmPeak 表示进程虚拟内存使用量的峰值等。

  2. 使用 ps 命令
    ps 命令是一个用于报告当前系统进程状态的工具。你可以使用它来查看进程的内存使用情况。

    ps -o pid,user,%mem,vsz,rss,comm -p [pid]

    这里:

    • %mem 显示进程使用的物理内存百分比。
    • vsz 显示进程的虚拟内存大小(以 KB 为单位)。
    • rss 显示进程使用的驻留集大小(以 KB 为单位)。
    • comm 显示命令名(通常是程序的基名)。
  3. 使用 top 或 htop 命令
    这两个命令都提供了实时的系统状态视图,包括进程的内存使用情况。

    在 top 中,你可以直接看到 %MEM 列,它显示了每个进程使用的物理内存百分比。你还可以按 M 键来根据内存使用量对进程进行排序。

    htop 是 top 的一个增强版本,它提供了一个更友好的界面和更多的功能。你可以直接在界面中看到进程的内存使用情况,并可以使用鼠标或键盘进行操作。

  4. 使用 pmap 命令
    pmap 命令用于报告进程的内存映射。它可以显示进程地址空间中的各个区域的详细信息,包括哪些区域被映射到了文件、哪些区域是私有的等。

    pmap -x [pid]

    这将显示进程的内存映射,你可以从中计算出进程使用的总内存大小。

  5. 使用 /proc/[pid]/smaps 文件
    这个文件提供了进程内存映射的详细信息,包括每个映射区域的内存使用情况。这对于深入了解进程的内存布局和使用情况非常有用。

    cat /proc/[pid]/smaps | grep -E '^(Rss|Size):'

    这将显示每个映射区域的 Rss(驻留集大小)和 Size(总大小)。注意,这个文件包含的信息非常详细,可能需要一些时间来解析。计算进程的 CPU 时间

计算进程的 CPU 时间

 

在 Linux 中,你可以通过几种不同的方法来计算进程的 CPU 时间。CPU 时间是指进程在 CPU 上执行的时间,通常分为用户态时间(user CPU time)和内核态时间(system CPU time)。

  1. 使用 /proc/[pid]/stat 文件
    /proc/[pid]/stat 文件中包含了进程的 CPU 时间信息。你可以解析这个文件来获取用户态时间和内核态时间。

    cat /proc/[pid]/stat | awk '{print "User CPU time:", $14, "System CPU time:", $15}'

    这里,$14 是 utime(用户态时间),$15 是 stime(内核态时间),它们都是以时钟滴答数(clock ticks)表示的。你可以通过 /proc/timer_list 或使用 sysconf(_SC_CLK_TCK) 来获取时钟滴答的频率,通常是 100(在较新的系统中可能是 1000),然后将其转换为秒。

  2. 使用 ps 命令
    ps 命令可以显示进程的 CPU 时间。使用 -o 选项可以定制输出格式。

    ps -p [pid] -o pid,tid,etime,time,%cpu,cmd

    这里:

    • etime 表示进程的已过去运行时间(elapsed time)。
    • time 表示进程的总 CPU 时间,格式为 mm:ss.xx 或 m:ss.xx
    • %cpu 表示进程占用的 CPU 百分比。

    注意:ps 命令的 time 字段显示的是总 CPU 时间,它是用户态时间和内核态时间的总和。

  3. 使用 top 或 htop 命令
    top 和 htop 命令提供了实时的系统状态视图,它们都可以显示进程的 CPU 时间。

    在 top 中,你可以直接看到 %CPU 列,它显示了进程占用的 CPU 百分比。TIME+ 列显示了进程的总 CPU 时间。

    htop 提供了类似的视图,但界面更加友好。

  4. 计算进程的 CPU 时间百分比
    如果你想要计算进程在某个时间段内的 CPU 使用率,你可以使用 ps 命令在两个时间点采样 %cpu 值,并计算它们之间的差异。或者使用 pidstat 工具(需要安装 sysstat 包)来报告进程的 CPU 使用情况。

    pidstat -p [pid] 1 5 # 每秒报告一次,共报告 5 次

    这将显示包括 %usr(用户态时间百分比)和 %system(内核态时间百分比)在内的 CPU 使用情况。

你可能感兴趣的:(各种教程,linux,服务器)