Collectl: Linux 性能监控的全能冠军

Collectl: Linux 性能监控的全能冠军

对于一个 Linux 系统管理员来说确保自己管理的系统处于一个良好的状态是其首要责任。Linux 系统管理员可以找到有很多工具来帮助自己监控和显示系统中的进程,例如 top 和 htop ,但是这些工具都不能与 collectl 相媲美。

Collectl: Linux Performance Monitoring

collectl是一款非常优秀并且有着丰富的命令行功能的实用程序,你可以用它来采集描述当前系统状态的性能数据。不同于大多数其它的系统监控工具,collectl 并非仅局限于有限的系统度量,相反,它可以收集许多不同类型系统资源的相关信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。

使用 collectl 的另一个好处就是它可以替代那些特定用途的工具如: top、ps、iotop 等等其它工具。那么collectl 有什么特性而使其成为一个有用的工具呢?

经过许多研究后,我总结了 collectl 的命令行功能的一些非常重要的特性。

Collectl 特性

  • 可以交互式地运行或作为一个守护进程,或同时二者兼备地运行。
  • 可以以多种格式显示输出。
  • 可以监控几乎所有的子系统。
  • 可以替代许多工具如 ps、top、iotop、vmstat。
  • 可以记录并回放捕获的数据。
  • 可以将数据导出成多种数据格式。(这在你想用外部工具分析数据时非常有用)
  • 可以作为一个服务来监控远程机或者整个服务器集群。
  • 可以在终端显示数据,写入数据到文件或者一个套接字。

如何在Linux上安装collectl

collectl可以在所有的 Linux 发行版上运行,唯一需要的就是 perl 语言,所以在安装 collectl 之前,一定要确保你的电脑上已经安装了Perl。

对于Debian/Ubuntu/Linux Mint

下面的命令可以用来在以 Debian 为基础的设备如 Ubuntu 上安装 collectl。


  1. $ sudo apt-get install collectl

对于RHEL/CentOS/Fedora

如果你正在使用基于红帽的发行版,你可以用 yum 命令轻松获取它。


  1. # yum install collectl

一些关于collectl的实例

collectl 工具安装完成之后,你可以轻松地在终端运行它,你甚至不需要指定任何选项。下面的命令将会以简短易读的格式显示cpu、硬盘和网络信息。


  1. # collectl
  2.  
  3. waiting for 1 second sample...
  4. #
  5. #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
  6. 13 5 790 1322 0 0 92 7 4 13 0 5
  7. 10 2 719 1186 0 0 0 0 3 9 0 4
  8. 12 0 753 1188 0 0 52 3 2 5 0 6
  9. 13 2 733 1063 0 0 0 0 1 1 0 1
  10. 25 2 834 1375 0 0 0 0 1 1 0 1
  11. 28 2 870 1424 0 0 36 7 1 1 0 1
  12. 19 3 949 2271 0 0 44 3 1 1 0 1
  13. 17 2 809 1384 0 0 0 0 1 6 0 6
  14. 16 2 732 1348 0 0 0 0 1 1 0 1
  15. 22 4 993 1615 0 0 56 3 1 2 0 3

正如上面终端上所显示的,我们很容易观察该命令输出的系统度量值,因为它每次以一行显示。

不加任何参数执行 collectl 会显示下面子系统的信息

  • cpu
  • 磁盘
  • 网络

提示:在这里,一个子系统就是每一种可以测量的系统资源。

你也可以显示除slabs以外各个子系统的统计数据,这要结合下面的 -all 选项来实现。


  1. # collectl --all
  2.  
  3. waiting for 1 second sample...
  4. #
  5. #cpu sys inter ctxsw Cpu0 Cpu1 Free Buff Cach Inac Slab Map Fragments KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut IP Tcp Udp Icmp Tcp Udp Raw Frag Handle Inodes Reads Writes Meta Comm
  6. 16 3 817 1542 430 390 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 24 3 1 1 0 1 0 0 0 0 623 0 0 0 8160 240829 0 0 0 0
  7. 11 1 745 1324 316 426 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 0 0 0 3 0 2 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
  8. 15 2 793 1683 371 424 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 0 0 1 1 0 1 0 0 0 0 622 0 0 0 8160 240829 0 0 0 0
  9. 16 2 872 1875 427 446 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 24 3 1 1 0 1 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
  10. 24 2 842 1383 473 368 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 168 6 1 1 0 1 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
  11. 27 3 844 1099 478 365 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 0 0 1 6 1 9 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
  12. 26 5 823 1238 396 428 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 0 0 2 11 3 9 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
  13. 15 1 753 1276 361 391 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 40 3 1 2 0 3 0 0 0 0 623 0 0 0 8160 240829 0 0 0 0

