如何在Linux上监控CPU和内存?
了解每个单独的进程或整个系统消耗的CPU或内存量。
作为系统管理员,你经常需要处理应用程序由于高CPU/内存/网络利用率而变慢或无响应的情况。如果服务器只托管一个进程,那么很容易找出该进程消耗所有资源的情况。然而,想象一下一个共享服务器,在其中运行了多个服务,你需要找出哪个服务占用了所有资源。
有很多 monitoring software 可以直接完成这个任务。但如果你没有这样的工具,或者正在寻找基于命令的解决方案,那么请看这里。它们全部都是免费的!
top
你可以从查看 top
或 htop
的结果开始,以了解进程的概览。
如下所示,它能很好地说明哪些进程在使用资源。如果你看第一个进程,即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上,还有更多功能可供体验。
结论
我希望上述工具能帮助您实时可视化服务器利用率,以便您可以采取必要的措施。如果您刚开始担任系统管理员,并希望进行实践培训,请查看此链接。