首页 > 代码库 > linux系统cpu和内存占用率

linux系统cpu和内存占用率

1.top

使用权限:所有使用者

使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

说明:即时显示process的动态

d :改变显示的更新速度,或是在交谈式指令列( interactive command)按s

q :没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行

c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dead child process )的CPU time累积起来

s :安全模式,将交谈式指令取消,避免潜在的危机

i :不显示任何闲置(idle)或无用(zombie)的行程

n :更新的次数,完成后将会退出top

b :批次档模式,搭配"n"参数一起使用,可以用来将top的结果输出到档案内

 

范例:

显示更新十次后退出;

top -n 10

 

使用者将不能利用交谈式指令来对行程下命令:

top -s

 

将更新显示二次的结果输入到名称为top.log的档案里:

top -n 2 -b < top.log   

另附一个命令简介linux traceroutewindows tracert两个命令相当,跟踪网络路由

 

2.vmstat

正如我们之前讨论的任何系统的性能比较都是基于基线的,并且监控CPU的性能就是以上3点,运行队列、CPU使用率和上下文切换。以下是一些对于CPU很普遍的性能要求:

1.对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;

2.如果CPU在满负荷运行,应该符合下列分布,

a) User Time:65%~70%

b) System Time:30%~35%

c) Idle:0%~5%

3. mpstat

对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。

常用的监视工具有:vmstat, top,dstat和mpstat.

# vmstat 1

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

r b swpd free buff cache si so bi bo in cs us sy id wa

0 0 104300 16800 95328 72200 0 0 5 26 7 14 4 1 95 0

0 0 104300 16800 95328 72200 0 0 0 24 1021 64 1 1 98 0

0 0 104300 16800 95328 72200 0 0 0 0 1009 59 1 1 98 0

r表示运行队列的大小,

b表示由于IO等待而block的线程数量,

in表示中断的数量,

cs表示上下文切换的数量,

us表示用户CPU时间,

sys表示系统CPU时间,

wa表示由于IO等待而是CPU处于idle状态的时间,

id表示CPU处于idle状态的总时间。

dstat可以给出每一个设备产生的中断数:

# dstat -cip 1

----total-cpu-usage---- ----interrupts--- ---procs---

usr sys idl wai hiq siq| 15 169 185 |run blk new

6 1 91 2 0 0| 12 0 13  | 0 0 0

1 0 99 0 0 0| 0    0  6 | 0 0 0

0 0 100 0 0 0| 18 0  2 | 0 0 0

0 0 100 0 0 0| 0    0  3 | 0 0 0

我们可以看到这里有3个设备号15,169和185.设备名和设备号的关系我们可以参考文件/proc/interrupts,这里185代表网卡eth1.

# cat /proc/interrupts

CPU0

0: 1277238713 IO-APIC-edge timer

6: 5 IO-APIC-edge floppy

7: 0 IO-APIC-edge parport0

8: 1 IO-APIC-edge rtc

9: 1 IO-APIC-level acpi

14: 6011913 IO-APIC-edge ide0

15: 15761438 IO-APIC-edge ide1

169: 26 IO-APIC-level Intel 82801BA-ICH2

185: 16785489 IO-APIC-level eth1

193: 0 IO-APIC-level uhci_hcd:usb1

mpstat可以显示每个CPU的运行状况,比如系统有4个CPU。我们可以看到:

# mpstat –P ALL 1

Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/2006

05:17:31 PM CPU %user %nice %system %idle intr/s

05:17:32 PM all 0.00 0.00 3.19 96.53 13.27

05:17:32 PM 0 0.00 0.00 0.00 100.00 0.00

05:17:32 PM 1 1.12 0.00 12.73 86.15 13.27

05:17:32 PM 2 0.00 0.00 0.00 100.00 0.00

05:17:32 PM 3 0.00 0.00 0.00 100.00 0.00

总结的说,CPU性能监控包含以下方面:

检查系统的运行队列,确保每一个CPU的运行队列不大于3.

确保CPU使用分布满足70/30原则(用户70%,系统30%)。

如果系统时间过长,可能是因为频繁的调度和改变优先级。

CPU Bound进程总是会被惩罚(降低优先级)而IO Bound进程总会被奖励(提高优先级)。

 

4.prstat命令

要显示系统上当前运行的进程和项目的各种统计信息,请使用带有-J选项的prstat命令:

 

%prstat -J

        PID USERNAME SIZE  RSS STATE PRI NICE     TIME CPU PROCESS/NLWP

 21634 jtd     5512K 4848K cpu0   44   0  0:00.00 0.3% prstat/1

  324 root      29M  75M sleep  59   0  0:08.27 0.2% Xsun/1

 15497 jtd       48M  41M sleep  49   0  0:08.26 0.1% adeptedit/1

  328 root    2856K 2600K sleep  58   0  0:00.00 0.0% mibiisa/11

 1979 jtd     1568K 1352K sleep  49   0  0:00.00 0.0% csh/1

 1977 jtd     7256K 5512K sleep  49   0  0:00.00 0.0% dtterm/1

  192 root    3680K 2856K sleep  58   0  0:00.36 0.0% automountd/5

 1845 jtd       24M  22M sleep  49   0  0:00.29 0.0% dtmail/11

 1009 jtd     9864K 8384K sleep  49   0  0:00.59 0.0% dtwm/8

  114 root    1640K 704K sleep  58   0  0:01.16 0.0% in.routed/1

  180 daemon  2704K 1944K sleep  58   0  0:00.00 0.0% statd/4

  145 root    2120K 1520K sleep  58   0  0:00.00 0.0% ypbind/1

  181 root    1864K 1336K sleep  51   0  0:00.00 0.0% lockd/1

  173 root    2584K 2136K sleep  58   0  0:00.00 0.0% inetd/1

  135 root    2960K 1424K sleep   0   0  0:00.00 0.0% keyserv/4

