如何找到占用机器的进程

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 - 机器应该将自己交换到死,但当然,这是对可能很快发生的数据的误解)。

Zds*_*Zds 6

只要您查看正确的数字,“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 搜索一下。