但是,你如何用它来监控 cpu 的使用情况呢? ‘-s’ 选项可以用来控制哪个子系统的数据需要收集和回放。

例如下面的命令可以用来对cpu使用情况进行一个总结。


  1. # collectl -sc
  2.  
  3. waiting for 1 second sample...
  4. #
  5. #cpu sys inter ctxsw
  6. 15 2 749 1155
  7. 16 3 772 1445
  8. 14 2 793 1247
  9. 27 4 887 1292
  10. 24 1 796 1258
  11. 16 1 743 1113
  12. 15 1 743 1179
  13. 14 1 706 1078
  14. 15 1 764 1268

当你将这个命令与“scdn”结合时会发生什么呢?学习命令行工具最好的方式就是多加练习,所以在终端运行下面的命令看看会发生什么吧。


  1. # collectl -scdn
  2.  
  3. waiting for 1 second sample...
  4. #
  5. #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
  6. 25 4 943 3333 0 0 0 0 1 1 0 2
  7. 27 3 825 2910 0 0 0 0 1 1 0 1
  8. 27 5 886 2531 0 0 0 0 0 0 0 1
  9. 20 4 872 2406 0 0 0 0 1 1 0 1
  10. 26 1 854 2091 0 0 20 2 1 1 0 1
  11. 39 4 1004 3398 0 0 0 0 2 8 3 6
  12. 41 6 955 2464 0 0 40 3 1 2 0 3
  13. 25 7 890 1609 0 0 0 0 1 1 0 1
  14. 16 2 814 1165 0 0 796 43 2 2 0 2
  15. 14 1 779 1383 0 0 48 6 1 1 0 1
  16. 11 2 795 1285 0 0 0 0 2 14 1 14

你可以很容易就明白默认选项是“cdn”,它代表cpu、硬盘和网络数据。运行带这个选项的 collectl 命令的输出和“collectl -scn”的输出一样。

如果你想采集内存的数据,用下面的命令。


  1. # collectl -sm
  2.  
  3. waiting for 1 second sample...
  4. #
  5. #Free Buff Cach Inac Slab Map
  6. 1G 177M 1G 684M 193M 1G
  7. 1G 177M 1G 684M 193M 1G
  8. 1G 177M 1G 684M 193M 1G
  9. 1G 177M 1G 684M 193M 1G
  10. 1G 177M 1G 684M 193M 1G
  11. 1G 177M 1G 684M 193M 1G
  12. 1G 177M 1G 684M 193M 1G
  13. 1G 177M 1G 684M 193M 1G

当你想要进一步了解内存使用信息、空闲的内存或者与你系统性能有关的重要资料时,上面的输出将是非常有用的。

如果想搜集一点儿 tcp 的数据呢?使用下面的命令来实现吧。


  1. # collectl -st
  2.  
  3. waiting for 1 second sample...
  4. #
  5. # IP Tcp Udp Icmp
  6. 0 0 0 0
  7. 0 0 0 0
  8. 0 0 0 0
  9. 0 0 0 0
  10. 0 0 0 0
  11. 0 0 0 0
  12. 0 0 0 0
  13. 0 0 0 0
  14. 0 0 0 0
  15. 0 0 0 0
  16. 0 0 0 0

