关于linux:⭐Linux实战技能100讲个人笔记-8-系统状态查看

44次阅读

共计 7117 个字符,预计需要花费 18 分钟才能阅读完成。

[TOC]

综合状态

top 命令

显示过程详细信息

top [选项]

选项
    -p <pid>        只查看指定过程号的信息
    -u, -U <user>    只查看属于指定用户的过程信息
    -d <sec>        设置主动刷新延迟时间, 默认是每 3 秒主动刷新

    -b                批量操作模式, 罕用于脚本. 个别与 -n 指定输入次数, -d 指定间隔时间
    -n                top 最大输入次数

运行界面可执行的命令
    展现数据
    1        具体展现每个逻辑 cpu 的应用状况.
    c        展现具体的 Command 列
    
    m        切换内存信息展现(在具体数值和百分比之间切换)
    
    E        切换内存 (Mem 和 Swap 行) 的单位
    e        切换内存 (VIRT, RES, SHR) 的单位(byte, m, g, t, p)

    
    排序
    M        CPU 应用从大到小
    P        内存应用从大到小
    
    交互
    s < 刷新提早 >    自定义刷新延迟时间, 默认是每 3 秒主动刷新.
字段解释

第一行
    top - 22:39:55         up 7:07,         2 users, load average: 1.39, 1.22, 1.16
                      距本次开机已运行时长           均匀负载       1 分钟 5 分钟  15 分钟
                      
第二行(以后显示的过程数量及运行状态)
    Tasks: 202 total,        3 running,          199 sleeping,    0 stopped,    0 zombie
          以后共 202 个过程        有 3 个处于运行状态    199 个处于休眠状态

第三行(cpu 应用状况)
    %CPU(s): 18.3 us,                29.0 sy,            0.0 ni,     52.1 id,    0.2 wa,        0.0 hi,    0.4 si,    0.0 st
            cpu 用于用户计算的比例     用于过程状态交互的比例            闲暇比例    IO 期待比例

第四行(内存状态)
    KiB Mem:    1361956 total,    145060 free,    689800 used,    527096 buff/cache
                总内存量         未被应用的内存    已应用的内存        用于读写缓存的内存
                
第五行(替换分区状态)
    Kib Swap:    2097148 total,    2077948 free,    19200 used.             386368 avail Mem
                替换分区大小                        已应用的替换分区        可用内存数量.

第六行
    PID    USER    PR                    NI                VIRT    RES    SHR     S      %CPU    %MEM    TIME+            COMMAND
                由内核管制(受 NI 影响)    过程优先级(NICE)                    状态                     过程理论运行工夫
                                                            

均匀负载: 掂量零碎的忙碌水平
        现实状态:每个 cpu 上都有一个沉闷过程,即均匀负载数等于 cpu 数
        过载经验值:均匀负载高于 cpu 数量 70% 的时候
        
第六行的
    RES: 常驻内存, 即虚拟内存理论映射到物理内存的大小.
    SHR: 占用的内存中属于共享内存的大小. 比方一些内部动静库仅会在内存中加载一份, 多个过程在其虚拟内存空间中这部分地址理论就映射到同一块物理内存地址. 
         也就是要计算独自某个过程占用的内存大小, 应该用 RES - SHR
          这部分可参考: https://www.orchome.com/298
          若是将共享内存占用的内存大小平摊给依赖它的过程, 此时各个过程占用内存 PSS = RES + SHR/ 共享过程数量
          能够装置 smem 以不便查看过程的 PSS 值.
     

    S: 过程的状态, 其可能的取值如下
            T        stopped 状态
            R        running 状态
            S        sleeping 状态

ps 命令

ps(process status)

查看以后运行的过程的一个快照

ps [选项]

罕用示例
    ps -ef        
    ps -eLf        查看所有线程信息(会包含 LWP 和 NLWP 列)
    
列解释
    UID        无效用户 id
    PID        过程号
    PPID    父过程号
    C
    STIME    
    TTY        执行该过程的终端. pts 是虚构终端, tty 是字符终端(init 3).
    TIME    过程运行工夫(该值不具备参考价值)
    
    LWP        轻量级过程(线程)
    NLWP
    