PROJID   NPROC SIZE  RSS MEMORY     TIME CPU PROJECT

   10      52 400M 271M   68%  0:11.45 0.4% booksite

    0      35 113M 129M   32%  0:10.46 0.2% system

 

Total: 87 processes, 205 lwps, load averages: 0.05, 0.02, 0.02

要显示系统上当前运行的进程和任务的各种统计信息,请使用带有-T选项的prstat命令:

 

%prstat -T

  PID USERNAME SIZE  RSS STATE PRI NICE     TIME CPU PROCESS/NLWP

 23023 root      26M  20M sleep  59   0  0:03:18 0.6% Xsun/1

 23476 jtd       51M  45M sleep  49   0  0:04:31 0.5% adeptedit/1

 23432 jtd     6928K 5064K sleep  59   0  0:00:00 0.1% dtterm/1

 28959 jtd       26M  18M sleep  49   0  0:00:18 0.0% .netscape.bin/1

 23116 jtd     9232K 8104K sleep  59   0  0:00:27 0.0% dtwm/5

 29010 jtd     5144K 4664K cpu0   59   0  0:00:00 0.0% prstat/1

  200 root    3096K 1024K sleep  59   0  0:00:00 0.0% lpsched/1

  161 root    2120K 1600K sleep  59   0  0:00:00 0.0% lockd/2

  170 root    5888K 4248K sleep  59   0  0:03:10 0.0% automountd/3

  132 root    2120K 1408K sleep  59   0  0:00:00 0.0% ypbind/1

  162 daemon  2504K 1936K sleep  59   0  0:00:00 0.0% statd/2

  146 root    2560K 2008K sleep  59   0  0:00:00 0.0% inetd/1

  122 root    2336K 1264K sleep  59   0  0:00:00 0.0% keyserv/2

  119 root    2336K 1496K sleep  59   0  0:00:02 0.0% rpcbind/1

  104 root    1664K 672K sleep  59   0  0:00:03 0.0% in.rdisc/1

TASKID   NPROC SIZE  RSS MEMORY     TIME CPU PROJECT                    

  222      30 229M 161M   44%  0:05:54 0.6% group.staff                

  223       1  26M  20M  5.3%  0:03:18 0.6% group.staff                

   12       1  61M  33M  8.9%  0:00:31 0.0% group.staff                

    1      33  85M  53M   14%  0:03:33 0.0% system                     

 

Total: 65 processes, 154 lwps, load averages: 0.04, 0.05, 0.06      

//----------------------------------------------------------------------------------------------------------------------------------------------//

1、top

这个命令很常用,在第三行有显示CPU当前的使用情况。

[root@li676-235 ~]# top -bn 1 -i -c
top - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39
Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1014660k total, 880512k used, 134148k free, 264904k buffers
Swap: 262140k total, 34788k used, 227352k free, 217144k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
12760 root 20 0 15084 1944 1632 R 2.0 0.2 0:00.01 top -bn 1 -i -c

如上所示,top命令可以看到总体的系统运行状态和cpu的使用率 。

%us:表示用户空间程序的cpu使用率(没有通过nice调度)

%sy:表示系统空间的cpu使用率,主要是内核程序。

%ni:表示用户空间且通过nice调度过的程序的cpu使用率。

%id:空闲cpu

%wa:cpu运行时在等待io的时间

%hi:cpu处理硬中断的数量

%si:cpu处理软中断的数量

%st:被虚拟机偷走的cpu

2、vmstat

之前在本博客中有介绍过vmstat的使用,详细使用和参数介绍参考网址:http://www.sijitao.net/1925.html 。

