Linux性能监控基础命令

系统自带命令

top/htop

top用法:

  • 显示字段管理: f/F 代表Field Management
  • 交互命令帮助 : h
  • Task或Threads线程模式 : H
  • 指定进程: -p <PID>
  • 排序: M (按内存占用RES) 或 P (按CPU占用排序)
  • 显示总CPU或多核CPU: 1

字段说明:

  • PR: Priority
  • NI:Nice Value
  • VIRT: Virtual Image(KB), 当前进程占用的虚拟内存之和 (含shared objects, mmaped files, swap area),总是大于RES. 参考意义不大.
  • RES: Resident Memory Size(KB), 当前进程使用的物理内存(non-swapped,会受到memory page swap进出的影响而变化)
  • SHR: Shared Memory(KB),可以被其他进程共享的潜在共享内存
  • S: Process Status.
    • S: Sleeping
    • R: Running
    • D: uninterruptible sleep
    • T: tracked or stopped
    • Z: zombie
  • CPU%: CPU Usage
  • MEM%: Memory Usage(RES)

CPU解释

  • load average: 1,5,15分钟load
  • CPU相关
    • us,user: time running un-niced user processes
    • sy,system: kernel
    • ni,nice: niced user
    • wa,IO-wait: time waiting for I/O completion
    • hi: Hardware IRQ/硬件中断CPU耗时
    • si: Software Interrupts/软中断
    • st: Steal Time/hypervisor从虚拟机窃取的时间

注:如果I/O wait百分占比 大于 1/CPU核数,说明CPU等待磁盘时间过长

内存解释

  • RSS: Resident Set Size
  • VmRSS: 进程除了swap外使用的物理内存大小
  • VmSwap: swap大小
  • USED: RES + 部分swap
top -o %MEM  # 根据内存占用排序, 类似于 ps aux --sort -pmem

# 查看virt/虚拟内容占用
pmap {PID}
cat /proc/{PID}/maps

注: virt字段意义不大,参考SO

load average

统计系统过去1、5、15分钟的平均负载,从 /proc/loadavg读取,默认每5秒计算一次。

和CPU占用相比,更侧重于整体和趋势(包含所有命令,而不仅仅活跃的),CPU Percentage是某时间点的占用时间比例。

watch

# 每隔2秒更新一次内存变化
watch free -h

sar

sar是System Activity Reporter(系统活动情况报告)的缩写

sar -n DEV 1
sar -n TCP,ETCP 1

vmstat

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。

  • cs: 代表 context switches
  • in: 代表 interrupts

iostat

使用-x参数我们可以获得更多统计信息

  • rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的 时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个 设备相关的写入请求有多少被Merge了。
  • rsec/s:每秒读取的扇区数;wsec/: 每秒写入的扇区数。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;
  • await:每一个IO请求的处理的平均时间(单位是微秒)。这里可以理解为IO的响应时 间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
  • %util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该 设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因 为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

命令参数

iostat [-c|-d] [-k] [-t] [间隔描述] [检测次数]

参 数:

-c : 仅显示cpu的状态
-d : 仅显示存储设备的状态,不可以和-c一起使用
-k : 默认显示的是读入读出的block信息,用-k可以改成KB大小来显示
-t : 显示日期
-p device | ALL : device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息

CPU 占用情况包括四块内容
%user:显示user level (applications)时,CPU的占用情况。
%nice:显示user level在 nice priority 时,CPU 的占用情况。
%sys: 显示 system level (kernel)时,CPU 的占用情况。
%idle: 显示CPU 空闲时间所占比例。

磁盘使用报告分成以下几个部分:
Device: 块设备的名字
tps: 该设备每秒 I/O 传输的次数。多个 I/O 请求可以组合为一个,每个 I/O 请求传输的字节数不同,因此可以将多个 I/O 请求合并为一个。
Blk\_read/s, Blk\_wrtn/s: 表示从该设备每秒读写的数据块数量。块的大小可以不同,如1024, 2048 或 4048 字节,这取决于 partition 的大小。
Blk\_read, Blk\_wrtn: 指示自从系统启动之后数据块读/写的合计数。也可以查看这几个文件/proc/stat,/proc/partitions,/proc/diskstats的内容。

mpstat

mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

# 每隔2秒显示一次
mpstat 2
mpstat -P ALL
mpstat -P 0 3 3   # 对第一块CPU,每隔3秒监控一次,重复3次。

关键字段解释: LOC :Local interrupt Timer

CPU CPU 编号,all 那行是所有CPU的平均统计值。

%user 在监控的时间间隔内,用户级进程(运用程序)占用的CPU时间百分比。
%nice 在监控的时间间隔内,nice值为负的用户级进程所占用的CPU时间百分比。
%sys 在监控的时间间隔内,系统及进程(内核)占用的CPU使用率。该时间包括了系统处理软、硬中断所花的时间。
%iowait 在监控的时间间隔内,等待硬盘I/O的时间,CPU的闲置时间百分比。
%irq 在监控的时间间隔内,CPU服务硬中断的所占的时间百分比。
%soft 在监控的时间间隔内,CPU服务软中断的所占的时间百分比。
%idle 在监控的时间间隔内,CPU闲置时间所占用的时间百分比,不包括等待磁盘IO请求的时间。

其中最重要的字段是%idle,%iowait。如果%idle 说明CPU的负载不高。如果%iowait,说明存在I/O竞争。 也可以使用输出重定向保存mpstat对CPU的监控数据,用作CPU历史使用率分析。

si 软中断太高: cat /proc/interrupts

名词解释

Context Switching

高上下文切换通常由下面几种情况造成:

  • 系统调用
  • 多任务

关于voluntary和involuntary cs:

  • voluntary上下午切换:发生在一个任务因为资源不可用被阻塞时
  • involuntary上下午切换:任务执行了指定的时间片,然后被强制释放

开销:每次切换前,需要把当前状态存到内存,随后新处理器再次获取