选项
    基本参数
    -A, -e            显示所有过程(默认只能查看到以后终端下的过程. 要了解, 过程是树形构造的.)
    -a                显示归属在终端下的所有过程
    -p < 过程号 >      只显示指定过程号的相干信息
    -C < 过程名 >          
    
    过滤
    -U <user>        # 依据创立过程的用户来筛选
    -u <user>        # 依据过程所属用户来筛选(和 -U 是有区别的)
    -C <command>    # 依据过程执行的命令 (不蕴含参数) 来准确匹配
    -L <pid>        # 查看特定过程的所有线程
    
    输入格局
    -f                # 具体输入
    -F                # 更具体输入
    -o                # 自定义字段, 可应用的字段如下
                    # pid,user,args, cmd, tty, comm, command, fname, ucmd, ucomm, lstart, bsdstart, start 等
    u                # 面向用户的字段, 蕴含 %CPU, %MEM 等信息
    
    排序
    --sort [-+]<item>    # + 示意从小到大排序(默认)
                        # - 示意从大到小排序
                        # 以下能够混合应用, 比方 --sort -pcpu,+pmem
                        # pcpu        按 cpu 应用排序
                        # pmem        按内容使用率排序
    
罕用
    规范语法 - 查看所有过程信息
    ps -e        # 简略信息
    ps -ef        # 详细信息
    ps -eF        # 残缺信息(蕴含内存占用等)
    ps -e u        # 面向用户的信息(蕴含内存占用, CPU 应用等)
    
    BSD 语法 - 查看所有过程信息
    ps ax        # 简略信息
    ps aux        # 残缺信息
    
    显示过程的树形构造
    ps -ejH
    ps axjf

    
输入列字段
    PID        过程 ID
    TTY        所在终端
    TIME    命令所占用的 CPU 解决工夫
    CMD        过程所运行的命令

参考: https://blog.csdn.net/baidu_3…

sar 命令

查看零碎综合状态

sar [选项] [<interval>  <count>]
            采样距离    采样次数

示例
    sar -u 1 10
    sar -r 1 10
    sar -b 1 10
    sar -dp 1 10        # 查看所有块设施的读写状况, 每秒采样 1 次, 共采样 10 次.

选项
    文件
    -f <file>    # 从指定文件 (二进制格局) 获取数据起源(若未指定采样距离, 默认是当天的统计信息)
                # -f /var/log/sysstat/sa02
                # -f /var/log/sa/sa02            # Centos 6
    -o <file>    # 指定采样距离后, 将采样数据写入指定文件(二进制格局)
    
    工夫过滤
    -s <hh:mm:ss>    # 指定天的开始工夫(不蕴含, 因而默认需往前推 10 分钟)
    -e <hh:mm:ss>    # 指定天的完结工夫

    资源
    -u              # 报告 CPU 利用率状况, 可用 ALL 参数来输入更多字段
    -q             # 报告工作队列长度和均匀负载(1,5,15)
    -r             # 输入内存和替换空间的统计信息
    -b             # 总体 IO
    -d             # 通常配合 -p. 报告每一个块设施的活动状态.
    
    
    显示格局
    -p             # 通常配合 -d. 打印出块设施名, 而非默认的 "device m-n" 格局.

零碎默认保留最近 28 天的日志, 默认地位 /var/log/sa/

  • sa 二进制数据(应用 sar -f 读取数据)
  • sar 文本数据

sar -n DEV 输入后果阐明

IFACE:LAN 接口
rxpck/s:每秒钟接管的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接管的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接管的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接管的多播数据包
rxerr/s:每秒钟接管的坏数据包
txerr/s:每秒钟发送的坏数据包
coll/s:每秒抵触数
rxdrop/s:因为缓冲充斥,每秒钟抛弃的已接管数据包数
txdrop/s:因为缓冲充斥,每秒钟抛弃的已发送数据包数
txcarr/s:发送数据包时,每秒载波谬误数
rxfram/s:每秒接管数据包的帧对齐谬误数
rxfifo/s:接管的数据包每秒 FIFO 过速的谬误数
txfifo/s:发送的数据包每秒 FIFO 过速的谬误数

配置 /etc/sysconfig/sysstat

# 保留的历史文件(单位是天), 超过 28 天的则会分目录寄存
HISTORY=28

详解

狐疑 CPU 存在瓶颈,可用 sar -usar -q 等来查看

狐疑内存存在瓶颈,可用 sar -Bsar -rsar -W 等来查看

狐疑 I / O 存在瓶颈,可用 sar -bsar -usar -d 等来查看

CPU 应用状况 -u

# sar -u