[root@li676-235 ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r b swpd free buff cache si so bi bo in cs us sy id wa st
 2 0 34792 68376 147688 356132 16 16 421 385 2 2 5 4 91 1 0
 3 0 34792 97368 147688 326884 0 0 0 0 133 134 15 6 79 0 0
 1 0 34792 62432 147696 360704 0 0 0 88 267 278 63 18 19 0 0
 0 0 34792 97160 147696 326904 0 0 0 0 71 82 12 4 84 0 0
 1 0 34792 56572 147696 364540 0 0 0 4 261 246 61 23 16 0 0

3、sar

sar命令语法和vmstat一样。命令不存在时需要安装sysstat包,这个包很有用。

CPU使用率

例如每1秒采集一次CPU使用率,共采集5次。

[root@li676-235 ~]# sar -u 1 5
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
02:41:25 PM CPU %user %nice %system %iowait %steal %idle
02:41:26 PM all 64.71 0.00 18.63 0.00 0.98 15.69
02:41:27 PM all 29.47 0.00 22.11 14.74 0.00 33.68
02:41:28 PM all 67.33 0.00 31.68 0.99 0.00 0.00
02:41:29 PM all 7.00 0.00 2.00 0.00 0.00 91.00
02:41:30 PM all 69.00 0.00 23.00 0.00 0.00 8.00
Average: all 47.79 0.00 19.48 3.01 0.20 29.52

和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。

[root@li676-235 ~]# sar -P 0 -u 1 5
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
02:45:14 PM CPU %user %nice %system %iowait %steal %idle
02:45:15 PM 0 44.00 0.00 52.00 4.00 0.00 0.00
02:45:16 PM 0 9.28 0.00 26.80 62.89 1.03 0.00
02:45:17 PM 0 3.06 0.00 14.29 81.63 1.02 0.00
02:45:18 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
02:45:19 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
Average: 0 13.09 0.00 27.81 58.28 0.82 0.00

进程队列长度和平均负载状态

例如每1秒采集一次,共采集5次。

[root@li676-235 ~]# sar -q 1 5
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
02:48:47 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
02:48:48 PM 1 133 0.34 0.43 0.41
02:48:49 PM 2 132 0.34 0.43 0.41
02:48:50 PM 1 133 0.34 0.43 0.41
02:48:51 PM 2 134 0.31 0.42 0.40
02:48:52 PM 1 133 0.31 0.42 0.40
Average: 1 133 0.33 0.43 0.41

输出项:

runq-sz:运行队列的长度(等待运行的进程数)

plist-sz:进程列表中进程(processes)和线程(threads)的数量

ldavg-1:最后1分钟的系统平均负载(System load average)

ldavg-5:过去5分钟的系统平均负载

ldavg-15:过去15分钟的系统平均负载

进程创建的平均值和上下文切换的次数

例如每1秒收集一次,共收集5次。

[root@li676-235 ~]# sar -w 1 5 
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
02:54:03 PM proc/s cswch/s
02:54:04 PM 1.01 156.57
02:54:05 PM 1.00 132.00
02:54:06 PM 2.00 201.00
02:54:07 PM 2.02 126.26
02:54:08 PM 2.00 114.00
Average: 1.61 145.98

sar命令也可以获取过去指定日期的性能参数。

[root@li676-235 ~]# sar -u -f /var/log/sa/sa20 
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
01:10:01 PM CPU %user %nice %system %iowait %steal %idle
01:20:02 PM all 25.78 0.00 8.88 3.59 0.15 61.60
01:30:01 PM all 26.06 0.00 9.96 3.33 0.10 60.55
01:40:01 PM all 25.73 0.00 9.17 3.70 0.09 61.32
01:50:01 PM all 25.70 0.00 9.50 2.79 0.12 61.89
02:00:01 PM all 26.70 0.00 9.73 2.20 0.10 61.28
02:10:01 PM all 26.16 0.00 9.56 4.34 0.11 59.82
02:20:01 PM all 25.49 0.00 9.61 2.76 0.07 62.07
02:30:01 PM all 26.47 0.00 9.94 0.64 0.30 62.65
02:40:02 PM all 27.32 0.00 10.37 3.86 0.15 58.30
02:50:02 PM all 26.98 0.00 10.38 4.56 0.13 57.95
Average: all 26.24 0.00 9.71 3.18 0.13 60.74

4、mpstat

这个命令也在sysstat包中,语法类似。

例如每1秒收集一次,共5次。

[root@li676-235 ~]# mpstat 1 5
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
03:01:18 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:01:19 PM all 52.53 0.00 23.23 0.00 0.00 0.00 0.00 0.00 24.24
03:01:20 PM all 21.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 75.00
03:01:21 PM all 53.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 29.00
03:01:22 PM all 26.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 71.00
03:01:23 PM all 46.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 36.00
Average: all 39.68 0.00 13.23 0.00 0.00 0.00 0.00 0.00 47.09

cpu使用情况比sar更加详细些,也可以用-P指定某颗cpu 。

5、iostat

这个命令主要用来查看io使用情况,也可以来查看cpu,个人感觉不常用。

[root@li676-235 ~]# iostat -c 1 2
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
 4.53 0.01 3.81 0.63 0.04 90.99
avg-cpu: %user %nice %system %iowait %steal %idle
 38.00 0.00 14.00 0.00 0.00 48.00

6、dstat

每秒cpu使用率情况获取

[root@li676-235 ~]# dstat -c
----total-cpu-usage----
usr sys idl wai hiq siq
 5 4 91 1 0 0
 27 11 62 0 0 0
 52 11 37 0 0 0
 26 10 63 0 0 1
 50 13 37 0 0 1
 21 6 72 0 0 0

最占cpu的进程获取

[root@li676-235 ~]# dstat --top-cpu
-most-expensive-
 cpu process 
mysqld 1.5
php-fpm: pool 24
mysqld 59

 

linux系统cpu和内存占用率