zhcn 技术 手机 非公開: 如何在 Linux 上监控 CPU 和内存?

如何在 Linux 上监控 CPU 和内存?

了解单个进程或整个系统消耗多少 CPU 或内存。

系统管理员经常需要处理由于 CPU、内存或网络使用率过高而导致应用程序缓慢或无响应的事件。如果您的服务器仅托管一个进程,您可以轻松地发现该进程何时消耗您的所有资源。然而,想象一下一个共享服务器上运行着多个服务。我需要找出哪个服务消耗了所有资源。

有许多监控软件可以立即执行此操作。但是,如果您没有该解决方案或正在寻找基于命令的解决方案,请使用此处。所有这些都是免费的。

如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

多于

一个好的起点是查看tophtop结果以了解该过程的概述。

您将很好地了解所有进程正在利用什么,如下所示。看第一个,MySQL 使用了 11.9% 和 2.5% 的 CPU。

 top - 11:57:33 up 0 min,  1 user,  load average: 3.69, 0.96, 0.32
Tasks: 165 total,   2 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s): 21.0 us,  5.5 sy,  0.0 ni, 70.5 id,  1.7 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem :  7637308 total,  5802888 free,   849512 used,   984908 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6495648 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 1986 netdata   20   0 1738856 191560  22948 S  11.6  2.5   0:02.30 mysqld                                                                                                         
 3021 www-data  20   0  255288  78420  55484 S   6.6  1.0   0:01.55 php-fpm                                                                                                        
 3138 www-data  20   0  253096  79780  59228 S   6.6  1.0   0:00.92 php-fpm                                                                                                        
 3153 www-data  20   0  255116  79088  56472 S   5.0  1.0   0:00.70 php-fpm                                                                                                        
 3037 www-data  20   0  257200  81088  56216 S   4.3  1.1   0:01.50 php-fpm                                                                                                        
 3048 www-data  20   0  257088  78740  55380 S   4.3  1.0   0:01.46 php-fpm                                                                                                        
 3054 www-data  20   0  254160  72168  52108 S   3.7  0.9   0:01.32 php-fpm                                                                                                        
 3135 www-data  20   0  255084  75912  54836 S   3.7  1.0   0:00.91 php-fpm                                                                                                        
 3051 www-data  20   0  254096  73804  51964 S   3.0  1.0   0:01.38 php-fpm                                                                                                        
 2962 www-data  20   0   45280   7284   3488 R   2.0  0.1   0:00.22 openresty                                                                                                      
 1062 netdata   20   0  338748  76144   6720 S   1.0  1.0   0:01.31 netdata                                                                                                        
 1702 netdata   20   0   21852   4232   2352 S   1.0  0.1   0:00.34 apps.plugin                                                                                                    
 1729 netdata   20   0   18636   3280   2764 S   0.7  0.0   0:00.05 bash                                                                                                           
 1980 netdata   20   0   62008  12896   5796 S   0.7  0.2   0:00.14 redis-server                                                                                                   
   11 root      20   0       0      0      0 I   0.3  0.0   0:00.14 rcu_sched                                                                                                      
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:00.92 dockerd                                                                                                        
 1857 root      20   0   10600   5564   4276 S   0.3  0.1   0:00.03 containerd-shim                                                                                                
 2045 root      20   0    9948   6028   5016 S   0.3  0.1   0:00.14 forego                                                                                                         
 2934 root      20   0   13616   8760   5928 S   0.3  0.1   0:00.07 docker-gen                                                                                                     
 2966 systemd+  20   0   25784   7924   2340 S   0.3  0.1   0:00.06 nginx

几乎所有 Linux 发行版上都安装了top

一旦确定了嫌疑人,您可能需要关注整个过程,而不是上面看到的所有内容。您仍然可以使用带参数的top命令。

假设您知道进程 ID (PID)。您可以使用以下命令:

top -p $PID

下面是top -p 3102的示例。

 top - 11:59:56 up 3 min,  1 user,  load average: 0.72, 0.70, 0.31
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.1 us,  2.9 sy,  0.0 ni, 89.1 id,  0.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  7637308 total,  5802024 free,   783672 used,  1051612 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6555636 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 3102 www-data  20   0  329500  82376  60640 S   0.0  1.1   0:03.35 php-fpm

它也可以与grep top一起使用。以下是查看Docker使用状态的示例。

 root@-com:~# top | grep docker
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.38 dockerd                                                                                                        
 2934 root      20   0   14676   9652   5928 S   0.3  0.1   0:00.54 docker-gen                                                                                                     
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.39 dockerd                                                                                                        
 1007 root      20   0 1347424  74524  38872 S   1.0  1.0   0:01.42 dockerd                                                                                                        
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.55 docker-gen                                                                                                     
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.56 docker-gen 
如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