09:50:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:00:01 AM     all      1.56      0.00      0.75      0.04      0.00     97.65
10:10:01 AM     all     10.66      0.00      5.20      0.09      0.00     84.05
10:20:01 AM     all     55.09      0.00     25.19      0.07      0.00     19.65
10:30:01 AM     all     49.52      0.00     22.84      0.09      0.00     27.55
10:40:01 AM     all     43.41      0.00     20.48      0.11      0.00     36.00
10:50:01 AM     all     39.49      0.00     19.01      0.12      0.00     41.38
Average:        all     33.19      0.00     15.53      0.09      0.00     51.20
  • %user: 用户空间的 CPU 应用
  • %nice: 扭转过优先级的过程的 CPU 使用率
  • %system: 内核空间的 CPU 使用率
  • %iowait: CPU 期待 IO 的百分比
  • %steal: 虚拟机的虚拟机 CPU 应用的 CPU
  • %idle: 闲暇的 CPU

情景:

  • %iowait 太高, 则示意 I/O 存在瓶颈
  • %idle 太低, 则示意 CPU 使用率高

队列长度与均匀负载 -q

# sar -q

09:50:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
10:00:01 AM         5       338      0.24      0.14      0.12         0
10:10:01 AM        11       416      3.90      1.54      0.71         0
10:20:01 AM        15       473     11.36     11.03      6.26         1
10:30:01 AM         7       474      8.14      9.77      8.00         0
10:40:01 AM        12       473      6.39      7.26      7.53         0
10:50:01 AM        15       453      4.53      5.88      6.94         0
Average:           11       438      5.76      5.94      4.93         0

输入内容详解:

  • runq-sz:运行队列的长度(期待运行的过程数);
  • plist-sz:过程列表中过程(processes)和线程(threads)的数量;
  • ldavg-1:最初 1 分钟的零碎均匀负载;
  • ldavg-5:过来 5 分钟的零碎均匀负载;
  • ldavg-15:过来 15 分钟的零碎均匀负载;
  • blocked:以后阻塞的过程数量,在期待 IO 实现;

输入内存和替换空间 -r

# sar -r

09:50:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
10:00:01 AM   8902892  23876908     72.84      2080  12331564   7143804     21.79   7354428   7190496       224
10:10:01 AM   8496696  24283104     74.08      2080  12394360   7846800     23.94   7685000   7169248      1980
10:20:01 AM   7986260  24793540     75.64      2080  12430912   8486280     25.89   7984868   7146152      2120
10:30:01 AM   7804560  24975240     76.19      2080  12488140   8087856     24.67   7975640   7158088      1592
10:40:01 AM   7588988  25190812     76.85      2080  12588572   8190552     24.99   7976948   7214956      1388
10:50:01 AM   7534756  25245044     77.01      2080  12639652   7722896     23.56   7879740   7228132      1176
Average:      8052359  24727441     75.43      2080  12478867   7913031     24.14   7809437   7184512      1413

输入内容详解:

  • kbmemfree:这个值和 free 命令中的 free 值基本一致,所以它不包含 buffercache的空间;
  • kbmemused:这个值和 free 命令中的 used 值基本一致,所以它包含 buffercache的空间;
  • %memused:这个值是 kbmemused 和内存总量 (不包含 swap) 的一个百分比;
  • kbbuffers:这两个值就是 free 命令中的buffer
  • kbcached:这两个值就是 free 命令中的cache
  • kbcommit:保障以后零碎所须要的内存,即为了确保不溢出而须要的内存(RAM + swap);
  • %commit:这个值是 kbcommit 与内存总量 (包含 swap) 的一个百分比;
  • kbactive:流动内存量(以千字节计算)(最近应用的内存,通常不会被发出,除非相对必要);
  • kbinact:不流动内存量(以千字节计算的内存(最近应用的内存),更有资格被用于其余目标);
  • kbdirty:以 KB 为单位的内存量期待写入磁盘;

pidstat 命令

磁盘 IO

倡议排查程序

  1. 查看设施总体利用率状况

    iostat -xt 1
  2. 查看是哪个过程在占用磁盘 IO

    iotop

iostat 命令

疾速查看磁盘设施的以后应用忙碌水平

查看 CPU 及设施 / 分区的应用状况

iostat [options] [<interval> [ <count>] ]


iostat -xcdmt 1

选项
    -x: 显示扩大状态(蕴含 -c, -d, -k)
    -t: 显示每个报告产生时的工夫
    
    -m: 以兆字节每秒为单位,而不应用块每秒
    -k: 以千字节每秒为单位,而不应用块每秒
    -c: 显示 CPU 应用状况
    -d: 显示设施利用率

重点关注如下指标:

