链接:https://www.cnblogs.com/arnoldlu/p/9462221.html
01. top
top是最常用的查看系统资源使用情况的工具,包括CPU、内存等资源。
这里主要关注的是CPU 资源。
1.1 /proc/loadavg
平均负载取自/proc/loadavg。
9.53 9.12 8.37 3/889 28165 前三个数字是1、5、15分钟内进程队列中的平均进程数,包括正在运行的进程+准备运行的进程。
第四个数字的分子代表正在运行的进程数,分母是进程总数。
最后一个数字是最近运行的进程ID 号。
其中top取/proc/loadavg的前三位数字。
1.2 top使用
打开顶部可以指定更新周期。
输入H打开隐藏线程;输入1,显示单核CPU使用率。
top -H -b -d 1 -n 200 top.txt,每1秒计数一次,共200次,显示线程详细信息,并保存到top.txt。
CPU信息对应的含义如下:
us:user,统计nice小于等于0的用户空间进程,即优先级为100~120。 ni:nice,统计nice大于0的用户空间进程,即优先级为121~139。 sys:系统,统计内核态运行时间,不包括中断。 id:idle,系统处于空闲状态。 wa:iowait,统计io等待时间。 hi:硬件中断,统计硬件中断时间。 si:软件中断,统计软件中断时间。圣:偷
02. perf
《系统级性能分析工具perf的介绍与使用[3]》 关于perf的使用的详细介绍,这里重点关注CPU的使用情况。
通过sudo perf top -s comm 可以查看当前系统中运行进程的比例。
与top不同,这里不区分idle、system、user。这里的比例是每个进程在总运行时间中所占的比例。
通过sudo perf record 记录采样信息,然后使用sudo perf report -s comm。
03. sar和ksar
sar的意思是System Activity Report,可以用来实时观察当前系统活动并生成历史报告。
要使用sar,需要安装sudo apt install sysstat,然后配置sysstat。
sar用于记录统计信息,ksar[4]用于以图形方式输出记录的信息。
ksar下载地址为:https://github.com/vlsi/ksar/releases。
# 将ENABLED="false" 改为ENABLED="true"$ sudo gedit /etc/default/sysstat# 修改sar 周期等配置$ sudo gedit /etc/cron.d/sysstat# 重启sar 服务$ sudo /etc /init.d/sysstat restart# sar日志存放目录$ ls -l /var/log/sysstat/使用sar将从开机到当前的统计信息记录到文件sar.txt中。
LC_ALL=C sar -A sar.txtPS:这里直接使用sar -A,在ksar中无法正常显示。
如下执行java -jar ksar.jar,然后Data-Load from text file.选择保存的sar.txt 文件。
得到下面的图表。
还可以使用sar来记录一段时间的信息,并指定采样周期和采样次数。
在将这些命令保存到文件之前添加LC_ALL=C 后,可以在ksar 中以图形方式显示这些命令。
sar 1 100-----------------1个sar中所有CPU的统计sar -P ALL 1 100--------包括1个、单个CPU中CPU的统计信息sar -B 1 100----------------分页统计sar -b 1 100----------------块设备IO 统计sar -d 1 100----------------块设备活动统计sar -F 1 100----------------挂载文件系统统计sar -r ALL------------------ 显示详细的内存使用统计信息sar -S ---------------- ------- -显示交换空间使用统计信息sar -w------------------------ 显示进程创建和进程切换统计信息sar -W-------- ---------------显示交换区换入和换出统计信息。欲了解更多详情,请参阅
• 《How To Create sar Graphs With kSar To Identifying Linux Bottlenecks[5]》
• 《Collect and report Linux System Activity Information with sar[6]》。
04. mpstat
mpstat 是多处理器统计信息。当没有参数时,mpstat显示系统中所有信息的平均值。
常见用法如下,-P ALL 监控所有CPU,详细信息显示具体CPU; 10表示每10秒监控一次; 20表示监控20次。
$ mpstat -P ALL 10 20 结果如下:
usr代表用户空间进程,nice代表nice值大于0的用户空间进程。
sys是内核空间,iowait是I/O等待时间,irq是硬中断,soft是软中断,idle是空闲时间,guest和gnice都是虚拟机时间。
05. uptime
uptime是一个简单的方法,可以获取系统的总运行时间,以及最近1分钟、5分钟、15分钟的平均负载。
uptime通过/proc/uptime和/proc/loadavg获取相关信息。
up之前的时间是当前系统时间,up之后的时间是系统运行时间。
负载平均值之后是1 分钟、5 分钟和15 分钟平均负载。
11:15:41 up 82 days, 20:34, 8 users, load Average: 0.28, 0.40, 0.43
06. vmstat
vmstat主要是一个用来监控系统内存使用情况的工具,但也包含了一些CPU相关的信息。
使用方法vmstat 5 5表示运行5次,每次5秒。结果如下:
procs --------------内存---------- ---交换-- -----io---- -系统-- ------cpu ----- r b swpd 空闲buff 缓存si so bi bo 在cs us sy id wa st 1 0 472576 228688 559092 1061756 0 0 9 39 1 0 8 4 87 0 0 1 0 472576 228184 559100 1061756 0 0 0 13 1532 3395 10 6 84 0 0 1 0 472576 229308 559100 1061616 0 0 0 0 1446 3449 10 5 85 0 0 0 0 472576 229592 559108 1061616 0 0 0 6 1419 474 10 5 85 0 0 1 0 472576 229804 559108 1061616 0 0 0 0 1446 3439 10 5 85 0 0 以上参数可以分为6个部分:进程、内存、swap、io、中断和进程切换、cpu。
更详细的解释:
参考文件:《Linux Performance Measurements using vmstat[7]》
07. pidstat
pidstat主要用于监控所有或指定进程对系统资源的使用情况。
7.1 查看CPU使用情况
第一次运行pidstat时,显示自系统启动以来的各种统计信息。此后运行pidstat 将显示自上次运行该命令以来的统计信息。用户可以通过指定统计次数和时间来获取所需的统计信息。
# 显示所有进程统计信息,包括空闲进程。 pidstat -p ALL# 显示更详细的线程统计信息。 pidstat -p ALL -t# 周期采样及采样次数pidstat [选项] 间隔[计数] 另外,还可以使用-p来获取指定进程的统计信息。
pidstat还可以通过-r获取内存使用统计信息,通过-d获取IO使用统计信息。
7.2 查看内存使用情况
pidstat -p ALL -r 结果如下:
15:18:21 UID PID minflt/s majflt/s VSZ RSS %MEM Command15:18:21 0 1 0.02 0.00 185316 3028 0.08 systemd15:18:21 0 2 0.00 0.00 0 0 0.00 kthreadd15:18:21 0 4 0 .00 0.00 0 0 0.00 kworker/0:0H15h18m21s0 6 0.00 0.00 0 0 0.00 mm_percpu_wq15h18m21s0 7 0.00 0.00 0 0 0.00 ksoftirqd/015h18m21s0 8 0.00 0.00 0 0 0.00 rcu_schedminflt/s: 每秒页面错误数(次要页面错误)。次要页面错误的数量是指虚拟内存地址映射到物理内存地址时发生的页面错误的数量。
majflt/s: 每秒主要页面错误的数量。当虚拟内存地址映射到物理内存地址时,对应的页就处于交换状态。这种页面错误属于主要页面错误,一般发生在内存使用紧张的情况下。
VSZ: 此进程使用的虚拟内存(以kB 为单位)。
RSS: 此进程使用的物理内存(以kB 为单位)。
%MEM: 此进程使用的内存百分比。
Command: 拉取进程对应的命令。
7.3 查看磁盘使用情况
pidstat -p ALL -d 结果如下:
15 小时20 分钟40 秒UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command15 小时20 分钟40 秒0 1 -1.00 -1.00 -1.00 243523129 systemd15 小时20 分钟40 秒0 2 -1.00 -1.00 -1.00 0 kthreadd15 小时20分40秒0 4 -1.00 -1.00 -1.00 0 kworker/0:0H15小时20分40秒0 6 -1.00 -1.00 -1.00 0 mm_percpu_wq15小时20分40秒0 7 -1.00 -1.00 -1.00 7145123286 79 ksoftirqd/0 15:20 分钟40 秒0 8 -1.00 -1.00 -1.00 417757303594 rcu_schedkB_rd/s: 进程每秒从磁盘读取的数据量(以kB 为单位)。
kB_wr/s: 进程每秒写入磁盘的数据量(以kB 为单位)。
kB_ccwr/s:进程每秒写入磁盘的数据量(以kB为单位)。
Command:拉起进程对应的命令。
08. time
time命令可用于统计指定程序的CPU时间消耗。
例如, time cksum nomachine_6.0.80_1.exe 得到以下结果。
2401940638 32606752 nomachine_6.0.80_1.exe#整个操作所花费的总时间,0.263-0.094-0.011=0.158是IO等待时间。 real 0m0.263s# 用户态耗时user 0m0.094s# 内核态耗时sys 0m0.011s2401940638 32606752 nomachine_6.0.80_1.exe# 从第二次执行可以看出,等待IO操作的时间基本没有了。 real 0m0.098suser 0m0.097ssys 0m0.000s
09. cpustat
通过sudo apt install cpustat 安装,cpustat -T -D -x 结果如下。
# 显示Load Avg信息和平均频率等。 Load Avg 0.66 0.54 0.49,Freq Avg. 1.46 GHz, 4个CPU在线#进程切换次数、硬中断、软中断等统计信息#CPU占用率、用户空间和内核空间占用率等3791.1 Ctxt/s, 1709.9 IRQ/s, 1800.0 softIRQ/s , 0.0 个新任务/秒,1 个正在运行,0 个已阻塞%CPU %USR %SYS PID S CPU 时间任务25.74 25.74 0.00 11435 R 3 2.29w /usr/bin/python3 15.84 15.84 0.00 9445 S 0 1.49w /usr/lib/xorg/Xorg 10.89 9.90 0.99 2722 S 1 1.05w compiz 7.92 0.00 7.92 32352 S 2 16.60s [kworker/2:1] 0 .99 0.00 0.99 32397 R 1 0.01s cpustat 0.99 0. 99 0.00 11046 S 2 16.20h 压缩0.99 0.99 0.00 1317 S 0 8.76h /usr/NX/bin/nxnode.bin 0.99 0.00 0.99 10293 S 1 1.24m [kworker/1:2] 64.36 53.47 1 0.89 总负载平均0.66 0.54 0.49,频率平均。 1.75 GHz,4 个CPU 在线2834.8 Ctxt/s,1190.9 IRQ/s,1183.3 softIRQ/s,0.0 个新任务/s,4 个正在运行,0 个被阻止%CPU %USR %SYS PID S CPU 时间任务25.76 25.76 0.00 11435 R 3 2.29w /usr/bin/python3 18.18 18.18 0.00 9445 S 0 1.49w /usr/lib/xorg/Xorg 7.58 7.58 0.00 2722 S 1 1.05w compiz 6.06 0.00 6.06 32352 S 2 16.64s [kworker/2 :1] 1.52 0.00 1.52 32397 R 1 0.02s cpustat 1.52 0.00 1.52 8 S 0 3.00h [rcu_sched] 1.52 0.00 1.52 18409 S 0 1.16m update-notifier 62.12 51.52 10.61 CPU 利用率的TotalDistribution(每个任务):% CPU 利用率计数(% ) 0.00 - 1.97 706 98.88 1.97 - 3.94 0 0.00 3.94 - 5.91 0 0.00 5.91 - 7.88 2 0.28 7.88 - 9.85 0 0.00 9.85 - 11.82 0 0.00 11.82 - 13.79 1 0.14 13.79 - 15.76 0 0.00 15.76 - 17.73 1 0.14 17.73 - 19.70 1 0.14 19.70 - 21.67 0 0.00 21.67 - 23.64 0 0.00 23.64 - 25.61 2 0.28 25.61 - 27.57 0 0.00 27.58 - 29.54 0 0.00 29.55 - 31.51 0 0.00 31.52 - 33.48 0 0. 00 33.48 - 35.45 0 0.00 35.45 - 37.42 0 0.00 37.42 - 39.39 1 0.14分布CPU 利用率(每个CPU):-------------------------------------------------------- ----- -每个CPU的占用率分为用户空间和内核空间。 CPU# USR% SYS% 0 17.37 1.20 1 8.98 2.40 2 0.60 7.19 3 25.75 0.00
10. htop
htop和top的功能类似,但可读性比top好。在界面上按F5就可以看到进程中的线程。树形结构代表了父子关系。
11. atop
atop 是一个用于监视系统资源和进程的工具。它按照CPU使用率降序对列表中的进程进行排序,每个进程都包含CPU、内存、磁盘和网络状态等信息。其功能类似于top和htop。
12. glances
Glaces是一个用python编写的报告工具,功能与Nmon类似。它可以报告CPU、内存、网络、磁盘和进程的统计信息。除了报告统计数据之外,Glances 不支持任何其他特性或功能。在程序运行时单击“h”以显示帮助页面。
13. nmon
Nmon是一款非常易于使用的工具,可以在一个屏幕上监控CPU、内存、网络、磁盘使用情况和进程列表。除了无法管理流程和修改报告显示之外,Nmon 与那些仅用于报告的报告工具相同。此外,它还可以将数据保存到电子表格文件中。
13. pcp-gui
Performance Co-Pilot,简称PCP,是一个系统性能和分析框架。它组织来自多个主机的数据并实时分析,以帮助您识别异常性能模式。它还提供API 让您设计自己的监控和报告解决方案。
安装pcp相关工具。
$ sudo apt install pcp pcp-guiFile - 打开视图选择要打开的视图,如CPU、Disk、Memory 等。
14. collectl和colplot
14.1 collectl使用
collectl 是一个优秀的实用程序,具有丰富的命令行功能。您可以使用它来收集描述当前系统状态的性能数据。
与大多数其他系统监控工具不同,collectl 不限于有限的系统测量。相反,它可以收集与许多不同类型的系统资源相关的信息,例如cpu、磁盘、内存、网络、套接字、tcp、inodes、infiniband、lustre、内存、nfs、进程、quadrics、slabs和buddyinfo等。
同时collectl还可以替代常用的工具,如top、vmstat、ps、iotop等。
安装collectl:
sudo apt-get installcollectlcollectl 使用起来非常简单。默认情况下,collectl 显示cpu、磁盘和网络信息。
Collectl还可以显示更多子系统信息。如果该选项有对应的大写选项,则大写选项表示更详细的设备统计信息。
b buddy info(内存碎片) c 所有CPU的综合统计信息; C——单个CPU的统计数据。 d——整个文件系统Disk的统计信息; C——单个磁盘的统计信息。 f NFS V3 Datai Inode 和File Systemj 显示每个CPU 的中断触发状态; J - 显示每个中断的详细触发状态。 l Lustrem 显示整个系统的内存使用情况; M 显示节点的内存使用情况。 n 显示整个系统的网络使用情况; N 显示各个网卡的网络使用情况。 s - Socketst - TCPx - Interconnecty - 系统中所有Slab(系统对象缓存)的使用统计; Y - 每个板使用的详细信息。 collectl --all 显示所有子系统的统计信息,包括cpu、终端、内存、磁盘、网络、TCP、socket、文件系统和NFS。
collectl --top 可以替代top命令:
collectl --vmstat 可以替代vmstat 命令:
collectl -c1 -sZ -i:1 可以替代ps 命令。
collectl可以与一些处理和分析数据的工具(如colmux、colgui、colplot)结合提供可视化图形。
14.2 colplot使用
colplot 是collectl 工具集的一部分,它在浏览器中以图形方式显示collectl 收集的数据。
colplot介绍(http://collectl-utils.sourceforge.net/colplot.html),相关源码可以从collectl-utils下载]:https://sourceforge.net/projects/collectl-utils/files/
解压下载的colplot 后, sudo ./INSTALL 安装colplot。
安装完成后,重启apache服务:
$suod systemctl reload apache2$ sudo systemctl restart apache2 在浏览器中输入http://127.0.0.1/colplot/即可使用colplot。
使用Change Dir选择并存储collectl -P保存的数据,然后设置Plot详细信息,显示哪些子系统、绘图大小等。
最后,生成绘图以查看结果。
参考文件:《Collectl: Linux 性能监控的全能冠军[8]》,
标签:
用户评论
用了那么多CPU监控工具,这篇推荐的14个真心不错,特别是那个SystemTap,功能强大,要好好研究一下。
有9位网友表示赞同!
这14个工具我之前就听说过,但是一直没机会用,这篇博文正好让我找到了方向。
有10位网友表示赞同!
这篇博文太及时了,最近服务器CPU负载高,正愁找不到好用的监控工具呢。
有17位网友表示赞同!
看了这个列表,发现有几个工具我之前用过,但是其他的都没听过,要赶紧去试试。
有18位网友表示赞同!
Linux下的CPU监控工具真的挺多的,这篇文章推荐的工具挺全的,感谢分享。
有17位网友表示赞同!
系统管理员必备啊,这14个工具我一定要收藏起来,以后用得着。
有20位网友表示赞同!
感觉这14个工具中,有些可能比较复杂,需要花时间学习才能用好。
有12位网友表示赞同!
这篇博文写得很好,但是我觉得应该把每个工具的优缺点都写一下,方便我们选择。
有15位网友表示赞同!
用了那么多监控工具,最后还是觉得top命令最实用,其他的工具有时候太花哨了。
有17位网友表示赞同!
这14个工具中,有几个是开源的,这对于开源爱好者来说是个好消息。
有19位网友表示赞同!
看了这篇博文,我对Linux的CPU监控有了更深的了解,感谢作者的用心分享。
有17位网友表示赞同!
这篇博文让我对CPU监控有了新的认识,原来Linux下还有这么多好用的工具。
有15位网友表示赞同!
这篇文章推荐的工具都很实用,但是我觉得对于新手来说,有些工具可能有点难上手。
有6位网友表示赞同!
这篇博文让我找到了一些以前没听说过的CPU监控工具,真的很涨知识。
有14位网友表示赞同!
这14个工具中,有几个我已经开始用了,感觉效果还不错,会持续关注这个列表。
有12位网友表示赞同!
感觉这个列表有点老了,现在的新工具可能更多更强大,希望作者能更新一下。
有5位网友表示赞同!
感谢作者整理了这个列表,对于经常要处理CPU问题的我来说,这是一份宝贵的资料。
有12位网友表示赞同!
这14个工具中,有几个我已经在项目中使用了,效果真的很好,推荐给大家。
有13位网友表示赞同!
看了这篇博文,我对Linux下的CPU监控有了全新的认识,感觉自己的技能又提升了一层。
有17位网友表示赞同!