h 顶

与顶部类似,但包含更多信息。正如您所看到的,我们有一个命令列可以帮助我们识别进程路径。而且它的颜色也是丰富多彩的。

默认情况下可能未安装 htop,但您始终可以按如下方式安装它:

在 Ubuntu 上安装 htop

 apt-get install htop

在 CentOS/RHEL 8.x 上安装 htop

 dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf update
dnf install htop 
如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

一眼

顾名思义,它允许您在一个屏幕上查看系统使用情况。正在运行的进程按 CPU 使用率排序。

您可以使用 DNF 在 CentOS 8 上安装 Glance,如下所示。

 dnf install glances

对于 CentOS7,您可以使用 YUM

 yum install glances 
如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

在上面

它与上面列出的类似,但具有将输出记录到稍后可以查看的文件的良好功能。想象一下存在一种模式,其中问题在特定时间范围内发生。您可以使用 crontab 或类似工具安排将输出写入文件,然后稍后播放。

要将输出记录到文件中:

 atop -w filename

并玩:

 atop -r filename

强烈建议参考手册页,因为它支持多个参数,例如间隔、样本等。

如果您对实时故障排除感兴趣,只需运行atop ,您应该会看到如下内容:

也可以如下图安装在上面。

 dnf install atop

附注

我们来检查一下ps命令。

您可以使用带 PID 的 ps 命令来打印 CPU 和内存使用情况。

 ps -p $PID -o %cpu,%mem

输出应如下所示:

 root@sr-master-us:~# ps -p 1048 -o %cpu,%mem
%CPU %MEM
 0.2  3.0
root@sr-master-us:~#

嗯嗯

交互式命令行监控工具,可监控 CPU、内存、磁盘、网络、NFS 和虚拟内存使用情况。要查看最重要的进程(按使用情况),请运行nmon并按t按钮。

nmon 可以按如下方式安装。

 dnf install nmon

监视器

Monit是一个基于 Web 的命令行开源解决方案,用于监视服务器资源、守护程序、文件、目录、文件系统等。

Monit 还有一些很酷的小部件。

一款轻量级的监控软件。但这里还有更多值得探索的地方。

监控利克斯

用于监控 Linux 服务器的轻量级开源实用程序。 Monitorix具有内置 HTTP,因此您可以通过网络检查使用状态等。其他使用情况报告包括:

  • 核心/温度
  • 文件系统和 I/O
  • 网络流量
  • Apache/邮件/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix 还提供警报设置,以便您在出现问题时收到通知。如果您管理基于云的服务器并正在寻找主动监控解决方案,那么这是一个不错的选择。

网络数据

Netdata实时监控系统资源、应用程序、Web 服务器、数据库、DNS、电子邮件、硬件传感器等的性能。它是开源的,因此很容易上手。所有数据都经过收集、存储和流式传输,以实现交互式可视化。每秒都会收集数据,因此您不会错过任何内容。

深受众多行业领袖的喜爱。

所以,你还在等什么,尝试控制你的 Linux 服务器。

布托普

btop是一个完全交互式且有用的资源监视器,具有漂亮的 UI,可帮助您管理 Linux 服务器。

btop:Linux 资源监视器
btop:Linux 资源监视器

轻松地在树视图中可视化您的进程,并从进程列表中过滤它们以管理资源消耗。 btop 还包括显示网络使用情况的自动缩放图表。

此外,您还可以检查磁盘速度和完整的 I/O 活动。

在 Linux、FreeBSD 和 macOS 上还有更多体验可供体验。

结论

我们希望上述工具能够帮助您实时可视化服务器的使用情况,并允许您采取必要的操作。如果您刚刚开始担任系统管理员并需要一些实践培训,请查看此Udemy 课程

浅显易懂地讲解“如何在Linux上监控CPU和内存?”您必须观看的最佳 2 个视频

【監視オペレーター必見!】運用監視時代に使用していたLinuxコマンド10選
https://www.youtube.com/watch?v=TKx2NZKCCfE&pp=ygVVIExpbnV4IOOBpyBDUFUg44Go44Oh44Oi44 Oq44KS55uj6KaW44GZ44KL44Gr44Gv44Gp44GG44GZ44KM44Gw44KI44GE44Gn44GZ44GLPyZobD1KQQ%3D%3D
システムの保守と運用管理/リソース監視(Linux学習)
https://www.youtube.com/watch?v=zQO4Q3GaxOI&pp=ygVVIExpbnV4IOOBpyBDUFUg44Go44Oh44Oi44 Oq44KS55uj6KaW44GZ44KL44Gr44Gv44Gp44GG44GZ44KM44Gw44KI44GE44Gn44GZ44GLPyZobD1KQQ%3D%3D

