系统资源监控

Posted 韩小北(韩凯)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统资源监控相关的知识,希望对你有一定的参考价值。

前言:

系统资源监控一般监控系统的CPU,内存,磁盘和网络。系统分为windows和Linux。

一、Linux系统资源监控常用命令及工具

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,下面详细介绍它的使用方法

 1 统计信息区
 2 top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
 3 Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
 4 Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
 5 Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
 6 Swap: 192772k total, 0k used, 192772k free, 123988k cached
 7 进程信息区
 8 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 9 1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
10 14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
11 1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
12 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
13 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0

统计信息区:
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。

进程信息区:
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
列名 含义
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行

以下为默认不展示的列名:
PPID 父进程id
RUSER Real user name
UID 进程所有者的用户id
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
P 最后使用的CPU,仅在多CPU环境下有意义
TIME 进程使用的CPU时间总计,单位秒
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志,参考 sched.h

free

free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。

1 [[email protected] home]# free -m
2              total       used       free     shared    buffers     cached
3 Mem:          1006        988         17          0         96         72
4 -/+ buffers/cache:        819        186
5 Swap:         2015          1       2014

第3行内容代表是从系统的角度来统计的数据,其中的used包含了buffers和cached
第4行内容是代表从应用程序的角度来统计的数据,used是真正应用程序占用的内存
第3行的used = 第4行的used+第3行的buffers和cached
第5行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free)
如果是应用服务器的话,一般只看第4行:+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。

iostat

可以用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。
下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。
1.不加选项执行iostat

 

1 linux # iostat
2 Linux 2.6.16.60-0.21-smp (linux) 06/12/12
3 
4 avg-cpu: %user %nice %system %iowait %steal %idle
5 0.07 0.00 0.05 0.06 0.00 99.81
6 
7 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
8 sda 0.58 9.95 37.47 6737006 25377400
9 sdb 0.00 0.00 0.00 824 0

 

单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
Device: 各磁盘设备的IO统计信息
对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。Device中各列含义如下:
• Device: 以sdX形式显示的设备名称
• tps: 每秒进程下发的IO读、写请求数量
• Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
• Blk_wrtn/s: 每秒写扇区数量
• Blk_read: 取样时间间隔内读扇区总数量
• Blk_wrtn: 取样时间间隔内写扇区总数量
我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。
2.指定采样时间间隔与采样次数
linux # iostat -d 1 2

1 Linux 2.6.16.60-0.21-smp (linux) 06/13/12
2 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
3 sda 0.55 8.93 36.27 6737086 27367728
4 sdb 0.00 0.00 0.00 928 0
5 
6 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
7 sda 2.00 0.00 72.00 0 72
8 sdb 0.00 0.00 0.00 0 0

以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。
注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。
3.以kB为单位显示读写信息(-k选项)
我们可以使用-k或-M选项,指定iostat的部分输出结果以kB或MB为单位,而不是以扇区数为单位

1 linux # iostat -d -k
2 Linux 2.6.16.60-0.21-smp (linux) 06/13/12
3 
4 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
5 sda 0.55 4.46 18.12 3368543 13686096
6 sdb 0.00 0.00 0.00 464 0

以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)
4.更详细的io统计信息(-x选项)
为显示更详细的io设备统计信息,可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项: 

1 linux # iostat -x -k -d 1
2 Linux 2.6.16.60-0.21-smp (linux) 06/13/12
3 
4 ……
5 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
6 sda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60

以上各列的含义如下:
• rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
• wrqm/s: 每秒对该设备的写请求被合并次数
• r/s: 每秒完成的读次数
• w/s: 每秒完成的写次数
• rkB/s: 每秒读数据量(kB为单位)
• wkB/s: 每秒写数据量(kB为单位)
• avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
• avgqu-sz: 平均等待处理的IO请求队列长度
• await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
• svctm: 平均每次IO请求的处理时间(毫秒为单位)
• %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
对于以上示例输出,我们可以获取到以下信息:
1. 每秒向磁盘上写30M左右数据(wkB/s值)
2. 每秒有91次IO操作(r/s+w/s),其中以写操作为主体
3. 平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒
4. 等待处理的IO请求队列中,平均有11.79个请求驻留
以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:
util = (r/s+w/s) * (svctm/1000)
对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603

 

以上是关于系统资源监控的主要内容,如果未能解决你的问题,请参考以下文章

系统资源监控

系统资源监控--windows

python监控系统资源

linux稳定性压测。监控资源没写入进去

系统资源监控脚本

LoadRunner如何监控Linux系统资源