本文要介绍的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. socket socket讲解

    socket  socket讲解 一.socket是何物? 参考百度百科: http://baike.baidu.com/link?url=4YNURsJLEaL0II79C68gPUoYKliXWJ ...

  2. Python的__getattr__方法学习

    内容部分来自网络 __getattr__函数的作用: 如果属性查找(attribute lookup)在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数: ...

  3. 工欲善其事——Sublime Text

    一直在找mac下顺手的代码编辑器,要求能方便地查找和编辑,最好能再集成调试,最后选择了sublime.用了一段时间emacs,但是学习曲线过于陡峭.尤其是眼下的要务是啃代码时,玩弄emacs有点舍本逐 ...

  4. VirtualBox 5.0(虚拟机软件)里,安装Fedora遇到的问题!!

    问题一: 安装完毕后,重新启动竟然还是进入了Fedora安装过程里. 问题原因:Fedora,并没有处理安装时候加载的ISO文件,依旧让VirtualBox 5.0运行它. 解决方法:在运行Fedor ...

  5. P5212 SubString LCT+SAM

    $ \color{#0066ff}{ 题目描述 }$ 给定一个字符串init,要求支持两个操作 在当前字符串的后面插入一个字符串 询问字符串ss在当前字符串中出现了几次?(作为连续子串) 强制在线. ...

  6. 浅谈 关于ARC循环引用得问题

    这段时间在研究关于ARC得循环引用导致变量不能释放,在此先介绍一本书英文书: <Pro Multithreading and Memory Management for iOS and OS X ...

  7. tinkphp中的自动验证

    tinkphp是国内非常流行的一个开源框架,国内大小公司都在用的框架.对于初学的好多同学感觉不太好上手,其实并没没有大家想的那么复杂.自动验证功能是thinkphp提高的一种数据验证方法,分为动态和静 ...

  8. clojure with postgres

    主要关注访问pg.不关心其他db 1 clojure.java.jdbc https://github.com/clojure/java.jdbc http://clojure-doc.org/art ...

  9. Helvetic Coding Contest 2016 online mirror A1

    Description Tonight is brain dinner night and all zombies will gather together to scarf down some de ...

  10. storm local logback

    <configuration> <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ...