【Linux】监控进程的资源使用情况

570 阅读5分钟

iconmonstr-github-1.svg

介绍

在本教程中,我们将介绍一些终端命令和第三方插件,以帮助我们找到每个进程的资源使用情况。

Linux内置命令

top命令

通常,我们可以使用Linux内置的top命令。此命令在命令提示符中显示正在运行的系统的实时视图, 如果我们想了解单个进程,我们可以使用-p参数。

使用-p参数时,我们经常希望包含进程ID。我们可以使用ps命令找到命名进程的进程ID。找到进程ID后,我们可以通过以下方式将该数字输入到top命令中:

top -p 2225

以下是Chrome的进程信息(Chrome不止一个进程,这里随便挑选了一个)

Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.8 us,  2.3 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7859.9 total,    878.7 free,   2598.0 used,   4383.2 buff/cache
MiB Swap:   2048.0 total,    569.5 free,   1478.5 used.   2577.1 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND  
 126635 song      20   0   32.6g 175324  83832 S   1.3   2.2   8:11.50 chrome 

Shell将每隔几秒钟刷新一次此屏幕,为我们提供进程状态的更新视图。但是,显示不是很人性化。我们可能需要使用一些第三方插件来提供更好的观感。

pidstat命令

Linux提供了另一个名为pidstat的命令来检查正在使用的资源的百分比。但是,它仅在我们运行此命令时为我们提供了当前资源使用情况的快照,而不是像top命令所期望的那样提供实时视图。另一方面,这使得这个命令成为一个轻量级的进程。

该命令是sysstat包的一部分,它不是vanilla Linux,但我们仍然可以在手册页上找到该命令的文档。我们应该首先使用这个命令安装这个包:

sudo apt install sysstat

安装此软件包后,我们可以使用包含的pidstat命令。如果我们不知道要查找的进程ID,我们需要首先使用ps命令查找该编号。下面是如何使用pidstat命令:

pidstat --human -p 29924

我查看了Docker Desktop进程,以下是详细信息

Linux 5.15.0-43-generic (ubuntu20-04) 	2022年08月16日 	_x86_64_	(8 CPU)

224539秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
2245391000     29924    0.0%    0.0%    0.0%    0.0%    0.0%     5  Docker Desktop

–human参数将以“.%”样式显示百分比数字。如果没有这个参数,它将只显示数字。

Linux为我们提供了一些方便的命令来获取特定任务的系统资源使用情况。但是,它们只能在命令提示符下显示数字。如果我们想以人类可读的形式看到资源使用的逐渐变化,我们需要依靠一些第三方插件来绘制图表。

第三方插件

以下附加插件需要在Linux机器上安装Pythonpip。一旦我们在我们的机器上安装了这些,我们就可以使用pip来安装这些包并监控特定进程的资源使用情况。

psrecord

psrecord通过psutil库记录CPU和内存使用情况。在我们的Linux系统上使用起来很简单。

我们可以在命令提示符下输入这个命令来安装这个插件:

pip install psrecord

在我们成功安装psrecord之后。 我们需要先通过内置的ps命令找到进程ID。

找到我们感兴趣的进程ID后,我们调用psrecord来记录这个进程的资源使用情况,并将数据绘制成图像文件:

psrecord 126635 --interval 1 --duration 10 --plot 126635.png

在这里,我们指定psrecord来监视进程10秒的持续时间,并每1秒记录一次。

如果系统正确处理该命令,当前目录中会出现一个名为“126635.png”的图像:

126635.png

memory_profiler

如果我们不知道进程 ID,我们将如何监控资源使用情况呢?我们可以使用另一个名为memory_profiler的Python程序来监控内存使用情况。此程序仅检查内存使用情况。

我们可以使用pip来安装这个包:

pip install memory_profiler

安装包后,我们可以使用此命令来监视使用可执行文件目录的进程。这里我们仅以bash为例:

mprof run bash

运行此命令后,memory_profiler将在当前目录中生成一个.dat文件。我们不需要为memory_profiler指定文件,因为它会自行搜索可用文件。我们现在需要做的就是告诉memory_profiler为我们绘制图表。

因此,这一步我们需要做的就是在命令提示符下键入以下命令:

mprof plot

Figure_1.png memory_profiler不支持CPU性能监控。因此,如果我们要检查CPU使用率,我们需要使用其他工具。

通过Python,我们可以很容易地找到一种更好的方法来衡量一个进程的资源使用情况。

结论

在Linux系统中查看和访问系统资源使用情况有多种方式。它们可以分为两种不同的方法:

  • 直接使用现有系统模块的集成命令
  • 额外功能的第三方插件,例如图表

如果我们想通过最少的安装来保持系统清洁,建议使用集成命令。否则,这些第三方插件是更好的选择,因为它们为我们提供了更好的体验。