本文要介绍的sar,是linux下用来分析系统本身运行情况的非常有用的工具。我们知道,程序在操作系统上要运行,要关注的点不外乎内存,CPU和IO(包括磁盘IO和网络IO)。我们的应用程序在操作系统中运行前,我们需要了解系统当前的内存,cpu和IO的使用状况,还需要明白我们的应用程序运行时自身所需要的内存,cpu和IO资源的情况。只有操作系统剩余的内存,cpu和IO资源能够满足应用程序所需要的,才能保证应用程序在操作系统中正常的运行。sar就是用来帮助我们了解操作系统当前内存,cpu和IO等资源的使用情况的一个非常方便的工具,下面通过具体的例子来介绍sar的使用。
      在介绍例子之前,首先需要说一下sar命令的基本用法:sar [option] [interval] [count]

  • 1. 通过sar获取系统内存使用相关信息

(1)内存使用情况统计:-r,通过这个选项,我们可以了解当前系统中内存的使用情况

1
2
3
4
5
6
7
8
wuzesheng@ubuntu:~/work/test$ sar -r 1 3
Linux 2.6.38-8-generic (ubuntu) 07/09/2011 _i686_ (2 CPU)
 
06:33:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact
06:33:02 PM 458664 566488 55.26 96268 265056 1034780 49.95 262500 254888
06:33:03 PM 458664 566488 55.26 96268 265056 1034780 49.95 262468 254888
06:33:04 PM 458696 566456 55.26 96268 265056 1034780 49.95 262468 254888
Average: 458675 566477 55.26 96268 265056 1034780 49.95 262479 254888

请看上面的例子,sar -r 1 3 表示时间间隔为1秒,统计3次,最后一行为3次的均值。
(2)换页统计:-B,通过这个选项,我们可以了解当前系统中,页交换的情况

1
2
3
4
5
6
7
8
wuzesheng@ubuntu:~/work/test$ sar -B 1 3
Linux 2.6.38-8-generic (ubuntu) 07/09/2011 _i686_ (2 CPU)
 
06:56:48 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
06:56:49 PM 0.00 0.00 1438.00 0.00 3001.00 0.00 0.00 0.00 0.00
06:56:50 PM 0.00 0.00 796.00 0.00 1620.00 0.00 0.00 0.00 0.00
06:56:51 PM 0.00 0.00 770.00 0.00 1580.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 1001.33 0.00 2067.00 0.00 0.00 0.00 0.00

上面是每1秒统计一次,统计3次的结果,最后一行为3次的均值。
      以上便是关于内存的比较关键的两个指标,通过上面两个选项,系统内存使用相关的情况可以一目了然。

  • 2. 通过sar获取系统cpu使用相关信息

(1)CPU总体使用情况统计:-u, 用法为sar -u [ALL] [interval] [count], 加上ALL表示列出所有的关于cpu的统计项,如果不加ALL的话,只列一些比较常用的指标:

1
2
3
4
5
6
7
8
wuzesheng@ubuntu:~/work/test$ sar -u ALL 1 3
Linux 2.6.38-8-generic (ubuntu) 07/09/2011 _i686_ (2 CPU)
 
07:21:08 PM CPU %usr %nice %sys %iowait %steal %irq %soft %guest %idle
07:21:09 PM all 1.01 0.00 1.01 0.00 0.00 0.00 0.00 0.00 97.98
07:21:10 PM all 0.50 0.00 1.00 0.00 0.00 0.00 0.00 0.00 98.51
07:21:11 PM all 0.99 0.00 0.99 0.00 0.00 0.00 0.00 0.00 98.02
Average: all 0.83 0.00 1.00 0.00 0.00 0.00 0.00 0.00 98.17

上面是每1秒统计一次,统计3次后的的结果,最后一行为3次的平均值。
(2)每个CPU的单独的统计: -P,用法为sar -P { cpu [,...] | ALL } [interval] [count],这里第二个参数可以指定cpu序号,来查看指定的cpu,或者指定ALL,查看所有cpu的统计:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
wuzesheng@ubuntu:~/work/test$ sar -P 0 1 3
Linux 2.6.38-8-generic (ubuntu) 07/09/2011 _i686_ (2 CPU)
 
07:44:42 PM CPU %user %nice %system %iowait %steal %idle
07:44:43 PM 0 1.06 0.00 2.13 0.00 0.00 96.81
07:44:44 PM 0 0.00 0.00 0.97 0.00 0.00 99.03
07:44:45 PM 0 0.97 0.00 1.94 0.00 0.00 97.09
Average: 0 0.67 0.00 1.67 0.00 0.00 97.67
wuzesheng@ubuntu:~/work/test$ sar -P ALL 1 3
Linux 2.6.38-8-generic (ubuntu) 07/09/2011 _i686_ (2 CPU)
 
07:46:01 PM CPU %user %nice %system %iowait %steal %idle
07:46:02 PM all 1.51 0.00 3.52 0.00 0.00 94.97
07:46:02 PM 0 3.00 0.00 6.00 0.00 0.00 91.00
07:46:02 PM 1 0.00 0.00 2.00 0.00 0.00 98.00
 
07:46:02 PM CPU %user %nice %system %iowait %steal %idle
07:46:03 PM all 1.01 0.00 1.52 0.00 0.00 97.47
07:46:03 PM 0 1.04 0.00 2.08 0.00 0.00 96.88
07:46:03 PM 1 0.00 0.00 0.00 0.00 0.00 100.00
 
07:46:03 PM CPU %user %nice %system %iowait %steal %idle
07:46:04 PM all 0.00 0.00 1.50 0.00 0.00 98.50
07:46:04 PM 0 1.00 0.00 3.00 0.00 0.00 96.00
07:46:04 PM 1 0.00 0.00 0.00 0.00 0.00 100.00
 
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 0.84 0.00 2.18 0.00 0.00 96.98
Average: 0 1.69 0.00 3.72 0.00 0.00 94.59
Average: 1 0.00 0.00 0.67 0.00 0.00 99.33

上面是每1秒统计一次,统计3次后的的结果,最后一行为3次的平均值。我们可以看出,这里每个CPU的情况都列的非常清楚。
      通过上面两个选项,关于CPU的基本使用情况,都一目了然了。

  • 3. 通过sar获取系统IO信息

(1)磁盘设备IO情况统计:-b, 用来统计对物理设备的IO状态,主要是磁盘IO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wuzesheng@ubuntu:~/work/test$ sar -b 1 10
Linux 2.6.38-8-generic (ubuntu) 07/09/2011 _i686_ (2 CPU)
 
07:55:30 PM tps rtps wtps bread/s bwrtn/s
07:55:31 PM 0.00 0.00 0.00 0.00 0.00
07:55:32 PM 0.00 0.00 0.00 0.00 0.00
07:55:33 PM 0.00 0.00 0.00 0.00 0.00
07:55:34 PM 0.00 0.00 0.00 0.00 0.00
07:55:35 PM 6.00 0.00 6.00 0.00 112.00
07:55:36 PM 0.00 0.00 0.00 0.00 0.00
07:55:37 PM 0.00 0.00 0.00 0.00 0.00
07:55:38 PM 0.00 0.00 0.00 0.00 0.00
07:55:39 PM 0.00 0.00 0.00 0.00 0.00
07:55:40 PM 10.00 0.00 10.00 0.00 80.00
Average: 1.60 0.00 1.60 0.00 19.20

(2)网络设备IO情况统计:-n, 用法sar -n { keyword [,...] | ALL }, keyword包括DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 和 UDP6,不同的keyword统计不同的方面,关于网络IO的统计主要是用DEV,看每个设备上的读写情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
wuzesheng@ubuntu:~/work/test$ sar -n DEV 1 3
Linux 2.6.38-8-generic (ubuntu) 07/09/2011 _i686_ (2 CPU)
 
08:05:33 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
08:05:34 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:05:34 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
 
08:05:34 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
08:05:35 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:05:35 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
 
08:05:35 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
08:05:36 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:05:36 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
 
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00

上面是每1秒统计1次,统计3次的结果,最后几列为均值。
      通过上述选项,关于磁盘IO和网络IO的情况便可以一目了然。
      通过本文的内容,关于内存、cpu、IO的情况,我们便可以清楚的了解,其实,在linux下有很多工具可以完成上面的功能,只不过sar是相对比较全面的工具,所以在这里重点介绍了一下。其它的工具,包括vmstat可以用来查看内存的使用情况,top可以用来查看cpu的使用情况,iostat可以用来查看io的情况。说到底,用什么工具不是关键,解决问题才是我们的目的。另外,了解了这些工具的用法,还要学会如何使用它们去解决实际的问题,这是最重要的,后续我将就如何通过这些工具来优化应用程序写几篇文章,分享给大家,敬请期待。

