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

了解每个单独的进程或整个系统消耗的CPU或内存量。

作为系统管理员,你经常需要处理应用程序由于高CPU/内存/网络利用率而变慢或无响应的情况。如果服务器只托管一个进程,那么很容易找出该进程消耗所有资源的情况。然而,想象一下一个共享服务器,在其中运行了多个服务,你需要找出哪个服务占用了所有资源。

有很多 monitoring software 可以直接完成这个任务。但如果你没有这样的工具,或者正在寻找基于命令的解决方案,那么请看这里。它们全部都是免费的!

top

你可以从查看 tophtop 的结果开始,以了解进程的概览。

如下所示,它能很好地说明哪些进程在使用资源。如果你看第一个进程,即MySQL,它占用了11.9%的CPU和2.5%的内存。

顶部 – 11:57:33 运行时间 0 分钟,1 个用户,平均负载:3.69,0.96,0.32
任务:共165个,其中2个正在运行,113个睡眠,0个停止,0个僵尸
处理器占用率:21.0%用户使用,5.5%系统使用,0.0%优先级较低,70.5%空闲,1.7%等待IO,0.0%硬中断,1.3%软中断,0.0%虚拟化
内存使用情况:总共7637308 KB,空闲5802888 KB,已使用849512 KB,缓存984908 KB
交换空间:总共0 KB,空闲0 KB,已使用0 KB,可用内存6495648 KB

PID 用户 PR NI 虚拟内存 使用内存 共享内存 状态 %CPU %内存 时间+ 命令
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 启动 3 分钟,1 个用户,平均负载:0.72,0.70,0.31
任务:1 总计,0 正在运行,1 个睡眠,0 个停止,0 个僵尸
%Cpu(s):  7.1 用户,2.9 系统,0.0 低优先级,89.1 空闲,0.3 等待,0.0 高优先级,0.7 系统中断,0.0 虚拟化
KiB 内存:7637308 总计,5802024 空闲,783672 使用,1051612 缓冲/缓存
KiB 交换:0 总计,0 空闲,0 使用,6555636 可用内存

  PID 用户      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

您还可以在top中使用grep。下面是检查utilization的示例:

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

htop

类似于top,但提供更多信息。如您所见,它有一个命令列,方便识别进程路径。而且它还有彩色界面。

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

glances

顾名思义,您可以在一个屏幕上查看系统利用率。正在运行的进程按其CPU利用率进行排序。

您可以使用以下命令使用DNF进行安装。

dnf install glances

对于CentOS7,您可以使用YUM进行安装

yum install glances

atop

与上面列出的类似,但具有一个出色的功能,可以将输出记录到文件中,以便以后查看。想象一下,在特定时间窗口内出现问题的模式。您可以安排将输出写入文件,通过或其他方式,并在以后进行回放。

要将输出记录到文件中:

atop -w filename

要进行回放:

atop -r filename

它支持多个参数,如间隔、样本等,强烈建议查看man页面。

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

您可以使用以下命令安装atop。

dnf install atop

ps

让我们现在检查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:~#

nmon

交互式命令行监控工具,用于监视CPU、内存、磁盘、网络、NFS和虚拟内存利用率。要查看最高利用率的进程,您可以执行nmon并按下t按钮。

您可以按以下方式安装nmon。

dnf install nmon

Monit

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

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

它是一款轻量级的监控软件。但是,explore here还有更多功能。

Monitorix

一款轻量级的开源实用程序,用于监视Linux服务器。它内置了HTTP,因此您可以在Web上检查利用率和其他内容。其他用法报告包括:

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

Monitorix还提供了警报配置,因此在出现问题时可以通知您。当您管理cloud-based servers并寻找积极的监控解决方案时,它将是一个不错的选择。

Netdata

Netdata是一个实时的性能监控工具,可以监控系统资源、应用程序、Web服务器、数据库、DNS、邮件、硬件传感器等等。它是开源的,入门很容易。所有数据都会被收集、存储和流式传输,供您进行交互式可视化。数据每秒钟收集一次,因此您永远不会错过任何信息。

受到许多行业领导者的喜爱。

所以您还在等什么,尝试并掌控您的Linux服务器。

btop

btop是一个方便的资源监视器,具有漂亮的用户界面,可帮助您管理Linux服务器。

您可以轻松地以树形视图可视化进程,从进程列表中进行过滤,并管理资源占用过高的进程。btop还配备了一个自动缩放的图表,显示网络使用情况。

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

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

结论

我希望上述工具能帮助您实时可视化服务器利用率,以便您可以采取必要的措施。如果您刚开始担任系统管理员,并希望进行实践培训,请查看此链接。

类似文章