了解单个进程或整个系统消耗多少 CPU 或内存。

系统管理员经常需要处理由于 CPU、内存或网络使用率过高而导致应用程序缓慢或无响应的事件。如果您的服务器仅托管一个进程,您可以轻松地发现该进程何时消耗您的所有资源。然而,想象一下一个共享服务器上运行着多个服务。我需要找出哪个服务消耗了所有资源。

有许多监控软件可以立即执行此操作。但是,如果您没有该解决方案或正在寻找基于命令的解决方案,请使用此处。所有这些都是免费的。

如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

多于

一个好的起点是查看tophtop结果以了解该过程的概述。

您将很好地了解所有进程正在利用什么,如下所示。看第一个,MySQL 使用了 11.9% 和 2.5% 的 CPU。

 top - 11:57:33 up 0 min,  1 user,  load average: 3.69, 0.96, 0.32
Tasks: 165 total,   2 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s): 21.0 us,  5.5 sy,  0.0 ni, 70.5 id,  1.7 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem :  7637308 total,  5802888 free,   849512 used,   984908 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6495648 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 1986 netdata   20   0 1738856 191560  22948 S  11.6  2.5   0:02.30 mysqld                                                                                                         
 3021 www-data  20   0  255288  78420  55484 S   6.6  1.0   0:01.55 php-fpm                                                                                                        
 3138 www-data  20   0  253096  79780  59228 S   6.6  1.0   0:00.92 php-fpm                                                                                                        
 3153 www-data  20   0  255116  79088  56472 S   5.0  1.0   0:00.70 php-fpm                                                                                                        
 3037 www-data  20   0  257200  81088  56216 S   4.3  1.1   0:01.50 php-fpm                                                                                                        
 3048 www-data  20   0  257088  78740  55380 S   4.3  1.0   0:01.46 php-fpm                                                                                                        
 3054 www-data  20   0  254160  72168  52108 S   3.7  0.9   0:01.32 php-fpm                                                                                                        
 3135 www-data  20   0  255084  75912  54836 S   3.7  1.0   0:00.91 php-fpm                                                                                                        
 3051 www-data  20   0  254096  73804  51964 S   3.0  1.0   0:01.38 php-fpm                                                                                                        
 2962 www-data  20   0   45280   7284   3488 R   2.0  0.1   0:00.22 openresty                                                                                                      
 1062 netdata   20   0  338748  76144   6720 S   1.0  1.0   0:01.31 netdata                                                                                                        
 1702 netdata   20   0   21852   4232   2352 S   1.0  0.1   0:00.34 apps.plugin                                                                                                    
 1729 netdata   20   0   18636   3280   2764 S   0.7  0.0   0:00.05 bash                                                                                                           
 1980 netdata   20   0   62008  12896   5796 S   0.7  0.2   0:00.14 redis-server                                                                                                   
   11 root      20   0       0      0      0 I   0.3  0.0   0:00.14 rcu_sched                                                                                                      
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:00.92 dockerd                                                                                                        
 1857 root      20   0   10600   5564   4276 S   0.3  0.1   0:00.03 containerd-shim                                                                                                
 2045 root      20   0    9948   6028   5016 S   0.3  0.1   0:00.14 forego                                                                                                         
 2934 root      20   0   13616   8760   5928 S   0.3  0.1   0:00.07 docker-gen                                                                                                     
 2966 systemd+  20   0   25784   7924   2340 S   0.3  0.1   0:00.06 nginx

几乎所有 Linux 发行版上都安装了top

一旦确定了嫌疑人,您可能需要关注整个过程,而不是上面看到的所有内容。您仍然可以使用带参数的top命令。

假设您知道进程 ID (PID)。您可以使用以下命令:

top -p $PID

下面是top -p 3102的示例。

 top - 11:59:56 up 3 min,  1 user,  load average: 0.72, 0.70, 0.31
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.1 us,  2.9 sy,  0.0 ni, 89.1 id,  0.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  7637308 total,  5802024 free,   783672 used,  1051612 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6555636 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 3102 www-data  20   0  329500  82376  60640 S   0.0  1.1   0:03.35 php-fpm

它也可以与grep top一起使用。以下是查看Docker使用状态的示例。

 root@-com:~# top | grep docker
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.38 dockerd                                                                                                        
 2934 root      20   0   14676   9652   5928 S   0.3  0.1   0:00.54 docker-gen                                                                                                     
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.39 dockerd                                                                                                        
 1007 root      20   0 1347424  74524  38872 S   1.0  1.0   0:01.42 dockerd                                                                                                        
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.55 docker-gen                                                                                                     
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.56 docker-gen 
如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

h 顶

