深入了解单个进程或整个系统的 CPU 和内存使用情况。
作为系统管理员,您经常需要解决因 CPU/内存/网络使用率过高而导致应用程序运行缓慢或无响应的问题。 如果服务器仅托管一个进程,则很容易确定哪个进程消耗了所有资源。 然而,在一个共享服务器上,多个服务同时运行,您需要找出哪个服务正在消耗大量资源。
市面上有很多现成的监控软件。但是,如果您手头没有这些软件,或者正在寻找基于命令行的解决方案,那么您就来对地方了。这些工具都是免费的!
首选工具
您可能首先需要查看 `top` 或 `htop` 命令的结果,以获得进程的总体概览。
正如您在下面看到的,这些命令可以很好地展示所有进程的资源使用情况。例如,第一行显示 MySQL 占用了 11.9% 的 CPU 和 2.5% 的内存。
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` 命令结合使用。下面是一个使用 `grep` 检查 Docker 利用率的示例。
[email protected]:~# 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
`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
顾名思义,`glances` 可以让您在单个屏幕上查看系统资源利用率。 正在运行的进程会按照 CPU 使用率进行排序。
您可以使用 DNF 在 CentOS 8 上安装 `Glances`,如下所示。
dnf install glances
对于 CentOS 7,您可以使用 YUM。
yum install glances
atop
`atop` 命令类似于上面列出的命令,但它有一个强大的功能,可以将输出记录到文件中,以便您日后查看。 想象一下,在特定时间窗口内出现问题的情况。 您可以通过 `crontab` 或其他计划任务将输出写入文件,稍后您可以回放这些文件。
要将输出记录到文件中:
atop -w filename
要播放:
atop -r filename
`atop` 支持多个参数,例如时间间隔、采样等等。我强烈建议您查看手册页以获取更多信息。
如果您只是想进行实时故障排除,那么只需运行 `atop` 命令,您应该会看到如下所示的界面。
您可以通过以下方式安装 `atop` 命令:
dnf install atop
ps
现在,让我们来看看 `ps` 命令。
您可以使用带有 PID 的 `ps` 命令来输出它们的 CPU 和内存使用率。
ps -p $PID -o %cpu,%mem
输出应如下所示。
[email protected]:~# ps -p 1048 -o %cpu,%mem %CPU %MEM 0.2 3.0 [email protected]:~#
nmon
`nmon` 是一个交互式命令行监控工具,用于查看 CPU、内存、磁盘、网络、NFS 和虚拟内存的使用情况。要查看占用资源最多的进程(按利用率),您可以执行 `nmon` 命令并按下 `t` 键。
您可以按如下方式安装 `nmon` 命令。
dnf install nmon
Monit
Monit 是一个基于 Web 和命令行的开源解决方案,用于监控服务器资源、守护进程、文件、目录和文件系统等等。
Monit 还有一个非常酷的小部件。
它是一个轻量级的监控软件。但是,它还有许多值得探索的功能。
Monitorix
一个用于监控 Linux 服务器的轻量级开源实用程序。 Monitorix 具有内置的 HTTP,因此您可以通过 Web 检查资源使用情况和其他信息。 其他一些监控报告包括:
- 内核/温度
- 文件系统和 I/O
- 网络流量
- Apache/邮件/FTP/Nginx
- MySQL/Varnish/Memcached
Monitorix 还提供警报配置,因此您可以在出现问题时收到通知。当您管理云服务器并寻找主动监控解决方案时,这是一个不错的选择。
Netdata
Netdata 是一个用于实时监控系统资源、应用程序、Web 服务器、数据库、DNS、邮件、硬件传感器等等的工具。它是开源的,并且很容易上手。 它收集、存储和流式传输所有数据,以便您以交互方式进行可视化。 Netdata 每秒都会收集数据,因此您不会错过任何信息。
深受许多行业领导者的喜爱。
所以,还等什么呢?快来试试这些工具,掌控您的 Linux 服务器吧!
btop
btop 是一个方便的资源监视器,具有美观的交互式界面,可以帮助您管理 Linux 服务器。
您可以轻松地在树状视图中查看进程、从进程列表中过滤,以及管理资源占用。 `btop` 还配备了自动缩放图表,可以显示网络使用情况。
此外,您还可以检查磁盘速度和 I/O 活动。
您可以在 Linux、FreeBSD 和 macOS 上体验 `btop` 的更多功能。
结论
我希望上述工具可以帮助您实时可视化服务器利用率,以便您可以采取必要的措施。 如果您刚刚开始担任系统管理员,并且希望获得实践培训,请查看这个 Udemy 课程。