如何使用 top(或同等工具)来确定某个进程是否行为异常?

如何使用 top(或同等工具)来确定某个进程是否行为异常?

是否有指标可以显示某个流程何时“走向黑暗面”?

我觉得仅使用 MEM% 和 CPU% 不足以检测诸如内存泄漏(或其他问题,请原谅我的词汇量有限)之类的问题,因为如果对程序没有足够的了解,很难知道该程序“应该”使用多少内存或 CPU。

那么我怎样才能找出真正糟糕的流程和仅仅是昂贵的流程呢?

答案1

我认为很难确切地知道一个程序“应该”使用多少资源,但有一些指标可以检查你的系统是否有足够的资源来处理该程序。

首先,我们通过以下方式检查进程的 PID(例如进程名称为 dataserver):

ps aux | grep dataserver
sybxxx     795 52.9  0.0 1190088 22548 ?       S<sl Jun06 38192:51 /sybase/XXX/ASE-16_0/bin/dataserver

这里我们知道进程 ID 是 795,所以我们利用PID统计命令:

pidstat -h -r -u -p 795 5
Time       PID   %usr    %system  %guest  %CPU   CPU  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
1469520679  795  242.80    5.00    0.00  247.80  24    0.00      0.00     53618888  22548   0.02  dataserver

从输出中,我们知道该进程使用了​​大约 2.4 个 CPU 核心,而系统安装了 24 个核心。此外,所用内存的百分比约为安装内存总量的 0.02%。

除了这些信息之外,我认为进行一次常规系统检查以防止资源短缺就足够了。

首先,检查CPU 负载,您可以使用特区命令。要确定系统的性能是否不佳,您可以检查以下输出。

正常情况下iostat的输出类似如下:

sar
12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:10:01 AM     all      0.70      0.00      0.15      0.01      0.00     99.13

对于非繁忙系统,%idle 的值应该保持较高,而 %user、%system 和 %iowait 的值应该较低。

为了磁盘输入/输出问题,你可以检查结果iostat -x

Device: rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda     0.07     1.58    0.27    1.04    13.72    20.87    26.54     0.01    7.50   3.33   0.43
sdc     4.09   252.47  483.10    5.90 18616.61  2148.57    42.46     5.88   12.03   1.99  97.29

这是一个糟糕的例子,正如您所看到的,设备 sdc 的利用率百分比已变成 97.29%,这表明存在磁盘 I/O 问题。

要检查系统是否有足够的内存,请查看分页使用情况:

sar -B
10:30:01 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
10:40:01 AM   8524.25     47.12    856.03      0.00    263.76      0.00      0.00      0.00      0.00
10:50:01 AM   8391.64     82.94   1116.50      0.08    377.87      0.00      0.00      0.00      0.00

我们可以看到,该服务器每秒的页面调入量非常高,因此我们怀疑系统内存不足。

答案2

我通常首先查看负载。如果 3 个数字中有 2 个高于 3,则说明您走错了方向。如果 3 个数字中的任何一个负载超过 8,则说明存在严重问题,这意味着您正在运行一个进程的多个分支,或者您的机器无法处理您要执行的操作。示例:运行一个 Torque 批处理服务器,其中有大量作业,但核心太少。

然后如果您的某个进程使用了​​越来越多的 CPU,这也表明存在内存泄漏问题,或者也可能是您正在使用名为 Chrome/Firefox 的组件 :) 实际上,Firefox 因使用附加插件(如 Skype)而遭受严重损失,这导致旧版本出现溢出。

另一个指标是存在大量相同类型的跨进程,但并不总是个问题。

问题的早期指标之一是标记为 [defunct] 的进程,因为它当时已经失去功能,就像我认识的大多数人一样!

相关内容