Linux系统监控神器--Collectl

为使系统良好运转,Linux系统管理员经常需要监测cpu,内存,磁盘,网络等系统信息。Linux上已有iotop,top,free,htop,sar等丰富的常规工具来实现监测功能。今天让我们走进Collectl来了解这个集测试/监控/分析系统性能为一体的Linux工具。

Collectl作为一个轻量级的监控工具,在同类工具中是功能最全的。用户可监测不同的复杂系统矩阵值,并可保留数据以做之后的分析。不同于其他只用来监测特定系统参数的工具,Collectl可以同时监测不同的变量,并以合适的方式记录它们。

摘自Collectl官网 ...

不同于或聚焦于一小组统计数据、采用唯一输出方式,或采用迭代、作为守护进程运行的大部分监测工具,collectl可以同时全部实现。用户可选择各种子系统中的任一系统来监测包括内存,CPU,磁盘,索引节点,无线带宽,lustre,内存,网络,网络文件系统,进程,二次型,slabs,套接口及TCP等信息。

深入学习前让我们先看以下命令。

  1. $ collectl
  2. waiting for1 second sample...
  3. #<--------CPU--------><----------Disks-----------><----------Network---------->
  4. #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
  5. 00864177200000100
  6. 521338273400820001
  7. 1012222647009230201
  8. 107631722008030102

CPU使用率,磁盘输入输出和网络活动以每秒为单位来加载。对可以理解这些数据的人来说这些信息很容易读懂。这项列表在给定的时间间隔里会持续增加,并可直接形成一项文件跟踪日志。collectl工具提供了各种命令来对这些数据进行记录,查找及做其他处理。

安装collectl工具

Ubuntu/Debian用户来说Collectl是默认资源,所以使用apt命令便可获取。

  1. $ sudo apt-get install collectl

Fedora/CentOS用户使用yum命令便可获取。

  1. $ yum install collectl

使用

必要的了解 - Collectl子系统

子系统是可检测到的不同系统资源类型。像CPU,内存,带宽等等都可构成一个子系统。只运行collectl命令将以批处理模式输出CPU,磁盘和网络子系统信息,我们在上文已看到相关内容。

从操作说明可以看到,Collectl可以识别以下子系统。

  1. 总计子系统
  2. b - buddy info (内存片段)
  3. c - CPU
  4. d -Disk
  5. f - NFS V3 Data
  6. i -InodeandFileSystem
  7. j -Interrupts
  8. l -Lustre
  9. m -Memory
  10. n -Networks
  11. s -Sockets
  12. t - TCP
  13. x -Interconnect
  14. y -Slabs(system object caches)
  15. 细节子系统
  16. 这是一系列的详细信息,大部分情况下都会由相应的总计数据衍生出来。目前“环境变量”和“进程”2类没有相应的总计数据。如果有3个磁盘,选择-sd,将只会看到3个磁盘组合出的单一信息。如果选择-sD,将会分别显示各磁盘信息。
  17. C - CPU
  18. D -Disk
  19. E -Environmental data (fan, power, temp), via ipmitool
  20. F - NFS Data
  21. J -Interrupts
  22. L -Lustre OST detail OR client Filesystem detail
  23. M -Memory node data, which is also known as numa data
  24. N -Networks
  25. T -65 TCP counters only available in plot format
  26. X -Interconnect
  27. Y -Slabs(system object caches)
  28. Z -Processes

使用“-s”来监测特定的子系统并向其添加子系统的识别项。现在让我们举几个例子。

1. 监测cpu使用率

用“-sc”实现CPU总使用率的监测

  1. $ collectl -sc
  2. waiting for1 second sample...
  3. #<--------CPU-------->
  4. #cpu sys inter ctxsw
  5. 3018003729
  6. 3017673599

使用“-C”观察各个单独的CPU使用情况。结果将会输出多行,分别对应一个CPU。

  1. $ collectl -sC
  2. waiting for1 second sample...
  3. # SINGLE CPU STATISTICS
  4. # Cpu User Nice Sys Wait IRQ Soft Steal Idle
  5. 0300000096
  6. 1300000096
  7. 2200000097
  8. 3100000098
  9. 0200000097
  10. 1202000095
  11. 2100000098
  12. 3401000095

如果需要,可以同时使用C和c来获取单项CPU监测数据和汇总数据。

2. 内存监测

