linux性能监控工具篇

56次阅读

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

监控类别 监控命令
CPU ps, top, sar
内存 free, vmstat, sar
磁盘空间 df, du, fdisk
磁盘 I /O iostat
网络 I /O netstat, sar, ethool

系统监控自带常用文件 /proc 目录

  • /proc/loadavg
    保存了系统负载的平均值,其前三列分别表示最近 1 分钟、5 分钟及 15 分的平均负载。反映了当前系统的繁忙情况。
  • /proc/meminfo
    当前内存使用的统计信息,常由 free 命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;
  • /proc/diskstats
    磁盘设备的磁盘 I / O 统计信息列表;
  • /proc/net/dev
    网络流入流出的统计信息,包括接收包的数量、发送包的数量,发送数据包时的错误和冲突情况等。
  • /proc/cpuinfo
    查看 cpu 的详细信息
    cat /proc/cpuinfo | grep 'processor'

>> ps

aux 输出格式

  • USER:进程拥有者
  • PID:pid
  • %CPU:占用的 CPU 使用率
  • %MEM:占用的内存使用率
  • VSZ:占用的虚拟内存大小
  • RSS:占用的内存大小
  • TTY:终端的次要装置号码
  • STAT:该进程的状态
  • START:进程开始时间
  • TIME:执行的时间
  • COMMAND:所执行的指令

进程的状态

  • D:不可中断的静止
  • R:正在执行中
  • S:静止状态
  • T:暂停执行
  • Z:不存在但暂时无法消除
  • W:没有足够的内存分页可分配
  • <:高优先序的进程
  • N:低优先序的进程
  • L:有内存分配并锁在内存中

列出占用 cpu 最高的五个进程
ps -eo pid,tid,pcpu,command | sort -nr -k 3 | head -n 5
//ps 会列出 pid tid cpu command
//sort -k 选在排序列,3 表示第三列 cpu
ps -aux | sort -nr -k 3 | head -5
pid 进程 tid 线程 pcpu 消耗 CPU
根据进程查看线程信息
pstree -p pid
查看线程的详细信息:
cat /proc/pid/task/tid/status
实时显示
top -H -p pid
查看该进程下所有的线程
ps -efL | grep pid

>> top

top 输出格式

  • PR: 优先级
  • NI: nice 值。负值表示高优先级,正值表示低优先级
  • VIRT(kb)

    • 进程占用的总存储空间
    • =res+swap
  • RES(kb): Code 和 data 占用的总存储空间
  • SHR(kb): 与其他进程共享的存储空间
  • S(status)

    • D=uninterruptible sleep
    • R=running
    • S=sleeping
    • T=traced or stopped
    • Z=zombie
  • Time+: 进程运行时间

如果我们要刷新每隔一分钟输出到屏幕上,且刷新两次后退出则用
$ top -d 60 -n 2
如果将上述的 TOP 信息输出到 top.log 文件中,则用:
$ top -d 60 -n 2 -b >top.log
top 显示分两个部分,一个是系统的基本信息,一个是实时进程的信息。
单击键盘上的“u”,系统提示输入用户名,则只显示某个用户的进程;单击“k”,系统提示输入要“kill”的进程 PID,输入后不显示某个 PID 的进程

>> free

用来显示使用的和空闲的物理内存以及虚拟内存,以及被内核使用的缓存
  • [-b、-k、-m]选择不同的单位显示存储容量,系统默认为“-k”
  • -t:增加一行显示总量
  • -s delay:延迟 delay 时间后在执行一次 free,进连续的输出内存信息
  • -V:显示版本信息

>> vmstat

监视内存的使用情况。

