zoukankan      html  css  js  c++  java
  • 进程查看分析

    进程是资源的基本分配单位,线程cpu 调度的基本单位。

    进程状态

    top 和 ps 是最常用的查看进程状态的工具,下面是一个 top 命令输出的示例,S 列(也就是 Status  列)表示进程的状态。从这个示例里,你可以看到 R、D、Z、S、I 等几个状态

    $ top
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    28961 root      20   0   43816   3148   4040 R   3.2  0.0   0:00.01 top
      620 root      20   0   37280  33676    908 D   0.3  0.4   0:00.01 app
        1 root      20   0  160072   9416   6752 S   0.0  0.1   0:37.64 systemd
     1896 root      20   0       0      0      0 Z   0.0  0.0   0:00.00 devapp
        2 root      20   0       0      0      0 S   0.0  0.0   0:00.10 kthreadd
        4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H
        6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
        7 root      20   0       0      0      0 S   0.0  0.0   0:06.37 ksoftirqd/0

    各种状态说明

    R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。

    D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。

    Z 是 Zombie 的缩写,如果你玩过“植物大战僵尸”这款游戏,应该知道它的意思。它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。

    S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。

    I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高, I 状态的进程却不会。

    除了以上 5 个状态,进程还包括下面这 2 个状态。第一个是 T 或者 t,也就是 Stopped 或 Traced 的缩写

    另一个是 X,也就是 Dead 的缩写,表示进程已经消亡,所以你不会在 top 或者 ps 命令中看到它。

    查看工具介绍

    top 的统计时间间隔是3秒,ps 是整个进程的生命周期期间的数值。

    ps 一般有两种常用的查看选项

    ps  -elf 和ps aux

    $ ps aux | grep /app
    root      4009  0.0  0.0   4376  1008 pts/0    Ss+  05:51   0:00 /app
    root      4287  0.6  0.4  37280 33660 pts/0    D+   05:54   0:00 /app
    root      4288  0.6  0.4  37280 33668 pts/0    D+   05:54   0:00 /app

    父子进程关系查看

    # -a 表示输出命令行选项
    # p表PID
    # s表示指定进程的父进程
    $ pstree -aps 3084
    systemd,1
      └─dockerd,15006 -H fd://
          └─docker-containe,15024 --config /var/run/docker/containerd/containerd.toml
              └─docker-containe,3991 -namespace moby -workdir...
                  └─app,4009
                      └─(app,3084)

     每个进程的资源使用情况的详细监控 pidstat

    默认查看所有正在被内核管理的进程

    pidstat  1 2      #频率为1秒,输出报告数量为2

    pidstat -p pid     #查看指定pid 的进程的情况

    pidstat -w          #查看上下文切换情况

    pidstat -d      #查看磁盘相关情况

    pidstat -t         #默认只查看进程,加上-t 也查看线程

     

  • 相关阅读:
    数组操作方法和迭代方法
    三元运算符
    数组求和/去重
    javascript保留字
    window.onload和document.ready区别
    alert()和consloe.log()区别
    Eventutil函数封装
    前端中的事件流
    react的生命周期
    小程序初体验
  • 原文地址:https://www.cnblogs.com/fanggege/p/14225378.html
Copyright © 2011-2022 走看看