如何查找正在占用机器的过程


10

场景:突然,我的电脑呆滞了。鼠标移动但窗口需要打开才能打开,需要等一些时间。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

我不想要一个可以提供一些可以分析的数字的工具,而是想要一个可以准确告诉我哪个进程导致当前负载的工具。假设键盘前的用户几乎不知道如何编写“过程”,但是当涉及到“驻留大小”,“虚拟内存”或“过程生命周期”时,用户很快就会不知所措。

我的论点是这样的:用户注意到一个问题。可能有成千上万的原因……好吧,几乎是:-)用户想知道问题的根源。

当前的解决方案给了我很多数字,我需要知道这些数字的含义。我正在寻找的是一个元工具。99%的数据与该问题无关。因此,该工具应该做的是寻找占用大量资源的进程,并仅列出那些进程,以及“该进程需要大量CPU,这会产生许多IRQ,该进程会分配大量RAM(并且还在不断增长)”。

这将是一个相对简短的列表。对于刚接触此问题的人来说,从此列表中找到罪魁祸首要比从其输出中找到罪魁祸首要简单得多,htop这给了我大约5000个数字,但需要我自己折叠多线程进程(我有50行,VIRT 2750M但是只有16 GB的RAM-机器应该自动将其交换掉,但是当然,这是对可能很快发生的数据的误解。


我不明白为什么。您描述的症状不是磁盘垃圾的症状(不会影响鼠标)。呆滞的鼠标是满载的经典CPU。
soandos

1
这只是一个例子。请带一点盐。想象有一个菜鸟坐在电脑前,谁也不知道。他如何最容易地发现正在发生的事情(即,不用花费半个小时的时间来搜索输出的top意思)
Aaron Digulla 2011年

您是否正在寻找具有gui和其他功能的Linux任务管理器等效物?
soandos 2011年

我正在寻找运行的东西,并说“进程X占用了机器”。
亚伦·迪古拉

Answers:


3

我确实要对这些响应微笑,因为每个响应都告诉您运行工具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上搜索它。


谢谢; 这并不是我一直在寻找的东西,但是至少这是一个很好的起点。
亚伦·迪古拉

很棒的工具!在Ubuntu(至少自12.04起)上,您只需要安装软件包-它会在安装时自动启动守护程序,并在其后重新启动:)
nealmcb 2013年

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

现在,如果由于使用了所有CPU导致系统运行缓慢,则在“ Cpu(s):”行上的“ us”和“ sy”列将显示接近100%。

如果由于交换而变慢,则“ Mem:”“ free”显示非常低的值,而“ Swap:”“ used”显示较高的值。

如果通常由于I / O而变慢,则“ Cpu(s):”“ wa”表示花费在I / O等待上的时间。

现在,如果您知道I / O等待是问题所在,则可以使用程序“ iotop”来了解哪个进程创建最多的I / O。


+1,但我更多地是在寻找一种工具来为我做此分析,并打印出过程以及一些错误信息。我不想从“原始”数字中收集到这一点。有什么事吗
亚伦·迪古拉

1
抱歉,如果您不从根本上了解不同类型的慢速之间的区别,就无法解决机器慢速之类的问题。如果存在这样的工具,我将一无所知。最有可能您需要一个有能力的计算机管理员/服务人员。
Zds 2011年

如果存在这样的工具,那就太好了,因为肯定可以自动确定它:如果我可以从的输出中得知top,那么计算机也可以。这不是蒙娜丽莎(Mona Lisa)的笑容,它只是在计算一些数字以查找“坏的”数字。
亚伦·迪古拉

2

基于400%的使用率,我假设您有一个四核处理器。您的平均负载几乎是容量的两倍,一半的进程正在等待CPU。

首先,renice将您的shell设置为0或-10,以获得一个响应更快的系统,然后使用它htop来查找有问题的进程,并strace在给定进程中继续进行处理。其他可能有用的工具是:

  • vmsat
  • sar
  • iostat
  • pmap

1

呆滞的鼠标也可能是由于中断负载太高,或者USB控制器非常忙(我认为这是USB鼠标)。


有什么工具可以告诉我哪个驱动程序/组件导致较高的IRQ负载?
亚伦·迪古拉

1

vmstat可以总体上为您提供帮助。一个使用示例是:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

您也可以每X秒运行一次-只需在命令后添加数字X。

编辑:鉴于评论...将以下内容写入文件并使该文件可执行。它会告诉您机器上的前3个进程。

top -n 1 | tail -16 | head -4 | awk '{print $13}'

如果您想知道是哪个内存占用的内存而不是CPU,请阅读首页手册并更改显示顺序。


我正在寻找更高层次的东西。它应该运行vmstat并为我分析数字,因此我不必知道“ cs”的含义以及大的“ cs”是“好”还是“坏”。
亚伦·迪古拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.