zoukankan      html  css  js  c++  java
  • Linux进程(2)

    pstree:display a tree of processes

       

    Note:可能需要安装 psmisc

       

    pstree [-p] [-s] [-u] [-a] [pid , user]

       

    -p :显示进程的 PID

    -s :显示指定 PID 或 USER 的父进程及子进程

    -u :每当进程的uid与其父进程的uid不同时,新的uid就会在进程名后面的括号中显示

    -a:显示进程的命令行

       

    ps :report a snapshot of the current processes

       

    ps 命令查看当前这一刻的进程信息,注意查看的是静态进程信息,要查看随时刷新的动态进程信息(如windows的进程管理器那样,

    每秒刷新一次),使用top或htop命令

       

    这个命令的man文档及其复杂,它同时支持3种类型的选项:GUN/BSD/UNIX,不同类型的选项其展示的信息格式不一样。

    有些加了"-"的是 UNIX 风格 的选项,不加"-"的是BSD选项,加不加"-"它们的意义是不一样的,例如ps aux 和ps -aux是不同的

       

    其实只需掌握少数几个选项即可,关键的是要了解ps显示出的进程信息中每一列代表什么属性

       

       

    • ps [options]

         

      -p pidlist :显示指定 pid 列表的基本信息

      --no-header

         

      • 常用组合:aux

        u :以用户为中心组织进程状态信息显示

        a :与终端相关的进程

        x :与终端无关的进程

           

        [root@xiao ~]# ps aux

        USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

           

        %CPU :该进程使用掉的 CPU 资源百分比,百分比的计算方式是"进程占用cpu时间/cpu总时间"

        %MEM :该进程所占用的物理内存百分比

        VSZ :使用掉的虚拟内存量 ( KB )

        RSS :常驻内存集 ( KB )

        TTY:表示属于哪个终端的进程,"?"表示不依赖于终端的进程

        STAT :该进程目前的状态 ( 中括号内的进程是内核进程 )

        R :running

        S :interruptable sleep

        D :uninterruptable sleep

        T :stopped

        Z :zombie

        s :表示该进程是session leader,即进程组的首进程。例如管道左边的进程,

        shell脚本中的shell进程

        + :前台进程

        l (小L):表示该进程是一个线程

        N :低优先级进程

        < :高优先级进程

        START :该进程触发启动的时间

        TIME :该进程实际使用 CPU 运行的时间

        COMMAND:表示进程的命令行。如果是内核线程,则使用方括号"[]"包围

           

      • 常用组合:-eFH ,-ef

        -e :显示所有进程,与 -A 有相同的效果

        -F :显示完整格式的进程信息,与 -f 有相同效果

        -H :以进程层级格式显示进程相关信息

           

        [root@node2 ~]# ps -ef | head

        UID PID PPID C STIME TTY TIME CMD

           

        [root@node2 ~]# ps -eFH

        UID PID PPID C SZ RSS PSR STIME TTY TIME CMD

           

        PSR:运行于哪颗CPU之上

           

      • 常用组合:-eo , axo

        -eo format

        axo format

           

        -o format :在 -o 后面指定要显示的进程信息

        %cpu (%CPU):该进程使用掉的 CPU 资源百分比,百分比的计算方式是"进程占用cpu时间/cpu总时间"

        cputime (TIME):累积CPU时间, 格式"[DD-]hh:mm:ss"

        psr (PSR):当前分配给进程的处理器

        %mem (%MEM):该进程所占用的物理内存百分比

        args (COMMAND):表示进程的命令行。如果是内核线程,则使用方括号"[]"包围

        start (STARTED):进程启动的时间

        c (C):处理器利用率。目前,这是进程生命周期内使用百分比的整数值

        class (CLS):进程的调度类

        - not reported

        TS SCHED_OTHER

        FF SCHED_FIFO

        RR SCHED_RR

        B SCHED_BATCH

        ISO SCHED_ISO

        IDL SCHED_IDLE

        DLN SCHED_DEADLINE

        ? unknown value

        f (F):与进程关联的标志

        4 :标识进程的权限为 root

        1 :此子进程仅执行 (fock) 而没有实际执行 (exec)

        0 :此子进程仅执行 (fock) 后执行 (exec)

        s (S):表示进程当前的状态

        R:当前正在运行(RUNNING)

        S:睡眠(SLEEP)

        D:不可中断

        T:停止(STOP)

        Z:僵尸进程(ZOMBIE)

        pri:优先级;范围:0~139;其中实时进程:40~139;非实时进程:0~39;值越大优先级越高

        ni:nice值,值为-20到19,影响优先级的方式是PRI(new)=PRI(old)-NI,所以NI为负数的时候,越小

        将导致进程优先级越高

        pid (PID)

        ppid (PPID)

        rtprio:表示实时优先级;范围:1~99,值越大优先级越高

        rss (RSS):常驻内存集大小 ( KB ),任务使用的非交换物理内存

        vsz (VSZ):使用掉的虚拟内存量 ( KB )

        wchan (WCHAN):进程处于睡眠状态的内核函数的名称,如果进程正在运行,用"-"表示,如果进程

        是多线程的,而ps不显示线程,用"*"表示

        user (USER)

        gid (GID)

        uid (UID)

        unit (UNIT):显示一个进程所属的单元(支持systemd)

        tty (TT)

        sz (SZ):进程的核心映像的物理页面的大小。这包括文本、数据和堆栈空间

        stat (STAT) :该进程目前的状态 ( 中括号内的进程是内核进程 )

        R :running

        S :interruptable sleep

        D :uninterruptable sleep

        T :stopped

        Z :zombie

        s :表示该进程是session leader,即进程组的首进程。例如管道左边的进程,

        shell脚本中的shell进程

        + :前台进程

        l (小L):表示该进程是一个线程

        N :低优先级进程

        < :高优先级进程

        priority:优先级;范围:-100~39;其中实时进程:-100~-1;非实时进程:0~39;值越小优先级越高

        ni:nice值,值为-20到19,影响优先级的方式是PRI(new)=PRI(old)+NI,所以NI为负数的时候,越小

        将导致进程优先级越高

           

      • 常用选项:-l

        -l (小L):仅显示当前 shell 相关的进程

           

        [root@xiao ~]# ps -l

        F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

        4 S 0 21985 21981 0 80 0 - 29143 do_wai pts/1 00:00:00 bash

        0 R 0 22773 21985 0 80 0 - 37235 - pts/1 00:00:00 ps

           

        F :表示进程旗标 (process flags),标识进程所拥有的权限 ,常见号码有:

        4 :标识进程的权限为 root

        1 :此子进程仅执行 (fock) 而没有实际执行 (exec)

        0 :此子进程仅执行 (fock) 后执行 (exec)

        S:表示进程当前的状态

        R:当前正在运行(RUNNING)

        S:睡眠(SLEEP)

        D:不可中断

        T:停止(STOP)

        Z:僵尸进程(ZOMBIE)

        UID:拥有该进程用户的用户ID

        PID:进程号

        PPID:该进程父进程的进程好

        C:该进程使用掉的 CPU 资源百分比,百分比的计算方式是"进程占用cpu时间/cpu总时间"

        PRI :该进程执行的优先级,值越小,优先级越高,越早被调度类选中运行

        范围为:-40~99 :其中非实时进程:60~99 ;实时进程:-40~59

        NI:nice 值,值为-20到19,影响优先级的方式是PRI(new)=PRI(old)+NI,所以NI为负数的时候,越小将

        导致进程优先级越高

        ADDR :kernel function,指该进程在内存的那个部分,如果是 running,一般会显示 " - "

        SZ :该进程占用的内存空间

        WCHAN :当前进程是否正在运行," - " 表示运行

        TTY:表示属于哪个终端的进程

        TIME :使用 CPU 时间,注意,此进程花费 CPU 运行进程的时间,而不是系统时间

        CMD:表示进程的命令行。如果是内核线程,则使用方括号"[]"包围

       

    ps后grep问题:

       

    在ps后加上grep筛选目标进程时,总会发现grep自身进程也被显示出来

       

    [root@node2 1]# ps aux | grep "crond"

    root 77700 0.0 0.1 126276 1020 ? Ss Nov10 0:00 /usr/sbin/crond -n

    root 100534 0.0 0.0 112712 960 pts/0 R+ 22:03 0:00 grep --color=auto crond

       

    先解释下为何会如此。管道是bash创建的,bash创建管道后fork两个子进程,然后两子进程各自exec加载ps程序和grep程序,

    exec之后这两个子进程就称为ps进程和grep进程,所以ps和grep进程几乎可以认为是同时出现的,尽管ps进程作为管道的首

    进程(进程组首进程)它是先出现的,但是在ps出现之前确实两个进程都已经fork完成了。也就是说,管道左右两端的进程是同时

    被创建的(不考虑父进程创建进程消耗的那点时间),但数据传输是有先后顺序的,左边先传,右边后收

       

    要将grep自身进程排除在结果之外,方法有二:

       

    [root@node2 1]# ps aux | grep "crond" | grep -v "grep"

    root 77700 0.0 0.1 126276 1020 ? Ss Nov10 0:00 /usr/sbin/crond -n

       

    [root@node2 1]# ps aux | grep "cron[d]"

    root 77700 0.0 0.1 126276 1020 ? Ss Nov10 0:00 /usr/sbin/crond -n

       

    pidof :find the process ID of a running program

       

    pidof [-x] program [program..]

    -x :这导致程序也返回运行命名脚本的shell的进 pid

       

    uptime:Tell how long the system has been running

       

    使用 uptime 命令查看系统的运行时间,uptime 命令会读取 /proc/uptime 文件中的数据

    [root@shy ~]# cat /proc/uptime

    11420393.23 10802695.23

    第一列输出的是,系统启动到现在的时间(以秒为单位),这里简记为num1;

    第二列输出的是,系统空闲的时间(以秒为单位),这里简记为num2

       

    Note:

    很多很多人都知道第二个是系统空闲的时间,但是可能你不知道是,在SMP系统里,系统空闲的时间有时会是系统运行时间

    的几倍,这是怎么回事呢?

    因为系统空闲时间的计算,是把SMP算进去的,就是所你有几个逻辑的CPU(包括超线程)

       

    系统的空闲率(%) = num2/(num1*N) 其中N是SMP系统中的CPU个数

       

    [root@node2 1]# uptime

    22:08:07 up 4 days, 9:12, 2 users, load average: 0.00, 0.02, 0.05

       

    当前时间为 22:08:07,启动了 4 天9小时12分钟,当前有2个用户登陆,以及3个平均负载值

       

    所谓负载率(load),即特定时间长度内,cpu运行队列中的平均进程数(包括线程),一般平均每分钟每核的进程数小于3都认为正常,

    大于5时负载已经非常高。在UNIX系统中,运行队列包括cpu正在执行的进程和等待cpu的进程(即所谓的可运行runable)。

    在Linux系统中,还包括不可中断睡眠态(IO等待)的进程。运行队列中每出现一个进程,load就加1,进程每退出运行队列,

    Load就减1。如果是多核cpu,则还要除以核数

       

    • 例如,单核cpu上的负载值为"1.73 0.60 7.98"时,表示:

         

      最近1分钟:1.73表示平均可运行的进程数,这一分钟要一直不断地执行这1.73个进程。0.73个进程等待该核cpu

      最近5分钟:平均进程数还不足1,表示该核cpu在过去5分钟空闲了40%的时间

      最近15分钟:7.98表示平均可运行的进程数

         

      如果是多核cpu,则还要将结果除以核数。例如4核时,某个最近一分钟的负载值为3.73,则意味着有3.73个进程在运行队列中,

      这些进程可被调度至4核中的任何一个核上运行。最近1分钟的负载值为1.6,表示这一分钟内每核cpu都空闲(1-1.6/4)=60%的时间

      所以,load的理想值是正好等于CPU的核数,小于核数的时候表示cpu有空闲,超出核数的时候表示有进程在等待cpu,

      即系统资源不足

         

    top :display Linux processes

       

    • top [option]

         

      -p pid……:只监视具有指定 pid的进程;可以提供一个逗号分隔的列表,其中包含最多20个 pid

      -n number :显示刷新多少次退出 top

      -d secs :指定刷新时间间隔,默认为 3 秒

      -b :以批处理模式启动top,这对于将 top 的输出发送到其他程序或文件非常有用

      -u user :只显示具有与给定匹配的用户id或用户名的进程

         

    [root@node2 1]# top -b -n 1

    top - 22:27:54 up 4 days, 9:32, 2 users, load average: 0.02, 0.04, 0.05

    Tasks: 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie

    %Cpu(s): 5.9 us, 5.9 sy, 0.0 ni, 88.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

    KiB Mem : 999696 total, 422580 free, 104028 used, 473088 buff/cache

    KiB Swap: 2097148 total, 2044072 free, 53076 used. 705648 avail Mem

       

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    100569 root 20 0 157672 2068 1508 R 6.2 0.2 0:00.01 top

    1 root 20 0 125352 2756 1576 S 0.0 0.3 0:26.37 systemd

       

    us :用户进程占用 CPU 时间(用户空间)

    sy :内核进程占用 CPU 时间(内核空间)

    ni :low priority user mode (nice)(用户空间中低优先级进程的cpu占用百分比)

    id :CPU 内核空闲时间

    wa :等待 I/O 完成的时间

    hi :用于服务硬件中断的时间;servicing IRQs(不可中断睡眠,hard interruptible)

    si :用于服务软件中断的时间;servicing soft IRQs(可中断睡眠,soft interruptible)

    st :steal (time given to other DomU instances)(被偷走的cpu时间,一般被虚拟化软件偷走)

       

    PR :该进程执行的优先级,值越小,优先级越高,越早被调度类选中运行

    和 ps axo priority,rtprio 和 ps -l 相同

    NI:nice 值,值为-20到19,影响优先级的方式是PRI(new)=PRI(old)+NI,所以NI为负数的时候,越小将

    导致进程优先级越高

    VIRT :虚拟内存集

    RES :常驻内存集

    SHR :共享内存集

    S :进程状态

    R :running

    S :interruptable sleep

    D :uninterruptable sleep

    T :stopped

    Z :zombie

    s :表示该进程是session leader,即进程组的首进程。例如管道左边的进程,

    shell脚本中的shell进程

    + :前台进程

    l (小L):表示该进程是一个线程

    N :低优先级进程

    < :高优先级进程

    TIME+ :进程占用的cpu的累积时间(若开启了时间累积模式,则此处显示的是累积时间)

       

    • top 的内部命令:

      P :以占据的 CPU 百分比排序

      M :以占据的内存百分比排序

      N:以PID 来排序

      T :以累积占据 CPU 时长排序

      r :给予某个 PID 重新定制一个 nice 值

      l(小 L) :隐藏或显示 top 第一行的信息,系统运行时间,几个用户登录,CPU 1 ,5,15 分钟的使用情况

      t :改变 task 及 CPU 信息显示格式

      1 :CPU 分别显示,将多颗cpu 或多核 cup 分别显示

      m :改变 memory 信息显示格式

      q :退出 top

      d | s :修改刷新时间间隔

      k :终止指定的进程

      c:表示是否要展开进程的命令行

      x,y:x高亮排序的列,y表示高亮running进程

      u:仅显示指定用户的进程

      n:设置要显示最大的进程数量

      ?| h

      E :切换 内存 容量的单位

      H:表示是否要显示线程,默认不显示

      S:表示显示的cpu时间是否是累积模式,cpu累积模式下已死去的子进程cpu时间会累积到父进程中

         

    htop :interactive process viewer

       

    需要安装,EPEL 中有此命令的程序

       

    • htop [-dut]

         

      -p pid……:只监视具有指定 pid的进程;可以提供一个逗号分隔的列表,其中包含最多20个 pid

      -t :以树状图的形式显示进程

      -u USER :仅显示属于给定用户的进程

      -d DELAY:指定刷新时间间隔

         

    • htop 内部命令:

      Space :标记或取消标记进程。可以在多个进程上操作的命令,比如"kill"

      U:取消所有进程的标记(删除所有用空格键添加的标记)

      P :以占据的 CPU 百分比排序

      M :以占据的内存百分比排序

      T :以累积占据 CPU 时长排序

      PgUp, PgDn:向上或向下滚动一个窗口的进程列表

      Home:滚动到流程列表的顶部并选择第一个流程

      end:滚动到流程列表的底部并选择最后一个流程

      Numbers :输入 PID,选中的高亮显示将被移动到它

      Ctrl + L :刷新:重新绘制屏幕和重新计算值

      p :显示进程的完整路径

      s :跟踪进程系统调用:如果安装了strace,按下此键将把它附加到当前选择的进程,显示进程发出的系统

      调用的实时更新

      l(下 L):显示进程打开的文件:如果安装了lsof,按下此键将显示进程打开的文件描述符列表

         

      F3, /:递增地搜索所有显示进程的命令行

      F4, :增量进程过滤:在进程命令行中键入部分内容,只显示名称匹配的进程

      F5, t:树形视图:通过父母关系组织过程,并将它们之间的关系布置成树形;选择排序视图将退出树视图

      F6:在已排序视图中,选择用于排序的字段,也可以通过 '<' 和 '>' 进行访问。当前排序字段由标题中的高亮

      显示指示。在树视图中,展开或折叠当前子树。树节点中的"+"指示符表示它已折叠

      F7, ]:增加所选进程的优先级(减少 'nice'值)。这只能由超级用户来完成

      F8, [:降低所选进程的优先级(增加"nice"值)

      F9, k:"kill"进程:将在菜单中选择的信号发送给一个或一组进程。如果进程被标记,则向所有标记的进程

      发送信号。如果没有标记,则发送到当前选择的进程

      F10, q:退出 htop

         

      I:逆向排序

      +, - :在树视图模式下,展开或折叠子树。当一个子树被折叠时,一个"+"符号显示在进程名的左边

      a :设置CPU关联性:标记一个进程可以使用哪个CPU

      u:只显示指定用户拥有的进程

      F:"跟随"进程:如果排序顺序导致当前选择的进程在列表中移动,则使选择栏跟随它

      K:隐藏内核线程:防止属于内核的线程显示在进程列表中

      H:隐藏用户线程

      Arrows:上下选择进程行

      F1 ,h ,?:显示帮助信息

       

    分析系统负载(system load average):

       

    根据前文uptime中对系统负载(system load)的描述,分析一下这个top的结果

       

       

    上图中,系统负载非常之高,最近一分钟的负载量高达383.19,这表示这一分钟有383.19个进程正在运行或等待调度,如果是单核

    CPU,表示这一分钟要毫不停留地执行这么多进程,如果是8核CPU,表示这一分钟内平均每核心CPU要执行大概50个进程

       

    从load average上看,确实是非常繁忙的场景。但是看CPU的idle值为98.8,说明CPU非常闲。为什么系统负载如此高,

    CPU却如此闲?

       

    前面解释system load average的时候,已经说明过可运行的(就绪态,即就绪队列的长度)、正在运行的(运行态)和不可中断睡眠

    (如IO等待)的进程任务都会计算到负载中。现在负载高、CPU空闲,说明当前正在执行的任务基本不消耗CPU资源,大量的负载

    进程都在IO等待中

       

    可以从ps的进程状态中获取哪些进程是正在运行或运行队列中的(状态为R),哪些进程是在不可中断睡眠中的(状态为D)

       

    [root@node2 ~]# ps -eo stat,pid,ppid,comm --no-header |grep -E "^(D|R)"

    R 9 2 rcu_sched

    Rsl 662 1 vmtoolsd

    R+ 101157 100877 ps

       

    vmstat:Report virtual memory statistics

       

    Note:vmstat 是从 /proc/vmstat 文件中提取的信息

       

    vmstat [options] [delay [count]]

       

    -s :显示各种事件计数器和内存统计信息的表

    -f:统计自开机起fork的次数。包括fork、clone、vfork的次数。但不包括exec次数

    -d:显示磁盘统计信息

    -S character:1000 (k), 1024 (K), 1000000 (m), or 1048576 (M) bytes

       

    delay:刷新时间间隔,若不指定,则只统计一次信息就退出vmstat

    count:总共要统计的次数

       

    [root@node2 ~]# vmstat

    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

    r b swpd free buff cache si so bi bo in cs us sy id wa st

    2 0 53076 399964 680 493560 0 0 26 8 101 46 0 0 100 0 0

       

    procs:

    r: 等待队列中的进程数

    b: 不可中断睡眠的进程数

       

    memory:

    swpd: 虚拟内存使用总量

    free: 空闲内存量

    buff: buffer占用的内存量(buffer用于缓冲)

    cache: cache占用的内存量(cache用于缓存)

       

    swap:

    si:从内存加载到swap分区的数据流量,单位为"kb/s"

    so: 从swap分区写到内存的数据流量,单位为"kb/s"

       

    io:

    bi: 从块设备读取到数据的速率,单位为blocks/s

    bo: 写数据到块设备的速率,单位为blocks/s

       

    System:

    in: 每秒中断数,包括时钟中断数量

    cs: 每秒上下文切换次数

       

    CPU:统计的是cpu时间百分比,具体信息和top的cpu统计列一样

    us :用户进程占用 CPU 时间(用户空间)

    sy :内核进程占用 CPU 时间(内核空间)

    id :CPU 内核空闲时间

    wa :等待 I/O 完成的时间

    st :steal (time given to other DomU instances)(被偷走的cpu时间,一般被虚拟化软件偷走)

       

    [root@node2 ~]# vmstat -d

    disk- ------------reads------------ ------------writes----------- -----IO------

    total merged sectors ms total merged sectors ms cur sec

    sda 36566 2620 4430686 764940 66105 41780 6092197 534416 0 505

    sr0 79225 0 15665252 234960 0 0 0 0 0 165

    dm-0 33979 0 4383391 752477 73328 0 5807531 705149 0 482

    dm-1 3075 0 28304 93538 34171 0 273368 5601228 0 19

    dm-2 110 0 2419 317 337 0 6822 8136 0 4

       

    reads :

    total : 成功读取的总大小

    merged : 分组读取的次数( 即一次 I/O )

    sectors : 成功读取的扇区数

    ms : 读取消耗的时间

    Writes

    total : 成功写入磁盘的总大小

    merged : 分组写入磁盘的次数 ( 即一次 I/O )

    sectors : 成功写入扇区的数量

    ms : 写入磁盘消耗的时间

    IO:

    cur:正在进行的 I/O

    sec:I/O 花费的秒数

       

    iostat:Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.

       

    Note:可能需要安装 sysstat

       

    iostat主要统计磁盘或分区的整体使用情况。也可以输出cpu信息,甚至是NFS网络文件系统的信息。同vmstat/sar一样,

    第一次统计的都是自系统开机起的平均统计信息

       

    iostat [ -c ] [ -d ] [ -n -h ][ -k | -m ] [ -p [device][,...] ] [ interval [ count ] ]

       

    -c:统计cpu信息

    -d:统计磁盘信息

    -n:统计NFS文件系统信息

    -h:使NFS统计信息更人类可读化

    -k:指定以kb/s为单位显示

    -m:指定以mb/s为单位显示

    -p:指定要统计的设备名称

    -y:指定不显示第一次统计信息,即不显示自开机起的统计信息。

    interval:刷新时间间隔

    count:总统计次数

       

    [root@node2 ~]# iostat

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    avg-cpu: %user %nice %system %iowait %steal %idle

    0.14 0.00 0.25 0.08 0.00 99.53

       

    Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

    sda 0.26 5.67 7.77 2215231 3039144

    scd0 0.20 20.04 0.00 7832626 0

    dm-0 0.27 5.61 7.41 2191583 2896811

    dm-1 0.10 0.04 0.35 14152 136684

    dm-2 0.00 0.00 0.01 1209 3411

       

    avg-cpu:

    %user:CPU处在用户模式下的时间百分比

    %nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比

    %system:CPU处在系统模式下的时间百分比

    %iowait:CPU等待输入输出完成时间的百分比

    %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比

    %idle:CPU空闲时间百分比

       

    tps:每秒transfer速率(transfers per second),一次对物理设备的IO请求为一个transfer,但多个逻辑请求可能只

    组成一个transfer

    Blk_read/s:每秒读取的block数量

    Blk_wrtn/s:每秒写入的block总数

    Blk_read:读取的总block数量

    Blk_wrtn:写入的总block数量

       

    sar:Collect, report, or save system activity information

       

    Note:可能需要安装 sysstat

       

    sar是一个非常强大的性能分析工具,它可以获取系统的cpu/等待队列/磁盘IO/内存/网络等性能指标

       

    功能多的必然结果是选项多,应用复杂,但只要知道一些常用的选项足以

       

    sar [options] [-o filename] [delay [count] ]

       

    -A:显示系统所有资源运行状况

    -B:查看内存分页信息

    -b:显示磁盘IO和tranfer速率信息,和iostat的信息一样,是总体IO统计信息

    -d:显示磁盘在刷新时间间隔内的活跃情况,可以指定一个或多个设备,和-b不同的是,它显示的是单设备的IO、transfer

    信息;建议配合-p使用显示友好的设备名,否则默认显示带主次设备号的设备名

    -P:显示指定的某颗或某几颗cpu的使用情况。指定方式为,-P 0,1,2,3或ALL

    -u:显示每颗cpu整体平均使用情况。-u和-P的区别通过下面的示例很容易区分

    -r:显示内存在刷新时间间隔内的使用情况

    -n:显示网络运行状态。后可接DEV/NFS/NFSD/ALL等多种参数

    :DEV表示显示网路接口信息,NFS和NFSD分别表示显示NFS客户端和服务端的流量信息,ALL表示显示所有信息

    -q:显示等待队列大小

    -o filename:将结果存入到文件中

    delay:状态刷新时间间隔

    count:总共刷新几次

       

    统计网络流量:

       

    /proc/net/dev 文件保存了网络流量的数据信息

       

    • 第一种方法是查看 /proc/net/dev:

         

    [root@node2 ~]# cat /proc/net/dev

    Inter-| Receive | Transmit

    face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed

    ens37: 296178912 425890 0 6 0 0 0 0 36129103 178334 0 0 0 0 0 0

    lo: 116280 1396 0 0 0 0 0 0 116280 1396 0 0 0 0 0 0

    ens33: 2200550 27661 0 6 0 0 0 0 0 0 0 0 0 0 0 0

       

    关注列:receive和transmit分别表示收包和发包,关注每个网卡的bytes即可获得网卡的情况。写一个脚本计算每秒的差值即为网络流量

       

    • 第二种方法是使用 sar -n DEV :

         

    [root@node2 ~]# sar -n DEV

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    02:50:02 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

    03:00:01 PM ens37 0.38 0.11 0.03 0.02 0.00 0.00 0.00

    03:00:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    03:00:01 PM ens33 0.02 0.00 0.00 0.00 0.00 0.00 0.00

    Average: ens37 0.38 0.11 0.03 0.02 0.00 0.00 0.00

    Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    Average: ens33 0.02 0.00 0.00 0.00 0.00 0.00 0.00

       

    rxpck/s:每秒收到的包数量

    txpck/s:每秒发送的包数量

    rxkB/s:每秒收到的数据,单位为kb

    txkB/s:每秒发送的数据,单位为kb

    rxcmp/s:每秒收到的压缩后的包数量

    txcmp/s:每秒发送的压缩后的包数量

    rxmcst/s:每秒收到的多播包数量

       

    内存和交换空间监控:

       

    可以直接查看 /proc/meminfo 文件,获取内存和交换空间的数据

       

    [root@node2 ~]# sar -r 3 2

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    03:22:36 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty

    03:22:39 PM 393000 606696 60.69 680 421684 285648 9.22 293328 156936 0

    03:22:42 PM 393000 606696 60.69 680 421684 285648 9.22 293328 156936 0

    Average: 393000 606696 60.69 680 421684 285648 9.22 293328 156936 0

       

    kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间

    kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间

    %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比

    kbbuffers和kbcached:这两个值就是free命令中的buffer和cache

    kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)

    %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比

    kbdirty:表示内存中脏页的大小,即内存中还有多少应该刷新到磁盘的数据

       

    内存分页监控:

       

    [root@node2 ~]# sar -B 3 2

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    03:26:25 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff

    03:26:28 PM 0.00 0.00 23.83 0.00 10.74 0.00 0.00 0.00 0.00

    03:26:31 PM 0.00 0.00 9.06 0.00 8.72 0.00 0.00 0.00 0.00

    Average: 0.00 0.00 16.44 0.00 9.73 0.00 0.00 0.00 0.00

       

    pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)

    pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)

    fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)

    majflt/s:每秒钟产生的主缺页数

    pgfree/s:每秒被放入空闲队列中的页个数

    pgscank/s:每秒被kswapd扫描的页个数

    pgscand/s:每秒直接被扫描的页个数

    pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数

    %vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

       

    进程队列长度和平均负载状态监控:

       

    [root@node2 ~]# sar -q 3 2

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    03:27:53 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked

    03:27:56 PM 2 126 0.00 0.01 0.05 0

    03:27:59 PM 2 126 0.00 0.01 0.05 0

    Average: 2 126 0.00 0.01 0.05 0

       

    runq-sz:等待队列的长度,不包括正在运行的进程

    plist-sz:任务列表中的进程数量,即总任务数

    ldavg-N:过去1分钟、5分钟、15分钟内系统的平均哎

    blocked:当前因为IO等待被阻塞的任务数量

       

    I/O和传送速率监控:

       

    [root@node2 ~]# sar -b 3 2

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    03:28:51 PM tps rtps wtps bread/s bwrtn/s

    03:28:54 PM 0.00 0.00 0.00 0.00 0.00

    03:28:57 PM 0.00 0.00 0.00 0.00 0.00

    Average: 0.00 0.00 0.00 0.00 0.00

       

    tps:每秒钟物理设备的 I/O 传输总量

    rtps:每秒钟从物理设备读入的数据总量

    wtps:每秒钟向物理设备写入的数据总量

    bread/s:每秒钟从物理设备读入的数据量,单位为 块/s

    bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s

       

    系统交换活动信息监控:

       

    [root@node2 ~]# sar -W 3 2

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    03:29:54 PM pswpin/s pswpout/s

    03:29:57 PM 0.00 0.00

    03:30:00 PM 0.00 0.00

    Average: 0.00 0.00

       

    pswpin/s:每秒系统换入的交换页面(swap page)数量

    pswpout/s:每秒系统换出的交换页面(swap page)数量

       

    设备使用情况监控:

       

    [root@node2 ~]# sar -d 3 1 -p

    Linux 3.10.0-693.el7.x86_64 (node2.song.com)         11/12/2019         _x86_64_        (1 CPU)

       

    03:33:58 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

    03:34:01 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    03:34:01 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    03:34:01 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    03:34:01 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    03:34:01 PM centos-home 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

       

    Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

    Average: sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    Average: sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    Average: centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    Average: centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    Average: centos-home 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

       

    tps:transfer per second,每秒的transfer速率,一次物理IO请求算一次transfer,但多次逻辑IO请求可能组合起来才算

    一次transfer

    rd_sec/s:每秒读取的扇区数,扇区大小为512字节

    wr_sec/s:每秒写入的扇区数

    avgrq-sz:请求写入设备的平均大小,单位为扇区。(The average size (in sectors) of the requests that were issued to

    the device)

    avgqu-sz:请求写入设备的平均队列长度。(The average queue length of the requests that were issued to the device.)

    await:写入设备的IO请求的平均(消耗)时间,单位微秒(The average time for I/O requests issued to the device

    to be served.)

    svctm:不可信的列,该列未来将被移除,所以不用管

    %util:最重要的一列,显示的是设备的带宽情况。该列若接近100%,说明磁盘速率饱和了

       

    dstat:用于生成系统资源统计的工具

       

    Note:可能需要安装 dstat

       

    dstat [-afv] [options..] [delay [count]]

       

    -c :启用cpu统计信息(系统、用户、空闲、等待、硬件中断、软件中断)

    -C 0,3,total

    -d :启用磁盘状态(读、写)

    -D :total,sda1

    -g :启用页面状态(page in,page out)

    -i :启用中断数据

    -I 5,10(大 i )

    -l (小 L):启用负载平均状态

    -m :启用内存统计(使用、缓冲区、缓存、空闲)

    -n :启用网络统计信息(接收、发送)

    -N eth1,total

    -p :启用进程状态(可运行、不可中断、新建)

    -r :启用I/O请求统计(读、写请求)

    -s :启用交换状态(已使用,空闲)

    -S swap1,total

    -y :启用系统状态(中断、上下文切换)

    --aio :启用aio stats(异步I/O)

    --fs :启用文件系统统计信息(打开文件、inode)

    --ipc :启用ipc统计信息(消息队列、信号量、共享内存)

    --lock :启用文件锁定状态(posix、flock、read、write)

    --tcp , --udp , --unix , --raw , --socket

    --top-io :显示最占用 io 的进程

    --top-cpu :显示最占用 cpu 的进程

    --top-mem :显示最占用 memory 的进程

    --top-lantency :显示延迟最大的进程

       

    glances :一个跨平台的基于 curses 的系统监控工具

       

    Note:可能需要安装 glances

       

    glances [OPTIONS]

       

    -C CONF_FILE, --config CONF_FILE:指定配置文件

    -b:以Byte为单位显示网上数据速率

    -d :启用调试模式 ( 日志文件为 /tmp/glances.log )

    -t TIME :设置刷新的时间 ( 默认为 3 秒 )

    --hide-kernel-threads :在进程列表中隐藏内核线程

    --tree :进程以数的形式显示

    --fs-free-space:显示系统空闲空间而不是已使用空间

    --process-short-name:强制进程使用短名称

    -f PROCESS_FILTER, --process-filter PROCESS_FILTER:设置进程模式匹配(正则表达式)

    -q, --quiet

    --enable-history:启动 history 模式(需要 python-matplotlib 库)

       

    服务器端

    -s :在服务器模式下运行 glances

    -B BIND_ADDRESS :将服务器绑定到给定的 IPv4/IPv6 地址或主机名

    --password :定义 client/server 密码

    -p PORT, --port PORT : 定义 client/server TCP 端口 [默认为: 61208]

       

    客户端

    -c IPADDR:客户端模式运行 glances

    --password :输入 client/server 密码

    -p PORT, --port PORT : 指定 client/server TCP 端口 [默认为: 61208]

       

    web端

    -w, --webserver:run Glances in web server mode (依赖 python2-bottle)

    -B BIND_ADDRESS :将服务器绑定到给定的 IPv4/IPv6 地址或主机名

    --password :输入 client/server 密码

    -p PORT, --port PORT : 指定 client/server TCP 端口 [默认为: 61208]

       

    glances 内部操作命令:

       

    ENTER: Edit the process filter pattern

       

    c:根据CPU使用率对进程进行排序

    i:按照进程的 I/O 速率排序

    m:依据进程对内存的使用率排序

    p:按照进程名称排序

    u :按照 USER 排序进程

    t:按进程使用CPU时间排序 (TIME+)

    a:进程列表自动排序

       

    1:在全局CPU和每个CPU状态之间切换

    g:生成当前历史记录的图表

       

    b:网络I/O在bit/s或Byte/s之间进行切换

    d:显示或隐藏磁盘 I/O 状态

    f:显示或隐藏文件系统状态

    F:在使用的文件系统和空闲空间之间进行切换

    h

    l(小L):显示或隐藏日志信息

    n:显示或隐藏网络状态

    q

    r:重置历史

    U:查看累计网络I/O

    w:删除已完成的警告日志消息

    x:删除已完成的警告和关键日志消息

    0:Task的cpu使用量将除以cpu的总数

    /:Switch between short name/command line (processes name)

       

    pmap:report memory map of a process

       

    pmap [options] pid [...]

       

    -x:显示详细格式的信息

       

    另一种查看方式:cat /proc/PID/maps

       

       

       

       

       

  • 相关阅读:
    SQL Server 删除重复数据只保留一条
    英语冠词有哪些?
    英语基本语法
    统一身份认证服务(客户端用户身份验证)
    解决MVC中使用BundleConfig.RegisterBundles引用Css及js文件发布后丢失的问题
    统一身份认证服务 源码(客户端)
    MVC 如何设定默认默认路由为指定的Area下的某个action(笔记)
    MongoDB安装笔记
    消息队列第二篇:MessageQueue实战(课程订单)
    消息队列第一篇:MessageQueue介绍
  • 原文地址:https://www.cnblogs.com/xiaosongblog/p/13681638.html
Copyright © 2011-2022 走看看