使用m子系统查看内存。

  1. $ collectl -sm
  2. waiting for1 second sample...
  3. #<-----------Memory----------->
  4. #Free Buff Cach Inac Slab Map
  5. 2G220M1G1G210M3G
  6. 2G220M1G1G210M3G
  7. 2G220M1G1G210M3G

不难解释。 M用来查看更多内存的详细信息。

  1. $ collectl -sM
  2. waiting for1 second sample...
  3. # MEMORY STATISTICS
  4. # Node Total Used Free Slab Mapped Anon Locked Inact Hit%
  5. 07975M5939M2036M215720K372184K06652K1434M0
  6. 07975M5939M2036M215720K372072K06652K1433M0

这类似于免费报告吗?

3. 查看磁盘使用情况

d和D可以查看磁盘使用的概况和详细情况。

  1. $ collectl -sd
  2. waiting for1 second sample...
  3. #<----------Disks----------->
  4. #KBRead Reads KBWrit Writes
  5. 4113624
  6. 008013
  7. $ collectl -sD
  8. waiting for1 second sample...
  9. # DISK STATISTICS (/sec)
  10. # <---------reads---------><---------writes---------><--------averages--------> Pct
  11. #Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util
  12. sda 0000000000000
  13. sda 0000000000000
  14. sda 10211715322621
  15. sda 0000921151818112125

“--verbose”命令可以用来查看附加信息。和D命令不同,它将概况扩展,包含了更多信息。

  1. $ collectl -sd --verbose

4. 同时报告多系统情况

如果想要同时得到CPU,内存和磁盘报告,那么同时使用子命令组合来实现。

  1. $ collectl -scmd
  2. waiting for1 second sample...
  3. #<--------CPU--------><-----------Memory-----------><----------Disks----------->
  4. #cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes
  5. 40218743341G221M1G1G210M3G0000
  6. 30189640651G221M1G1G210M3G00205

5. 显示统计时间

若要将每行的监测信息和时间一同显示,使用T选项。通过在“-o”参数来指定。

  1. $ collectl -scmd -oT
  2. waiting for1 second sample...
  3. # <--------CPU--------><-----------Memory-----------><----------Disks----------->
  4. #Time cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes
  5. 12:03:0530196140131G225M1G1G212M3G0000
  6. 12:03:0630188438101G225M1G1G212M3G0000
  7. 12:03:0730201140601G225M1G1G212M3G0000

使用“-oTm”可将时间换成毫秒显示。

6. 改变样本计数

collectl报告的每行都是一份快照或样本,它通常设定定期间隔如1秒来取样。i可用来设置时间间隔,c用来设置样本计数。

  1. $ collectl -c1 -sm
  2. waiting for1 second sample...
  3. #<-----------Memory----------->
  4. #Free Buff Cach Inac Slab Map
  5. 1G261M1G1G228M3G

使用i命令可改变更新时间间隔

  1. $ collectl -sm -i2
  2. waiting for2 second sample...
  3. #<-----------Memory----------->
  4. #Free Buff Cach Inac Slab Map
  5. 1G261M1G1G229M3G

上面的命令设定每2秒收集一次内存信息。

7. 像iotop一样使用collectl

top命令将collectl像iostat/top工具一样进行智能统计。列表会持续更新,且可以使用不同字段实现排序。

  1. $ collectl --top iokb

输出如下

  1. # TOP PROCESSES sorted by iokb (counters are /sec) 09:44:57
  2. # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
  3. 3104 enlighte 2026833 S 938M33M00.000.00000:09.160400/usr/bin/ktorrent
  4. 1 root 2000 S 26M3M20.000.00000:01.300000/sbin/init
  5. 2 root 2000 S 0030.000.00000:00.000000 kthreadd
  6. 3 root 2020 S 0000.000.00000:00.020000 ksoftirqd/0
  7. 4 root 2020 S 0000.000.00000:00.000000 kworker/0:0
  8. 5 root 020 S 0000.000.00000:00.000000 kworker/0:0H
  9. 7 root RT 20 S 0000.000.00000:00.080000 migration/0
  10. 8 root 2020 S 0020.000.00000:00.000000 rcu_bh
  11. 9 root 2020 S 0000.000.00000:00.000000 rcuob/0

上面的输出很像top命令,并且它以磁盘数量降序排列进程。

若只想显示上面的5项进程,可用以下命令实现

  1. $ collectl --top iokb,5