当你熟练到一定程度时,你就可以很轻松地得到你想要的结果了。例如你可以将关于 tcp 的“t”选项和关于 cpu 的“c”选项组合到一起。下面的命令就是如此。


  1. # collectl -stc
  2.  
  3. waiting for 1 second sample...
  4. #
  5. #cpu sys inter ctxsw IP Tcp Udp Icmp
  6. 23 8 961 3136 0 0 0 0
  7. 24 5 916 3662 0 0 0 0
  8. 21 8 848 2408 0 0 0 0
  9. 30 10 916 2674 0 0 0 0
  10. 38 3 826 1752 0 0 0 0
  11. 31 3 820 1408 0 0 0 0
  12. 15 5 781 1335 0 0 0 0
  13. 17 3 802 1314 0 0 0 0
  14. 17 3 755 1218 0 0 0 0
  15. 14 2 788 1321 0 0 0 0

对于我们普通大众来说记住这些选项很困难,所以在这里,我整理出了一个列表来总结这个工具支持的选项。

  • b – buddy info (内存碎片)
  • c – CPU
  • d – Disk
  • f – NFS V3 Data
  • i – Inode and File System
  • j – Interrupts
  • l – Lustre
  • m – Memory
  • n – Networks
  • s – Sockets
  • t – TCP
  • x – Interconnect
  • y – Slabs (系统对象缓存)

对于一个系统管理员或者一个 Linux 用户来说很重要的一种数据就是硬盘的使用情况。下面的命令可以帮你监控硬盘使用情况。


  1. # collectl -sd
  2.  
  3. waiting for 1 second sample...
  4. #
  5. #KBRead Reads KBWrit Writes
  6. 0 0 0 0
  7. 0 0 0 0
  8. 0 0 92 7
  9. 0 0 0 0
  10. 0 0 36 3
  11. 0 0 0 0
  12. 0 0 0 0
  13. 0 0 100 7
  14. 0 0 0 0

你也可以使用“-sD”选项来采集单个硬盘的数据,不过你必须知道这就不会显示全部硬盘的信息。


  1. # collectl -sD
  2.  
  3. waiting for 1 second sample...
  4.  
  5. # DISK STATISTICS (/sec)
  6. # Pct
  7. #Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util
  8. sda 0 0 0 0 52 11 2 26 26 1 8 8 1
  9. sda 0 0 0 0 0 0 0 0 0 0 0 0 0
  10. sda 0 0 0 0 24 0 2 12 12 0 0 0 0
  11. sda 0 0 0 0 152 0 4 38 38 0 0 0 0
  12. sda 0 0 0 0 192 45 3 64 64 1 20 20 5
  13. sda 0 0 0 0 204 0 2 102 102 0 0 0 0
  14. sda 0 0 0 0 0 0 0 0 0 0 0 0 0
  15. sda 0 0 0 0 116 26 3 39 38 1 16 16 4
  16. sda 0 0 0 0 0 0 0 0 0 0 0 0 0
  17. sda 0 0 0 0 0 0 0 0 0 0 0 0 0
  18. sda 0 0 0 0 32 5 3 11 10 1 16 16 4
  19. sda 0 0 0 0 0 0 0 0 0 0 0 0 0

你也可以使用其它详细的子系统来采集详细的数据。下面是详细子系统的一个列表。

  • C – CPU
  • D – Disk
  • E – Environmental data (fan, power, temp), via ipmitool
  • F – NFS Data
  • J – Interrupts
  • L – Lustre OST detail OR client Filesystem detail
  • N – Networks
  • T – 65 TCP counters only available in plot format
  • X – Interconnect
  • Y – Slabs (system object caches)
  • Z – Processes

collectl 工具中有许多选项,但是仅用一篇文章来介绍肯定是介绍不过来的。然而如果将它当作 top 和 ps 工具来使用还是值得一提的。