output 解释

  • -r 
    表示运行队列(就是说多少个进程真的分配到 CPU),我测试的服务器目前 CPU 比较空闲,没什么程序在跑,当这个值超过了 CPU 数目,就会出现 CPU 瓶颈了。这个也和 top 的负载有关系,一般负载超过了 3 就比较高,超过了 5 就高,超过了 10 就不正常了,服务器的状态很危险。top 的负载类似每秒的运行队列。如果运行队列过大,表示你的 CPU 很繁忙,一般会造成 CPU 使用率很高。

  • 表示阻塞的进程, 这个不多说,进程阻塞,大家懂的。
  • swpd 虚拟内存已使用的大小,如果大于 0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
  • free  
    空闲的物理内存的大小,我的机器内存总共 8G,剩余 3415M。
  • buff  
    Linux/Unix 系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用 300 多 M
  • cache 
    cache 直接用来记忆我们打开的文件, 给文件做缓冲,我本机大概占用 300 多 M(这里是 Linux/Unix 的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached 会很快地被使用。)
  • si  
    每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
  • so  
    每秒虚拟内存写入磁盘的大小,如果这个值大于 0,同上。
  • bi  
    块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024byte,我本机上没什么 IO 操作,所以一直是 0,但是我曾在处理拷贝大量数据 (2-3T) 的机器上看过可以达到 140000/s,磁盘写入速度差不多 140M 每秒
  • bo 
    块设备每秒发送的块数量,例如我们读取文件,bo 就要大于 0。bi 和 bo 一般都要接近 0,不然就是 IO 过于频繁,需要调整。
  • in 
    每秒 CPU 的中断次数,包括时间中断
  • cs 
    每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目, 例如在 apache 和 nginx 这种 web 服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择 web 服务器的进程可以由进程或者线程的峰值一直下调,压测,直到 cs 到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的 CPU 大部分浪费在上下文切换,导致 CPU 干正经事的时间少了,CPU 没有充分利用,是不可取的。
  • us 用户 CPU 时间,我曾经在一个做加密解密很频繁的服务器上,可以看到 us 接近 100,r 运行队列达到 80(机器在做压力测试,性能表现不佳)。
  • sy 
    系统 CPU 时间,如果太高,表示系统调用时间长,例如是 IO 操作频繁。
  • id  
    空闲 CPU 时间,一般来说,id + us + sy = 100, 一般我认为 id 是空闲 CPU 使用率,us 是用户 CPU 使用率,sy 是系统 CPU 使用率。
  • wt 
    等待 IO CPU 时间。

>> df

df 命令可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息,它也可以显示所有文件系统对 i 节点和磁盘块的使用情况。

df 命令各个选项的含义如下:

  • -a:显示所有文件系统的磁盘使用情况,包括 0 块(block)的文件系统,如 /proc 文件系统。
  • -k:以 k 字节为单位显示。
  • -i:显示 i 节点信息,而不是磁盘块。
  • -t:显示各指定类型的文件系统的磁盘空间使用情况。
  • -x:列出不是某一指定类型文件系统的磁盘空间使用情况(与 t 选项相反)。
  • -T:显示文件系统类型。

>> du

du 的英文原义为“disk usage”,含义为显示磁盘空间的使用情况,统计目录(或文件)所占磁盘空间的大小。该命令的功能是逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024 字节)的情况。若没有给出指定目录,则对当前目录进行统计。

du 命令的各个选项含义如下:

  • -s:对每个 Names 参数只给出占用的数据块总数。
  • -a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定 -s,也不指定 -a,则只显示 Names 中的每一个目录及其中的各子目录所占的磁盘块数。
  • -b:以字节为单位列出磁盘空间使用情况(系统默认以 k 字节为单位)。
  • -k:以 1024 字节为单位列出磁盘空间使用情况。
  • -c:最后再加上一个总计(系统默认设置)。
  • -l:计算所有的文件大小,对硬链接文件,则计算多次。
  • -x:跳过在不同文件系统上的目录不予统计。

根据文件大小排序
du -s * | sort -nr | head

>> fdisk

可以划分磁盘分区

查看分区:
fdisk -l

>> iostat

CPU 使用率报告、磁盘使用率报告、系统吞吐量报告和适配器吞吐量报告。

选项参数:

  • -c: 显示 CPU 的使用报告;
  • -d: 显示设备的使用报告;
  • -h,-n:(人性化)显示 NFS 报告;
  • -k,-m: 以 KB/s,MB/ s 为单位显示统计信息;