若想学习上面的列表里哪些字段可以排序,使用如下命令

  1. $ collectl --showtopopts
  2. 下面是应用于进程或数据的最高排序类型列表。某些情况下你可能会使用某一字段进行排序,但它并非显示的一部分。
  3. TOP PROCESS SORT FIELDS
  4. 进程排序字段
  5. Memory
  6. vsz virtual memory
  7. rss resident (physical) memory
  8. Time
  9. syst system time
  10. usrt user time
  11. time total time
  12. accum accumulated time
  13. I/O
  14. rkb KB read
  15. wkb KB written
  16. iokb total I/O KB
  17. rkbc KB read from pagecache
  18. wkbc KB written to pagecache
  19. iokbc total pagecacge I/O
  20. ioall total I/O KB (iokb+iokbc)
  21. rsys read system calls
  22. wsys write system calls
  23. iosys total system calls
  24. iocncl Cancelled write bytes
  25. PageFaults
  26. majf major page faults
  27. minf minor page faults
  28. flt total page faults
  29. ContextSwitches
  30. vctx volunary context switches
  31. nctx non-voluntary context switches
  32. Miscellaneous(best when used with--procfilt)
  33. cpu cpu number
  34. pid process pid
  35. thread total process threads (not counting main)
  36. TOP SLAB SORT FIELDS
  37. numobj total number of slab objects
  38. actobj active slab objects
  39. objsize sizes of slab objects
  40. numslab number of slabs
  41. objslab number of objects in a slab
  42. totsize total memory sizes taken by slabs
  43. totchg change in memory sizes
  44. totpct percent change in memory sizes
  45. name slab names

8. 像top一样使用collectl

为使collectl像top,我们只需以CPU使用率排序输出进程。

  1. $ collectl --top

输出如下

  1. # TOP PROCESSES sorted by time (counters are /sec) 14:08:46
  2. # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
  3. 9471 enlighte 2091020 R 63M22M30.030.101300:00.810003/usr/bin/perl
  4. 3076 enlighte 2026832 S 521M40M20.000.03300:55.140002/usr/bin/yakuake
  5. 3877 enlighte 20335641 S 1G218M10.000.03310:10.500000/opt/google/chrome/chrome
  6. 4625 enlighte 20289536 S 1G241M20.000.02208:24.3900012/usr/lib/firefox/firefox
  7. 5638 enlighte 2033563 S 1G265M10.000.02209:55.040002/opt/google/chrome/chrome
  8. 1186 root 2011524 S 502M76M00.000.01103:02.960000/usr/bin/X
  9. 1334 www-data 2013290 S 87M1M20.000.01100:00.850000 nginx:

上面的命令也可用于显示子系统信息。

  1. $ collectl --top -scm

9. 像ps一样列出进程

为像ps命令一样列出所有进程且没有后续更新,用“c”命令让其计数至1. $ collectl -c1 -sZ -i:1

上面的命令将会列出类似“ps -e”命令的所有进程。“procfilt”用于从所有进程中过滤出特定的进程信息。“procopts”用于指定另一组微调进程列表显示的命令。

10. 像vmstat一样使用collectl

Collectl有内置命令来完成像vmstat一样的功能。

  1. $ collectl --vmstat
  2. waiting for1 second sample...
  3. #procs ---------------memory (KB)--------------- --swaps-- -----io---- --system-- ----cpu-----
  4. # r b swpd free buff cache inact active si so bi bo in cs us sy id wa
  5. 1001733M242M1922M1137M710M0001081982391820951
  6. 1001733M242M1922M1137M710M00001906388610980
  7. 1001733M242M1922M1137M710M00001739348030960

11. 子系统的详细信息

下面的命令以一秒为间隔,统计5次CPU信息并和时间一起显示出详细信息(冗长)。

  1. $ collectl -sc -c5 -i1 --verbose -oT
  2. waiting for1 second sample...
  3. # CPU SUMMARY (INTR, CTXSW & PROC /sec)
  4. #Time User Nice Sys Wait IRQ Soft Steal Idle CPUs Intr Ctxsw Proc RunQ Run Avg1 Avg5 Avg15 RunT BlkT
  5. 14:22:101100000087413122691086610.780.860.7810
  6. 14:22:111500000084412832496086610.780.860.7810
  7. 14:22:121700000082413422658086600.780.860.7800
  8. 14:22:131500000084412412429086610.780.860.7810
  9. 14:22:141100000088412702488086600.800.870.7800

改变"-s"变量查看不同的子系统。

总结