很容易将 collectl 当作 top 来使用,只要在 Linux 系统的终端运行下面的命令你就会看到和 top 工具类似的输出。


  1. # collectl --top
  2.  
  3. # TOP PROCESSES sorted by time (counters are /sec) 13:11:02
  4. # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
  5. ^COuch!tecmint 20 1 40 R 1G 626M 0 0.01 0.14 15 28:48.24 0 0 0 109 /usr/lib/firefox/firefox
  6. 3403 tecmint 20 1 40 R 1G 626M 1 0.00 0.20 20 28:48.44 0 0 0 600 /usr/lib/firefox/firefox
  7. 5851 tecmint 20 4666 0 R 17M 13M 0 0.02 0.06 8 00:01.28 0 0 0 0 /usr/bin/perl
  8. 1682 root 20 1666 2 R 211M 55M 1 0.02 0.01 3 03:10.24 0 0 0 95 /usr/bin/X
  9. 3454 tecmint 20 3403 8 S 216M 45M 1 0.01 0.02 3 01:23.32 0 0 0 0 /usr/lib/firefox/plugin-container
  10. 4658 tecmint 20 4657 3 S 207M 17M 1 0.00 0.02 2 00:08.23 0 0 0 142 gnome-terminal
  11. 2890 tecmint 20 2571 3 S 340M 68M 0 0.00 0.01 1 01:19.95 0 0 0 0 compiz
  12. 3521 tecmint 20 1 24 S 710M 148M 1 0.01 0.00 1 01:47.84 0 0 0 0 skype
  13. 1 root 20 0 0 S 3M 2M 0 0.00 0.00 0 00:02.57 0 0 0 0 /sbin/init
  14. 2 root 20 0 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd
  15. 3 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.60 0 0 0 0 ksoftirqd/0
  16. 5 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0H
  17. 7 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/u:0H
  18. 8 root RT 2 0 S 0 0 0 0.00 0.00 0 00:04.42 0 0 0 0 migration/0
  19. 9 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh
  20. 10 root 20 2 0 R 0 0 0 0.00 0.00 0 00:02.22 0 0 0 0 rcu_sched
  21. 11 root RT 2 0 S 0 0 0 0.00 0.00 0 00:00.05 0 0 0 0 watchdog/0
  22. 12 root RT 2 0 S 0 0 1 0.00 0.00 0 00:00.07 0 0 0 0 watchdog/1
  23. 13 root 20 2 0 S 0 0 1 0.00 0.00 0 00:00.73 0 0 0 0 ksoftirqd/1
  24. 14 root RT 2 0 S 0 0 1 0.00 0.00 0 00:01.96 0 0 0 0 migration/1
  25. 16 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kworker/1:0H
  26. 17 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 cpuset

最后,当然不是说这不重要,我们在终端运行下面的命令就可以将 collectl 用作 ps 工具了。 你可以得到关于你系统进程的信息,这和在终端运行“ps”命令是一样的。


  1. # collectl -c1 -sZ -i:1
  2.  
  3. waiting for 1 second sample...
  4.  
  5. ### RECORD 1 >>> tecmint-vgn-z13gn <<< (1397979716.001) (Sun Apr 20 13:11:56 2014) ###
  6.  
  7. # PROCESS SUMMARY (counters are /sec)
  8. # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
  9. 1 root 20 0 0 S 3M 2M 0 0.00 0.00 0 00:02.57 0 0 0 0 /sbin/init
  10. 2 root 20 0 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd
  11. 3 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.60 0 0 0 0 ksoftirqd/0
  12. 5 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0H
  13. 7 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/u:0H
  14. 8 root RT 2 0 S 0 0 0 0.00 0.00 0 00:04.42 0 0 0 0 migration/0
  15. 9 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh
  16. 10 root 20 2 0 S 0 0 0 0.00 0.00 0 00:02.24 0 0 0 0 rcu_sched
  17. 11 root RT 2 0 S 0 0 0 0.00 0.00 0 00:00.05 0 0 0 0 watchdog/0
  18. 12 root RT 2 0 S 0 0 1 0.00 0.00 0 00:00.07 0 0 0 0 watchdog/1
  19. 13 root 20 2 0 S 0 0 1 0.00 0.00 0 00:00.73 0 0 0 0 ksoftirqd/1
  20. 14 root RT 2 0 S 0 0 1 0.00 0.00 0 00:01.96 0 0 0 0 migration/1
  21. 16 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kworker/1:0H
  22. 17 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 cpuset
  23. 18 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 khelper
  24. 19 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kdevtmpfs
  25. 20 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 netns
  26. 21 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 bdi-default
  27. 22 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kintegrityd

我确信许多系统管理员将会喜欢这个工具并且在充分使用它后会感受到它的强大。如果你想增进你对 collectl 的了解,从而达到新的层面,你可以去参阅 collectl 的 man 手册并勤加练习。

