监测要点
- CPU - CPU的占有率
- 内存 - 内存的占用率, 换页数
- I/O - 读写请求数, 读写量等
- 带宽 - 进站出站带宽占有率
CPU与内存监控
top
top -
14:04:19(当前时间)
up 145 days, 3:45(已运行时间),
4 users(当前在线用户数),
load average:
0.09(1分钟内的平均负载),
0.19(5分钟内的平均负载),
0.14(15分钟内的平均负载)
Tasks:
304 total(总进程数),
1 running(当前进程运行数),
303 sleeping(睡眠进程数),
0 stopped(停止的进程数),
0 zombie(僵尸进程数)
Cpu(s):
2.7%us(用户占用百分比),
0.3%sy(内核占用百分比),
0.0%ni(nice进程的占用百分比),
96.2%id(空闲百分比),
0.7%wa(IO等待百分比),
0.0%hi(硬中断百分比),
0.0%si(软中断百分比),
0.0%st
Mem:
8012288k total(物理内存总量),
7459432k used(已使用的物理内存),
552856k free(剩余的内存),
341600k buffers(用作系统缓存的内存)
Swap:
8159224k total(虚拟内存总量),
3798692k used(已使用的虚拟内存),
4360532k free(剩余的虚拟内存),
613344k cached(已被缓存的交换区总量)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1725 root 20 0 10888 360 236 S 2.0 0.0 21:09.29 irqbalance
load average 平均负载要根据实际的CPU物理核心数来进行评估, 若15分钟内的平均负载依然是大于其物理核心数那就需要注意
列名 | 含义 |
---|---|
PID | 进程id |
PPID | 父进程id |
RUSER | Real user name |
UID | 进程所有者的用户id |
USER | 进程所有者的用户名 |
GROUP | 进程所有者的组名 |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
PR | 优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
P | 最后使用的CPU,仅在多CPU环境下有意义 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
TIME | 进程使用的CPU时间总计,单位秒 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
%MEM | 进程使用的物理内存百分比 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb。 |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
CODE | 可执行代码占用的物理内存大小,单位kb |
DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
SHR | 共享内存大小,单位kb |
nFLT | 页面错误次数 |
nDRT | 最后一次写入到现在,被修改过的页面数。 |
S | 进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
COMMAND | 命令名/命令行 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
Flags | 任务标志,参考 sched.h |
交互命令
<space>
即时刷新
1
查看各个逻辑核的负载
d
更改刷新的时间间隔
G
翻页
u
监控指定的用户
k
结束进程
r
renice进程
c
在COMMAND一栏显示详细的命令
o
更改列的显示顺序
f
增加或移除列的显示
H
显示线程
i
显示空闲的进程的开关
n
指定只显示的前n个进程
M
按照内存使用的倒序排序
P
按照CPU使用率的倒序排序
T
按照Time的倒序排序
F
或O
选择排序的列
R
逆向排序
命令行参数
-a
按照内存使用率排序
-b
对文件或管道输出友好的Batch Mode
-c
显示详细执行的COMMAND命令
-H
显示线程
-i
不显示空闲的进程
-n
执行的次数, 如top -b -n 1 > top.txt
-u
显示指定用户相关的进程
-p
显示指定PID的进程, 多个用逗号分隔
-M
显示内存单位
mpstat
每2秒采样一次, 监控所有CPU的状况, 采样5次后结束
mpstat -P ALL 2 5
采样一次, 显示CPU的平均情况
[chris@localhost ~]$ mpstat
Linux 2.6.32-358.el6.x86_64 (localhost) 04/05/2017 _x86_64_ (4 CPU)
05:12:24 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
05:12:24 PM all 2.74 0.00 0.34 0.69 0.00 0.02 0.00 0.00 96.22
参数 | 描述 |
---|---|
CPU | 处理器编号. 关键字all表示统计信息是以所有处理器的平均值计算而得 |
%user | 应用程序(user level)执行时CPU的利用率 |
%nice | 优先级高的应用程序(user level)执行时的CPU利用率 |
%sys | 系统级(system level)执行时的CPU利用率. 注意, 这不包括用于维护硬中断和软中断的时间 |
%iowait | 在系统处理磁盘I/O请求时, CPU或CPUs的空闲时间百分比 |
%irq | 显示CPU或CPUs用于花费在硬中断的时间百分比 |
%soft | 显示CPU或CPUs用于花费在软中断的时间百分比 |
%steal | 显示管理程序(hypervisor)在维护另一个虚拟处理器时虚拟CPU或CPUs在非自愿等待中花费的时间百分比 |
%idle | 在系统没有磁盘I/O时, CPU或CPUs的空闲时间百分比 |
考究地址
https://linux.die.net/man/1/mpstat
vmstat
每2秒采样一次, 采样5次后结束
vmstat 2 5
采样一次
[chris@localhost ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 3798788 476060 343644 620288 1 1 3 26 1 1 3 0 96 1 0
参数 | 解释 |
---|---|
r | 等待获得run time的进程数, 对应running和runnable状态 |
b | 处于uninterruptible sleep状态(也就是D状态)的进程数, 对应blocked状态, 通常是在等待磁盘I/O或者网络I/O |
swpd | 已使用的虚拟内存的大小, 如果大于0则说明可能要升级机器(记得要排除内存溢出的状态) |
free | 剩余的物理内存大小 |
si | 每秒从SWAP虚拟内存中换入至RAM内存的数据大小 |
so | 每秒从RAM内存换出至虚拟内存SWAP的数据大小 |
bi | 从块设备读入的数量 |
bo | 写至块设备的数量 |
in | 每秒发生中断的次数 |
cs | 每秒上下文切换的次数,例如线程切换过多该数值便会上升 |
us | 运行非内核代码的时间(user time, 包括nice time) |
sy | 运行内核代码的时间(system time) |
id | CPU空闲时间, 包含IO-wait的时间 |
wa | 等待IO的时间, 包含在CPU空闲时间中 |
st | 在文档中描述为Time stolen from a virtual machine. 但我认为与mpstat中的%steal的意思是一样的 |
考究地址
https://linux.die.net/man/8/vmstat
sar
命令行参数
-f
从filename中提取记录
查看任务队列的繁忙程度
[chris@localhost sa]$ sar -q -f sa08
Linux 2.6.32-358.el6.x86_64 (localhost) 03/08/2017 _x86_64_ (4 CPU)
12:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
12:10:01 AM 2 1430 0.04 0.06 0.07
12:20:01 AM 0 1420 0.04 0.05 0.05
12:30:01 AM 16 1460 0.01 0.06 0.06
12:40:01 AM 0 1426 0.36 0.24 0.14
12:50:01 AM 0 1420 0.06 0.13 0.13
01:00:01 AM 13 1450 0.02 0.10 0.10
参数 | 解释 |
---|---|
runq-sz | 运行队列的长度(等待运行的任务数) |
plist-sz | 队列中的任务总数 |
ldavg-x | 与top中load average一样 |
查看CPU的占用率
[chris@localhost sa]$ sar -p -f sa08
Linux 2.6.32-358.el6.x86_64 (localhost) 03/08/2017 _x86_64_ (4 CPU)
12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 3.14 0.00 0.43 0.79 0.00 95.64
12:20:01 AM all 2.61 0.00 0.38 0.78 0.00 96.23
12:30:01 AM all 2.40 0.00 0.38 0.73 0.00 96.49
里面的参数说明与mpstat
一致
内存利用率统计信息
[chris@localhost sa]$ sar -r -f sa08
Linux 2.6.32-358.el6.x86_64 (localhost) 03/08/2017 _x86_64_ (4 CPU)
12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
12:10:01 AM 452360 7559928 94.35 138508 314660 16071940 99.38
12:20:01 AM 458024 7554264 94.28 139124 314652 16059996 99.31
12:30:01 AM 444256 7568032 94.46 139140 314608 16105608 99.59
cache是对文件的缓存, buffer是对磁盘块的缓存(比文件缓存更底层)
参数 | 解释 |
---|---|
kbmemfree | 与free命令一致, 代表空余的物理内存, 不包括buffer与cache |
kbmemused | 与free命令一致, 代表已用的物理内存, 包含buffer与cache |
%memused | kbmemused与物理内存总量的比值 |
kbbuffers | 文件的缓存 |
kbcached | 磁盘块的缓存 |
kbcommit | 当前工作负载所需的内存量(以kB计)。这是估计需要多少RAM /交换来保证永远不会有内存不足。 |
%commit | 相对于内存总量(RAM +SWAP),当前工作负载所需的内存所占百分比。 这个数字可能会大于100%,因为内核通常会占用内存。 |
%memused + %commit > 100时, 说明物理内存不足, 这样会导致频繁的换页
内存的分页统计(换页的频繁程度)
有换入换出就证明有磁盘I/O, 性能就会收到冲击. 我们主要关注pgpgin/s与pgpgout/s
[chris@localhost sa]$ sar -B -f sa08
Linux 2.6.32-358.el6.x86_64 (localhost) 03/08/2017 _x86_64_ (4 CPU)
12:00:01 AM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
12:10:01 AM 7.49 90.25 908.74 0.08 835.69 0.00 0.32 0.23 70.83
12:20:01 AM 1.22 78.41 755.53 0.02 637.72 0.00 0.54 0.43 80.00
12:30:01 AM 0.05 75.95 703.74 0.00 602.02 0.00 0.43 0.41 96.88
参数 | 解释 |
---|---|
pgpgin/s | 表示每秒从磁盘或SWAP置换到内存的字节数(KB) |
pgpgout/s | 表示每秒从内存置换到磁盘或SWAP的字节数(KB) |
磁盘I/O监控
iostat
-d
只显示磁盘使用信息
-k
以kilobytes/second显示统计信息
-m
以megabytes/second显示统计信息
-x
显示扩展信息
[root@d02645f01e79 /]# iostat -dkx 2
Linux 4.9.12-moby (d02645f01e79) 04/05/17 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.20 0.25 0.25 3.62 8.25 46.99 0.00 4.70 1.28 8.17 2.76 0.14
参数 | 描述 |
---|---|
rrqm/s | 每秒进行合并的读请求数 |
wrqm/s | 每秒进行合并的写请求数 |
r/s | 每秒向设备发出的读取请求数 |
w/s | 每秒向设备发出的写入请求数 |
rkB/s | 从设备每秒读取的kilobytes数 |
wkB/s | 从每秒写入设备的kilobytes数 |
avgrq-sz | 发给设备的请求的平均大小(以扇区为单位) |
avgqu-sz | 发送到设备的请求的平均队列长度 |
await | 发给设备的I/O请求的平均时间(以毫秒为单位)。这包括请求在队列中花费的时间以及为维护请求所花费的时间。 |
svctm | 发送到设备的I/O请求的平均服务时间(以毫秒为单位)。警告!不要再相信这个字段了。此字段将在未来的sysstat版本中被删除。 |
%util | 向设备发出I/O请求的CPU时间百分比(设备的带宽利用率)。当该值接近100%时说明已达到饱和状态。 |
考究地址
https://linux.die.net/man/1/iostat
网络监控
sar
命令行参数
-f
从filename中提取记录
网络统计报告
DEV显示网络接口信息
[chris@localhost sa]$ sar -n DEV -f sa08
Linux 2.6.32-358.el6.x86_64 (localhost) 03/08/2017 _x86_64_ (4 CPU)
12:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:10:01 AM lo 112.86 112.86 32.09 32.09 0.00 0.00 0.00
12:10:01 AM eth0 6.03 9.77 1.12 1.53 0.00 0.00 0.25
12:10:01 AM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:20:01 AM lo 113.16 113.16 32.11 32.11 0.00 0.00 0.00
参数 | 解释 |
---|---|
IFACE | 网卡 |
rxpck/s | 每秒接收的数据包 |
txpck/s | 每秒发送的数据包 |
rxkB/s | 每秒接收的字节数 |
txkB/s | 每秒发送的字节数 |
rxcmp/s | 每秒接收的压缩数据包 |
txcmp/s | 每秒发送的压缩数据包 |
rxmcst/s | 每秒接收的多播数据包 |
EDEV关键字会报告来自网络设备故障的统计信息
Linux 2.6.32-358.el6.x86_64 (WebSrv) 03/31/2017 _x86_64_ (4 CPU)
12:00:01 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
12:10:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:10:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:10:01 AM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
参数 | 解释 |
---|---|
rxerr/s | 每秒接收的坏数据包 |
txerr/s | 每秒发送的坏数据包 |
coll/s | 每秒冲突数 |
rxdrop/s | 由于linux缓冲区中缺少空间,每秒丢弃的已接收数据包数。 |
txdrop/s | 由于linux缓冲区中缺少空间,每秒丢弃的已发送数据包数。 |