Aar*_*lla 10 linux performance-monitor resource-usage
场景:突然间,我的电脑感觉很慢。鼠标移动,但窗户需要很长时间才能打开,等等uptime
说负载是 7.69 并且正在升高。
找出导致负载的原因的最快方法是什么?
现在,“top”和类似工具不是答案,因为它们要么显示 CPU 或内存使用情况,但不能同时显示两者。我需要的是我可能能够在它发生时输入的单个命令 - 可以找出任何一个的东西
系统正在尝试将 8GB 的 RAM 交换到磁盘,因为进程 X ...
或者
进程 X 在整个磁盘上查找
或者
进程 X 使用 400% CPU"
所以我正在寻找的是 iostat、htop/atop 和类似的工具,它们的输出是这样的:
1235 cp - Disk trashing
87 chrome - Uses 2 GB of RAM
137 nfs_bench - Uses 95% of the network bandwidth
Run Code Online (Sandbox Code Playgroud)
我不想要一个能给我一些我可以分析的数字的工具,而是一个能准确告诉我哪个进程导致当前负载的工具。假设键盘前的用户几乎不知道如何写“进程”,但是当涉及到“驻留大小”、“虚拟内存”或“进程生命周期”时,用户很快就不知所措。
我的论点是这样的:用户注意到了一个问题。可能有数以千计的原因......好吧,几乎 :-) 用户想知道问题的根源。
当前的解决方案给了我很多数字,我需要知道这些数字的含义。我正在寻找的是一个元工具。99% 的数据与问题无关。因此,该工具应该做的是查找占用一些资源的进程,并仅列出那些带有“此进程需要大量 CPU,这会产生许多 IRQ,此进程分配大量 RAM(并且仍在增长)”的进程。
这将是一个相对较短的列表。对于新手来说,从这个列表中找到罪魁祸首要简单得多,比如说,htop
它给了我大约 5000 个数字,但需要我自己折叠多线程进程(我有 50 行,VIRT 2750M
但是只有 16 GB 的 RAM - 机器应该将自己交换到死,但当然,这是对可能很快发生的数据的误解)。
只要您查看正确的数字,“top” 的效果就相当不错。让我们来看看:
top - 13:11:45 up 13 days, 1:13, 21 users, load average: 0.06, 0.11, 0.26
Tasks: 271 total, 2 running, 267 sleeping, 0 stopped, 2 zombie
Cpu(s): 19.0%us, 6.3%sy, 0.0%ni, 74.0%id, 0.5%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 8183668k total, 8002712k used, 180956k free, 12476k buffers
Swap: 11847900k total, 723480k used, 11124420k free, 767016k cached
Run Code Online (Sandbox Code Playgroud)
现在,如果系统因为 CPU 全部被占用而变慢,它会显示为“Cpu(s):”行上的“us”和“sy”列一起接近 100%。
如果由于交换而变慢,“Mem:”“free”显示非常低的值,而“Swap:”“used”显示高值。
如果通常由于I/O而变慢,则 "Cpu(s):" "wa" 表示时间花费在 I/O 等待上。
现在,如果您知道 I/O 等待是问题所在,您可以使用程序“iotop”来了解哪些进程创建了最多的 I/O。
小智 4
我确实不得不对这些回答微笑,因为每个人都告诉你运行工具 X。唯一的问题是,如果你看到的是间歇性的,那么就没有办法关联任何东西。如果您以足够高的频率运行sar这样的工具,它会有所帮助,但我认为Collectl甚至更好。
与sar一样,您可以通过安装 RPM 并执行以下操作将其作为守护程序运行/etc/init.d/collectl start
。
现在,当您看到某些缓慢的东西时,collectl -p /var/log/collectl/filename --top
将回放数据并向您显示最重要的进程。您也可以直接运行collectl --top
并实时查看它们。顺便说一句 - 任何你可以实时做的事情都可以回放。
至于 CPU 负载,如果中断超载怎么办? collectl -sC
不仅会显示各个 CPU 上的负载(或用于-sc
平均负载),还会显示它们如何花费时间。包含-j
( -scj
),您将看到每个 CPU 的中断数。使用大写字母-J
,您将看到每个中断/CPU 的类型。
当然,如果你真的喜欢vmstat,你可以随时回放collectl数据--vmstat
,它会以vmstat格式显示历史数据。
开关的数量远远多于我有时间列出的,但你可以在SourceForge上查看或者直接用 google 搜索一下。