与顶部类似,但包含更多信息。正如您所看到的,我们有一个命令列可以帮助我们识别进程路径。而且它的颜色也是丰富多彩的。

默认情况下可能未安装 htop,但您始终可以按如下方式安装它:

在 Ubuntu 上安装 htop

 apt-get install htop

在 CentOS/RHEL 8.x 上安装 htop

 dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf update
dnf install htop 
如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

一眼

顾名思义,它允许您在一个屏幕上查看系统使用情况。正在运行的进程按 CPU 使用率排序。

您可以使用 DNF 在 CentOS 8 上安装 Glance,如下所示。

 dnf install glances

对于 CentOS7,您可以使用 YUM

 yum install glances 
如何在 Linux 上监控 CPU 和内存?
如何在 Linux 上监控 CPU 和内存?

在上面

它与上面列出的类似,但具有将输出记录到稍后可以查看的文件的良好功能。想象一下存在一种模式,其中问题在特定时间范围内发生。您可以使用 crontab 或类似工具安排将输出写入文件,然后稍后播放。

要将输出记录到文件中:

 atop -w filename

并玩:

 atop -r filename

强烈建议参考手册页,因为它支持多个参数,例如间隔、样本等。

如果您对实时故障排除感兴趣,只需运行atop ,您应该会看到如下内容:

也可以如下图安装在上面。

 dnf install atop

附注

我们来检查一下ps命令。

您可以使用带 PID 的 ps 命令来打印 CPU 和内存使用情况。

 ps -p $PID -o %cpu,%mem

输出应如下所示:

 root@sr-master-us:~# ps -p 1048 -o %cpu,%mem
%CPU %MEM
 0.2  3.0
root@sr-master-us:~#

嗯嗯

交互式命令行监控工具,可监控 CPU、内存、磁盘、网络、NFS 和虚拟内存使用情况。要查看最重要的进程(按使用情况),请运行nmon并按t按钮。

nmon 可以按如下方式安装。

 dnf install nmon

监视器

Monit是一个基于 Web 的命令行开源解决方案,用于监视服务器资源、守护程序、文件、目录、文件系统等。

Monit 还有一些很酷的小部件。

一款轻量级的监控软件。但这里还有更多值得探索的地方。

监控利克斯

用于监控 Linux 服务器的轻量级开源实用程序。 Monitorix具有内置 HTTP,因此您可以通过网络检查使用状态等。其他使用情况报告包括:

  • 核心/温度
  • 文件系统和 I/O
  • 网络流量
  • Apache/邮件/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix 还提供警报设置,以便您在出现问题时收到通知。如果您管理基于云的服务器并正在寻找主动监控解决方案,那么这是一个不错的选择。

网络数据

Netdata实时监控系统资源、应用程序、Web 服务器、数据库、DNS、电子邮件、硬件传感器等的性能。它是开源的,因此很容易上手。所有数据都经过收集、存储和流式传输,以实现交互式可视化。每秒都会收集数据,因此您不会错过任何内容。

深受众多行业领袖的喜爱。

所以,你还在等什么,尝试控制你的 Linux 服务器。

布托普

btop是一个完全交互式且有用的资源监视器,具有漂亮的 UI,可帮助您管理 Linux 服务器。

btop:Linux 资源监视器
btop:Linux 资源监视器

轻松地在树视图中可视化您的进程,并从进程列表中过滤它们以管理资源消耗。 btop 还包括显示网络使用情况的自动缩放图表。

此外,您还可以检查磁盘速度和完整的 I/O 活动。

在 Linux、FreeBSD 和 macOS 上还有更多体验可供体验。

结论

我们希望上述工具能够帮助您实时可视化服务器的使用情况,并允许您采取必要的操作。如果您刚刚开始担任系统管理员并需要一些实践培训,请查看此Udemy 课程

浅显易懂地讲解“如何在Linux上监控CPU和内存?”您必须观看的最佳 2 个视频

【監視オペレーター必見!】運用監視時代に使用していたLinuxコマンド10選
https://www.youtube.com/watch?v=TKx2NZKCCfE&pp=ygVVIExpbnV4IOOBpyBDUFUg44Go44Oh44Oi44 Oq44KS55uj6KaW44GZ44KL44Gr44Gv44Gp44GG44GZ44KM44Gw44KI44GE44Gn44GZ44GLPyZobD1KQQ%3D%3D
システムの保守と運用管理/リソース監視(Linux学習)
https://www.youtube.com/watch?v=zQO4Q3GaxOI&pp=ygVVIExpbnV4IOOBpyBDUFUg44Go44Oh44Oi44 Oq44KS55uj6KaW44GZ44KL44Gr44Gv44Gp44GG44GZ44KM44Gw44KI44GE44Gn44GZ44GLPyZobD1KQQ%3D%3D