本文的介绍不过是对collectl这个强大工具的一些浅见。本文本希望展示它有多灵活,其实通过以上的讨论让我们了解了包括记录及回寻捕获的数据,以多种文件格式导出数据并将数据转换为可被广泛的工具分析的格式等等功能的实现。

collectl提供的另一大功能便是像服务一样运行,对远程Linux机器或完整的服务器集群提供远程监控,其表现堪称完美。

Collectl同另一批可用于处理分析收集数据的名为Collectl实用工具 (colmux, colgui, colplot)的功能相契合。如果有机会,我们在之后的文章中会介绍它们。

为更详细的了解Collectl工具,请登录它的主页来学习更多的功能。笔者建议查看FAQs来快速了解collectl,读取collectl文档获取深层次的例子。等价命令表也可定位至更多的像sar,iostat,netstat,top等和collectl功能部分等价的常用工具。

时间: 2024-10-30 12:48:05

Linux系统监控神器--Collectl的相关文章

Linux 系统监控、诊断工具-top,vmstat,iostat,iotop

1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器硬件配置一样,部署的软件都一样,却单单这一台负载有问题,初步猜测可能硬件有问题了. 同时,我们还需要把负载有异常的罪魁祸首揪出来,到时候从软件.硬件层面分别寻找解决方案. 2.排查: 从 top 中可以看到 load average 偏高,%wa 很高,%us 偏低: 从上图我们大致可以推断 IO

linux系统监控、诊断工具摘录top IO wait lsof

linux 系统监控.诊断工具之 top 详解 http://my.oschina.net/leejun2005/blog/157910 linux系统监控.诊断工具之 IO wait http://my.oschina.net/leejun2005/blog/355915 linux 系统监控.诊断工具之 lsof 用法简介 http://my.oschina.net/leejun2005/blog/153584 CPU Load过高问题分析和解决方案 http://yikebocai.com

Linux系统监控实用工具Glances

Linux系统监控实用工具Glances Glances安装 Glances安装要求:python >= 2.6 和 psutil >= 0.4.1 1.第一步,安装了python->2.6 2.第二步,安装了psutil->0.4.1 #tar -zxvf psutil.包. #cd psutil包 #python setup.py install 3.第三步,安装glances #tar -zxvf glances.包 # cd glances # python setup.p

linux 系统监控、诊断工具之 IO wait

1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器硬件配置一样,部署的软件都一样,却单单这一台负载有问题,初步猜测可能硬件有问题了. 同时,我们还需要把负载有异常的罪魁祸首揪出来,到时候从软件.硬件层面分别寻找解决方案. 2.排查: 从 top 中可以看到 load average 偏高,%wa 偏高,%us 很低: 充分说明这个问题是由于 IO

[转]linux 系统监控、诊断工具之 IO wait

1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器硬件配置一样,部署的软件都一样,却单单这一台负载有问题,初步猜测可能硬件有问题了. 同时,我们还需要把负载有异常的罪魁祸首揪出来,到时候从软件.硬件层面分别寻找解决方案. 2.排查: 从 top 中可以看到 load average 偏高,%wa 很高,%us 偏低: 从上图我们大致可以推断 IO

linux系统监控常用工具

linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h  显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 uname -srvmo 二.系统进程工具包(procps) 1./bin/ps 显示系统进程 ps -ef      ps aux 2./usr/bin/pgrep 过滤显示系统进程 3./usr/bin/free 显示系统内存的使用 4./usr/bin/vmstat 报告虚拟内存的统计信息 5.

常用的linux系统监控命令

常用的linux系统监控命令 博客分类: linux 服务器 记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令:ps -mp pid -o THREAD,tid,time   或者  ps -Lfp pid 结果展示: 这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息. 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列. 比如这里找到

linux系统监控集合 (私人备用)

需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性能问题可能原因.此次讨论到的工具只是分析和调试服务器下面问题时最基本工具中的一部分. 1.找出瓶颈 2.硬盘(存储)瓶颈 3.CPU及内存瓶颈 4.网络瓶颈 #1: top - 进程活动 top提供一个当前运行系统实时动态的视图,也就是正在运行进程.在默认情况下,显示系统中CPU使用率最高的任务,并

linux系统监控命令

ps命令 命令:ps -mp pid -o THREAD,tid,time   或者  ps -Lfp pid 结果展示: 这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息. 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列. 比如这里找到了一个TID : 30834 ,所占用的TIME时间最高. 通过 printf "%x\n" 30834 首先转化成16进制, 继续通过jstack命令du