参数解释:

  • Cpu 报告:

    • %user:CPU 在用户空间运行普通进程的时间百分比;
    • %nice:CPU 在用户空间运行 nice 优先级进程的时间百分比;
    • %system:CPU 在内核空间运行的时间百分比;
    • %iowait:CPU 等待磁盘操作所用的时间百分比;
    • %steal: 等待其他 CPU 所用的时间百分比;
    • %idle:CPU 空闲的时间百分比;
  • Device 报告:

    • Tps: 每秒完成的交易;
    • Blk_read/s,Blk_wrtn/s: 每秒读写设备块;
    • Blk_read,Blk_wrtn: 读写设备块的总数;
    • kB_read/s,kB_wrtn/s,MB_read/s,MB_wrtn/s:每秒读写数据以 KB,MB 为单位;
    • kB_read,kB_wrtn,MB_read,MB_wrtn:读写数据总数以 KB,MB 为单位;
    • Rrqm/s,wrqm/s: 每秒对排队的请求合并的数目;

output 解释

  • rrqm/s:
    每秒这个设备相关的读取请求有多少被 Merge 了(当系统调用需要读取数据的时候,VFS 将请求发到各个 FS,如果 FS 发现不同的读取请求读取的是相同 Block 的数据,FS 会将这个请求合并 Merge);
  • wrqm/s:
    每秒这个设备相关的写入请求有多少被 Merge 了。
  • rsec/s:
    每秒读取的扇区数;
  • wsec/:
    每秒写入的扇区数。
  • rKB/s:
    The number of read requests that were issued to the device per second;wKB/s:The number of write requests that were issued to the device per second;
  • avgrq-sz
    平均请求扇区的大小
  • avgqu-sz
    是平均请求队列的长度。毫无疑问,队列长度越短越好。
  • await:
    每一个 IO 请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为 IO 的响应时间,一般地系统 IO 响应时间应该低于 5ms,如果大于 10ms 就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  • svctm
    表示平均每次设备 I / O 操作的服务时间(以毫秒为单位)。如果 svctm 的值与 await 很接近,表示几乎没有 I / O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I / O 队列等待太长,系统上运行的应用程序将变慢。%util:在统计时间内所有处理 IO 时间,除以总共统计时间。例如,如果统计间隔 1 秒,该设备有 0.8 秒在处理 IO,而 0.2 秒闲置,那么该设备的 %util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是 100% 表示设备已经接近满负荷运行了(当然如果是多磁盘,即使 %util 是 100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)

>> ethool

显示网络状态。

选项:

  • -a: 显示所有连接和监听端口;
  • -e: 显示以太网统计信息;
  • -r: 显示路由表;
  • -s: 显示每个协议的统计信息;
  • -n: 以数字的形式显示地址和端口号;
  • -p proto:显示协议 proto 的连接信息;
  • -v: 显示正在进行的工作;

>> sar

sar 是性能监测工具,sar 命令 rpm 包 Systat 提供
sar 用来查看 cpu,memory,I/O, 网络统计数据等。比较常用的是 CPU 与 RAM 的观察。另外,在 RAM 的观测中,比较常使用的是 %memused(内存使用的百分比)及 %swpused(虚拟内存使用的百分比)。

output

  • %user
    在用户模式中运行进程所花的时间
  • %nice
    运行正常进程所花的时间
  • %system
    在内核模式(系统)中运行进程所花的时间
  • %iowait
    没有进程在该 CPU 上执行时,处理器等待 I / O 完成的时间
  • %idle
    没有进程在该 CPU 上执行的时间
  • rxpck/s
    每秒钟接收的数据包
  • txpck/s
    每秒钟发送的数据包
  • rxbyt/s
    每秒钟接收的字节数
  • txbyt/s
    每秒钟发送的字节数
  • rxcmp/s
    每秒钟接收的压缩数据包
  • txcmp/s
    每秒钟发送的压缩数据包
  • rxmcst/s
    每秒钟接收的多播数据包

正文完
 0