linux程序分析工具介绍(三)——sar的更多相关文章

  1. linux程序分析工具介绍(一)—-”/proc”

    写在最前面:在开始本文之前,笔者认为先有必要介绍一下linux下的man,如果读者手头用linux系统,直接在终端输入man man便可以看到详细的说明,我在这里简单的总结一下,man命令是用来查看l ...

  2. Linux程序分析工具介绍—ldd,nm

    原文链接:http://blog.csdn.net/statdm/article/details/7759100 本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具.ldd是用来分析 ...

  3. linux程序分析工具介绍(二)—-ldd,nm

    本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具.ldd是用来分析程序运行时需要依赖的动态库的工具:nm是用来查看指定程序中的符号表相关内容的工具.下面通过例子,分别来介绍一下这两 ...

  4. linux程序分析工具

    ldd和nm是Linux下两个非常实用的程序分析工具.ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具,objdump用来查看源代码与汇编代码,-d只查 ...

  5. Linux程序分析工具:ldd和nm

    ldd和nm是Linux下两个非常实用的程序分析工具.其中,ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具. 1 ldd 格式:ldd [option ...

  6. (转)超全整理!Linux性能分析工具汇总合集

    超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...

  7. Linux资源分析工具杂谈(长文慎入)

    Linux资源分析工具杂谈 开篇之前请大家先思考一个问题:        磁盘的平均I/O响应时间是1 ms,这个指标是好,还是差? 众所周知,计算机科学是客观的,也就是说对于一个给定的问题,我们总是 ...

  8. 《Linux内核分析》第三周学习笔记

    <Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...

  9. 《Linux内核分析》第三周学习报告

    <Linux内核分析>第三周学习报告                                    ——构造一个简单的Linux系统MenuOS 姓名:王玮怡  学号:201351 ...

随机推荐

  1. 温故而知新_C语言_递归

    递归. 是的,差不多就是这种感觉.上面就是类似递归的显示表现. 2017 10 24更新: 递归这个问题放了很久.也没有写.大概是自己还没有好好理解吧. 在这里写下自己理解的全部. 一 何为递归. 字 ...

  2. Sql Server中常用的6个自定义函数分享

    转自:http://www.jb51.net/article/56691.htm IF OBJECT_ID('DBO.DISTINCT_STR') IS NOT NULL DROP FUNCTION ...

  3. JavaScript高级知识点整理

    一.JS中的数组 1.数组的三种定义方式 (1).实例化对象 var aArray=new Array(1,2,3,4,5); (2).快捷创建 var aTwoArray = [1,2,3,&quo ...

  4. 转载 NoSQL | Redis、Memcache、MongoDB特点、区别以及应用场景

    NoSQL | Redis.Memcache.MongoDB特点.区别以及应用场景 2017-12-12 康哥 码神联盟 本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Red ...

  5. luogu1447 [NOI2010]能量采集 莫比乌斯反演

    link 冬令营考炸了,我这个菜鸡只好颓废数学题了 NOI2010能量采集 由题意可以写出式子: \(\sum_{i=1}^n\sum_{j=1}^m(2\gcd(i,j)-1)\) \(=2\sum ...

  6. P2906 [USACO08OPEN]牛的街区Cow Neighborhoods

    传送门 曼哈顿距离好像不好直接算,我们可以把牛的坐标转化一下以方便计算距离 (x,y) --> (x+y,x-y) 那么距离就可以表示成 $max(\left |x_1-x_2  \right ...

  7. pm2 启动后台 node js

    1,安装node js 参看:https://www.cnblogs.com/wf-l5201314/p/9229974.html 2,pm2安装(安装环境linux / os) 命令:npm ins ...

  8. Spring Boot如何初始化数据

    Hibernate机制:classpath下的import.sql,l在ddl-auto是create和create-drop时自动执行,如果ddl-auto设置为update就不合适,所以此选项不适 ...

  9. 缓冲区 粘包 029 send 和sendall 的区别 find 和 findall 的区别

    一.tcp : 属于长连接 与客户端连接了之后 其他客户端需要等待 要连接另外一个 必须优雅的断开前面这个客户的连接. 二.缓冲区 :为了避免网络传输信号不通畅而是程序一直停留在消息发送状态而不向下进 ...

  10. Java 目录和文件的复制

    1.复制一个目录及其子目录.文件到另外一个目录 //复制一个目录及其子目录.文件到另外一个目录 public void copyFolder(File src, File dest) throws I ...