标示 阐明
%iowait CPU 期待 IO 工夫占用 CPU 总工夫的百分比
Device 监测设施名称
rMB/s 每秒理论读取的大小,单位为 KB
wMB/s 每秒理论写入的大小,单位为 KB
avgrq-sz 需要的均匀大小区段
avgqu-sz IO 申请的均匀队列长度
await IO 申请均匀响应工夫(队列排队工夫 +IO 解决工夫),个别零碎 I/O 响应工夫应该低于 5ms,如果大于 10ms 就比拟大了
svctm IO 解决工夫,即寻道 + 旋转延迟时间;
%util 磁盘忙碌水平。例如,如果统计距离 1 秒,该设施有 0.8 秒在解决 I/O,而 0.2 秒闲置,那么该设施的 %util = 0.8/1 = 80%;

iotop 命令

疾速查看各个过程对于磁盘 IO 的读写状况

iotop

选项 
    -d SEC, --delay=SEC        #设置显示的距离秒数,反对非整数值    
    -p PID, --pid=PID        #只显示指定 PID 的信息
    -u USER, --user=USER    #显示指定的用户的过程的信息

    -o, --only                #显示过程或者线程实际上正在做的 I /O,而不是全副的,能够随时切换按 o
    -a, --accumulated        #显示从 iotop 启动后每个线程实现了的 IO 总数
    
    # 非交互模式
    -b, --batch            #运行在非交互式的模式
    -t, --time            # batch 模式, 在每一行前增加一个以后的工夫
    -n NUM, --iter=NUM        #在非交互式模式下,设置显示的次数,# 比拟少用的选项
    --version            #显示版本号
    -h, --help            #显示帮忙信息
    -P, --processes        # 只显示过程(默认会展现所有的线程)  (倡议以默认的查看所有线程的形式, 否则会有脱漏)
    -k, --kilobytes        #以千字节显示(默认是依照 human 形式)
    -q, --quiet            #suppress some lines of header (implies --batch). This option can be specified up to three times to remove header lines.
    -q     column names are only printed on the first iteration,
    -qq    column names are never printed,
    -qqq   the I/O summary is never printed.


操作按键
    a: 显示累积使用量 (--accumulated)
    o: 只显示有 io 的过程 / 线程 (--only)
    p: 过程 / 线程显示切换 PID/TID, 默认是 TID (--processes)    
    i:扭转线程的优先级
    r:反向排序
    应用 left 和 right 扭转排序
    q:退出 

网络

倡议排查程序

  1. 查看网络总体应用状况

    nload -u h eth0
  2. 查看是哪个过程占用网络

    nethogs
  3. 查看是哪个 ip:port 在占用网络

    iftop -i eth0 -nNPB

    须要依据端口号来判断.

nload 命令

查看总体带宽应用状况

nload [选项] [<device>]

阐明
    不指定 <device> 时会显示所有网络设备

选项
    -t <interval>                # 刷新距离(毫秒), 默认是 500 毫秒, 设置小于 100 毫秒时会不准确.
    -u h|H|b|B|k|K|m|M|g|G        # 每秒的流量单位, 默认是 k.
                                # h     auto, human readable
                                # b        Bit/s                                
                                # k        kBit/s
                                # m        MBit/s
                                # g        GBit/s
                                # 大写的 bkmg 是用 Byte 为单位, 而非 Bit.
    
    -U h|H|b|B|k|K|m|M|g|G        # 累计流量单位, 默认是 M.

nethogs

依照过程统计流量

nethogs [选项] [device [device ...]]

运行时交互
    m        # 批改单位
    r         # 按流量排序
    s         # 按发送流量排序
    q         # 退出命令提示符

选项 | 参数
    -v <mode>    # 切换显示单位,默认是默认是 KB/s(0 示意 KB/s,1 示意 KB,2 示意 B,3 示意 MB)-c            # 检测次数(前面间接跟数字)-a            # 检测所有的设施
    -d            # 提早更新刷新速率,以秒为单位。默认值为 1.  
    -t            # 跟踪模式.  
    -b            # bug 狩猎模式 — — 意味着跟踪模式.  
    -V             # 显示版本信息,留神是大写字母 V.  
    -p             # 混合模式(不举荐).  
    device        # 要监督的设施名称. 默认为 eth0  

iftop 命令

依照 ip:port 统计流量

iftop [选项]

选项
    网卡
    -i < 网卡 >      # 指定只解析网络接口

    主机名
    -n            # ip 不解析成域名
    
    端口
    -P            # 显示通信单方的端口号
    -N            # 端口号不解析成服务名
    
    -B            # 应用 byte 而不是默认的 bit
    
输入后果解释
    第三列
            51Kb         40.0Kb         22.0Kb
        本机    2s             10s             40s    的均匀流量

epel 源提供.

正文完
 0