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上下午切换:任务执行了指定的时间片,然后被强制释放
开销:每次切换前,需要把当前状态存到内存,随后新处理器再次获取