在你的终端键入下面的命令开始阅读吧。


  1. # man collectl

原文发布时间:2014-06-06

本文来自云栖合作伙伴“linux中国”

时间: 2024-11-29 18:37:15

Collectl: Linux 性能监控的全能冠军的相关文章

使用vmstat和iostat命令进行Linux性能监控

使用vmstat和iostat命令进行Linux性能监控 这是我们正在进行的Linux命令和性能监控系列的一部分.vmstat和iostat两个命令都适用于所有主要的类unix系统(Linux/unix/FreeBSD/Solaris). 如果vmstat和iostat命令在你的系统中不可用,请安装sysstat软件包.vmstat,sar和iostat命令都包含在sysstat(系统监控工具)软件包中.iostat命令生成CPU和所有设备的统计信息.你可以从这个连接中下载源代码包编译安装sys

三张图看遍Linux 性能监控、测试、优化工具

三张图看遍Linux 性能监控.测试.优化工具 Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的.简单的小工具.系统性能专家 Brendan D. Gregg 在最近的 LinuxCon NA 2014 大会上更新了他那个有名的关于 Linux 性能方面的 talk (Linux Performance Tools) 和幻灯片. 和 Brendan 去年的 talk 比较,今年增加了测试和优化两部分.下面的三张图片分别总结了 Linux 各个子系统以及

Linux性能监控

转自 http://hi.baidu.com/ccex/blog/item/f613f9d3d5e401d6a8ec9af8.html Linux性能监控   Linux性能监控之绪论篇性能调优的目的是找到系统的瓶颈,并且调节系统来设法消除这些瓶颈.我们在监控性能的时候重点在于监视一下子系统:1.CPU2.Memory3.IO4.Network 但这些系统都是彼此依赖,不能单独只看其中一个.当一个系统负载过重时往往会引起其它子系统的问题,比如说:->大量的读入内存的IO请求(page-in IO

Linux 性能监控、测试、优化工具

Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的.简单的小工具.系统性能专家 Brendan D. Gregg 在最近的 LinuxCon NA 2014 大会上更新了他那个有名的关于 Linux 性能方面的 talk (Linux Performance Tools) 和幻灯片. 和 Brendan 去年的 talk 比较,今年增加了测试和优化两部分.下面的三张图片分别总结了 Linux 各个子系统以及监控.测试.优化这些子系统所用到的工具. 监控

linux性能监控命令大全

一.分析工具 1.CPU性能分析工具: vmstat ps sar time strace pstree top 2.Memory性能分析工具: vmstat strace top ipcs ipcrm cat /proc/meminfo cat /proc/slabinfo cat /proc//maps 3.I/O性能分析工具: vmstat ipstat repquota quotacheck 4.Network性能分析工具: ifconfig ethereal tethereal ipt

linux性能监控利器20个

http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html 9个免费的linux系统镜像软件,监控服务器 http://www.linuxlinks.com/article/20090709183715280/SystemMonitoring.html  top,vmstat(软硬件信息),w(用户信息),uptime(负载信息),ps,free,iostat,sar,mpstat,pmap(某进程的具体内存使用),netstat,

linux 性能监控命令6——mpstat,vmstat,iostat

1.mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息.下面只介绍mpstat与CPU相关的参数,mpstat的语法如下: mpstat [-P {|ALL}] [internal [count]] 参数的含义如下: 参数 解释 -P {|ALL} 表示监控哪个CPU, cpu在[0,

linux 性能监控命令7——sar 命令

sar(System Activity Reporter系统活动情况报告)是目前Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情况.磁盘I/O.CPU效率.内存使用状况.进程活动及IPC有关的活动等.本文主要以CentOS 6.3 x64系统为例,介绍sar命令. sar命令常用格式 sar [options] [-A] [-o file] t [n] 其中: t为采样间隔,n为采样次数,默认值是1: -o file表示将命令

linux 性能监控命令4——free

原文转自网络 在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在Linux系统如何查看内存使用情况呢?下面和大家分享在Linux系统下查看内存使用情况的free命令:[root@scs-2 tmp]# free               total        used     free    shared    buffers     cached   Mem:   3266180     3250004     16176     0       11065