监控服务器性能命令

linux系统看系统性能进行性能监控的几大命令行

原创地址:https://blog.csdn.net/u011441473/article/details/82981988

一般我们查看系统性能主要是在以下几个方面
1.用户使用CPU情况 展现为 %user
2.系统使用CPU情况 展现为 %sys
3.wio或iowait     展现为 %iowait 进程由于等待磁盘IO而使CPU处于空闲状态的比率
4.CPU的空闲率
5.CPU上下文的交换的比率,也有说明为CPU上下文的切换。即内存和寄存器中数据的切换
6.nice 这个还不是很明白是啥意思
7.real-time 还是未知
8.运行队列的长度
9.平均负载

二 、常用命令

1.mpstat
2.top
3.vmstat
4.sar
5.iostat
6.uptime

三命令详解
1. mpstat -P ALL 5    //需要注意的P和ALL一定要大写

17时22分24秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
17时22分29秒  all    0.30    0.00    0.10    0.67    0.02    0.07    0.00   98.83    821.40
17时22分29秒    0    1.00    0.00    0.60    1.00    0.20    0.60    0.00   96.60    560.00
17时22分29秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.20      0.00
17时22分29秒    2    0.60    0.00    0.20    0.20    0.00    0.20    0.00   99.00    250.20
17时22分29秒    3    0.00    0.00    0.00    4.00    0.00    0.00    0.00   96.00     11.20
17时22分29秒    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.20      0.00
17时22分29秒    5    0.80    0.00    0.00    0.00    0.00    0.00    0.00   99.20      0.00
17时22分29秒    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      0.00
17时22分29秒    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      0.00

上面信息我们可以看出,有8个CPU。
%user :在internal时间段里,即为用户态的CPU时间,及登录用户所消耗的CPU时间比。
%sys  :在internal时间段里,负进程消耗的CPU时间,占所有CPU的百分比
%nice :优先进程占用时间
%iowait:在internal时间段里,所有未等待磁盘IO操作进程占CPU的百分比
%irq  : 这个还是未知
%soft : 在internal时间段里,软中断时间(%) softirq/total*100
%idle : 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%)
intr/s: 在internal时间段里,每秒CPU接收的中断的次数

 

2. top  //直接敲TOP即可。

常见用法:
top -d 3    //每三秒刷新一次数据 默认是每5秒刷新一次数据
Ctrl+L      //擦除并且重写屏幕。

[root@TG1704 log]# top
top - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35
Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 32949016k total, 14411180k used, 18537836k free, 169884k buffers
Swap: 32764556k total, 0k used, 32764556k free, 3612636k cached</p>< p>PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java 
18249 root 18 0 3201m 1.9g 11m S 35.9 6.0 569:39.41 java 
2808 root 25 0 3333m 1.0g 11m S 24.3 3.1 526:51.85 java 
25668 root 23 0 3180m 704m 11m S 14.0 2.2 360:44.53 java 
574 root 25 0 3168m 611m 10m S 12.6 1.9 556:59.63 java 
1599 root 20 0 3237m 1.9g 11m S 12.3 6.2 262:01.14 java 
1008 root 21 0 3147m 842m 10m S 0.3 2.6 4:31.08 java 
13823 root 23 0 3031m 2.1g 10m S 0.3 6.8 176:57.34 java 
28218 root 15 0 12760 1168 808 R 0.3 0.0 0:01.43 top 
29062 root 20 0 1241m 227m 10m S 0.3 0.7 2:07.32 java 
1 root 15 0 10368 684 572 S 0.0 0.0 1:30.85 init 
2 root RT -5 0 0 0 S 0.0 0.0 0:01.01 migration/0 
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 
5 root RT -5 0 0 0 S 0.0 0.0 0:00.80 migration/1 
6 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 
7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1 
8 root RT -5 0 0 0 S 0.0 0.0 0:20.59 migration/2 
9 root 34 19 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/2 
10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2 
11 root RT -5 0 0 0 S 0.0 0.0 0:23.66 migration/3 
12 root 34 19 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/3 
13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/3 
14 root RT -5 0 0 0 S 0.0 0.0 0:20.29 migration/4 
15 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/4 
16 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/4 
17 root RT -5 0 0 0 S 0.0 0.0 0:23.07 migration/5 
18 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/5 
19 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/5 
20 root RT -5 0 0 0 S 0.0 0.0 0:17.16 migration/6 
21 root 34 19 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/6 
22 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/6 
23 root RT -5 0 0 0 S 0.0 0.0 0:58.28 migration/7

top命令输出内容详细说明:

统计信息区:

前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。

第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

14:06:23 — 当前系统时间

up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)

2 users — 当前有2个用户登录系统

load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行,Tasks — 任务(进程),具体信息说明如下:

系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行,cpu状态信息,具体属性说明如下:

5.9%us — 用户空间占用CPU的百分比。

3.4% sy — 内核空间占用CPU的百分比。

0.0% ni — 改变过优先级的进程占用CPU的百分比

90.4% id — 空闲CPU百分比

0.0% wa — IO等待占用CPU的百分比

0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比

0.2% si — 软中断(Software Interrupts)占用CPU的百分比

备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

第四行,内存状态,具体信息如下:

32949016k total — 物理内存总量(32GB)

14411180k used — 使用中的内存总量(14GB)

18537836k free — 空闲内存总量(18GB)

169884k buffers — 缓存的内存量 (169M)

第五行,swap交换分区信息,具体信息说明如下:

32764556k total — 交换区总量(32GB)

0k used — 使用的交换区总量(0K)

32764556k free — 空闲交换区总量(32GB)

3612636k cached — 缓冲的交换区总量(3.6GB)

备注:

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

第六行,空行。

第七行以下:各进程(任务)的状态监控,项目列信息说明如下:

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 — 进程名称(命令名/命令行)

概念详解:
load average:
可以理解为每秒钟CPU等待运行的进程个数.
在Linux系统中,sar -q、uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均任务数。如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用’wait’)
- 没有被停止(例如:等待终止)

3.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  1 1385712  66752 112164 1429992  3    4    14    50   14    2 10  2 88  1  0
1  0 1385712  64540 112208 1430976  0    0     3   104 2599 6595 15  2 81  3  0
0  0 1385712  62084 112232 1433008  0    0     1  1276 2068 7772 18  1 77  4  0
0  0 1385712  60808 112232 1434036  0    0     1    29  730 3686  9  1 90  1  0

参数详解:
r:当前系统中等待CPU的进程数(所有的CPU),若是改值连续都大于CPU的个数,表明有多数进程在等待CPU进行处理。若是该值大于CPU个数4倍的话,那么表明该服务器缺少CPU,或者CPU的处理速度过慢

in :cpu每秒产生的中断数
cs :每秒产生的上下文切换

us:用户占用的CPU时间百分比,同mpstat 的%user,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速(比如PHP/PERL)
sy:系统占用的CPU时间百分比,同mpstat 的%sys。内核进程消耗的CPU时间百分比(sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因)
id:CPU处于空闲状态时间百分比,如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.
wa:IO等待消耗的CPU时间百分比,wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

us+sy+id = 100%

常见用法:
vmstat -n 3 //每三秒获取一次数据
vmstat 4 5  //间隔4次输出5次数据

概念详解:
上下文切换:CPU的切换就是将轮到该时间片的进程,将该进程中的数据从内容中刷到CPU的寄存器中,同时将原寄存器中的数据刷到内存中保存。
 

4.sar
sar [options] [-A] [-o file] t [n]
t 和 n两个参数指定了采样间隔和采样次数
- o 较日志记录到某个文件中
sar 5 6 //每5秒采用一次,共采样6次。

Linux 2.6.18-53.el5PAE (localhost.localdomain)  03/28/2009
07:40:17 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
07:40:19 PM       all     12.44      0.00    6.97       1.74      0.00       78.86
07:40:21 PM       all     26.75      0.00    12.50      16.00     0.00       44.75
07:40:23 PM       all     16.96      0.00    7.98       0.00      0.00       75.06

参数详解:
大部分的参数同mpstat top等命令。

%idle :等同于vmstat 中的id .就是空闲CPU百分比.如果该值高,表明CPU较空闲,但是处理速度还是很慢,则表明CPU在等待内存分配,应该加大服务器的内存。若是该值持续低于10%,表明CPU处理能力较弱,需要增加CPU。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
 

5.iostat 主要是为了查看磁盘IO

Linux 2.6.16.46-0.12-smp (iread-85)     03/29/2010

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
9.47    0.00    1.59    1.27    0.00   86.67

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              15.46       114.45       401.22   44378459  155576936

参数详解:
avg-cpu中参数不做过多解释,详细可见其他命令,类似。

rrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:           每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:         每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:    每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s:     每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:    每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz:平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:    平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:     一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)


# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。

平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:

平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + … + 请求总数-1) / 请求总数

应用到上面的例子: 平均等待时间 = 5ms * (1+2+…+28)/29 = 70ms,和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。

每秒发出的 I/O 请求很多 (约 29 个),平均队列却不长 (只有 2 个 左右),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。

一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可做,所有 29 个 I/O 请求都在142毫秒之内处理掉了。

delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而 iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有 bug,avgqu-sz 值应为 2.23,而不是 22.35。

原文地址:https://www.cnblogs.com/jenny-jenny/p/12447768.html