如何使用Top、Netstat、Du等工具监控服务器资源
介绍
每个计算机系统都受益于适当的管理和监控。 密切关注系统的运行情况将帮助您发现问题并快速解决问题。
为此目的创建了许多命令行实用程序。 本指南将向您介绍工具箱中一些最有用的应用程序。
先决条件
要遵循本指南,您需要访问运行基于 Linux 的操作系统的计算机。 这可以是您使用 SSH 连接到的虚拟专用服务器,也可以是您的本地计算机。 请注意,本教程使用运行 Ubuntu 20.04 的 Linux 服务器进行了验证,但给出的示例应该适用于运行任何版本的任何 Linux 发行版的计算机。
如果您打算使用远程服务器来遵循本指南,我们建议您先完成我们的 初始服务器设置指南 。 这样做将为您设置一个安全的服务器环境——包括一个具有 sudo
权限的非 root 用户和一个配置了 UFW 的防火墙——您可以使用它来培养您的 Linux 技能。
或者,您可以使用此页面上嵌入的交互式终端来试验本教程中的示例命令。 单击以下 Launch an Interactive Terminal! 按钮以打开终端窗口并开始使用 Linux (Ubuntu) 环境。
启动交互式终端!
第 1 步 – 如何在 Linux 中查看正在运行的进程
您可以使用 top
命令查看服务器上运行的所有进程:
top
Outputtop - 15:14:40 up 46 min, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1019600k total, 316576k used, 703024k free, 7652k buffers Swap: 0k total, 0k used, 0k free, 258976k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0 8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset 9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
前几行输出提供系统统计信息,例如 CPU/内存负载和正在运行的任务总数。
可以看到有 1 个正在运行的进程,还有 55 个进程被认为是 sleeping,因为它们没有主动使用 CPU 周期。
显示输出的其余部分显示正在运行的进程及其使用统计信息。 默认情况下,top
会自动按 CPU 使用率排序,因此您可以首先查看最繁忙的进程。 top
将继续在您的 shell 中运行,直到您使用标准组合键 Ctrl+C
退出正在运行的进程来停止它。 这会发送一个 kill
信号,指示进程在可能的情况下正常停止。
top
的改进版本,称为 htop
,在大多数软件包存储库中都可用。 在 Ubuntu 20.04 上,您可以使用 apt
安装它:
sudo apt install htop
之后,htop
命令将可用:
htop
Output Mem[||||||||||| 49/995MB] Load average: 0.00 0.03 0.05 CPU[ 0.0%] Tasks: 21, 3 thr; 1 running Swp[ 0/0MB] Uptime: 00:58:11 PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 1259 root 20 0 25660 1880 1368 R 0.0 0.2 0:00.06 htop 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 /sbin/init 311 root 20 0 17224 636 440 S 0.0 0.1 0:00.07 upstart-udev-brid 314 root 20 0 21592 1280 760 S 0.0 0.1 0:00.06 /sbin/udevd --dae 389 messagebu 20 0 23808 688 444 S 0.0 0.1 0:00.01 dbus-daemon --sys 407 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.02 rsyslogd -c5 408 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5 409 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5 406 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.04 rsyslogd -c5 553 root 20 0 15180 400 204 S 0.0 0.0 0:00.01 upstart-socket-br
htop
提供更好的多 CPU 线程可视化,更好地了解现代终端中的颜色支持,以及更多排序选项等功能。 与 top
不同,它并不总是默认安装,但可以被视为直接替换。 您可以通过按 Ctrl+C
退出 htop
,就像使用 top
。
以下是一些可以帮助您更有效地使用 htop 的键盘快捷键:
- M:按内存使用排序进程
- P:按处理器使用情况对进程进行排序
- ?:访问帮助
- k:杀死当前/标记的进程
- F2:配置 htop。 您可以在此处选择显示选项。
- /:: 搜索进程
您可以通过帮助或设置访问许多其他选项。 这些应该是您探索 htop 功能的第一站。 在下一步中,您将学习如何监控您的网络带宽。
第 2 步 – 如何监控您的网络带宽
如果您的网络连接似乎被过度使用并且您不确定哪个应用程序是罪魁祸首,那么一个名为 nethogs
的程序是找出问题的好选择。
在 Ubuntu 上,您可以使用以下命令安装 nethogs:
sudo apt install nethogs
之后,nethogs
命令将可用:
nethogs
OutputNetHogs version 0.8.0 PID USER PROGRAM DEV SENT RECEIVED 3379 root /usr/sbin/sshd eth0 0.485 0.182 KB/sec 820 root sshd: root@pts/0 eth0 0.427 0.052 KB/sec ? root unknown TCP 0.000 0.000 KB/sec TOTAL 0.912 0.233 KB/sec
nethogs
将每个应用程序与其网络流量相关联。
只有几个命令可以用来控制 nethogs
:
- M:在“kb/s”、“kb”、“b”和“mb”之间切换显示。
- R:按接收到的流量排序。
- S:按发送的流量排序。
- Q:退出
iptraf-ng
是另一种监控网络流量的方法。 它提供了许多不同的交互式监控界面。
注意:IPTraf 要求屏幕大小至少为 80 列乘 24 行,这意味着它在本教程嵌入的交互式终端中不起作用。
在 Ubuntu 上,您可以使用以下命令安装 iptraf-ng
:
sudo apt install iptraf-ng
iptraf-ng
需要以 root 权限运行,所以你应该在它前面加上 sudo
:
sudo iptraf-ng
您将看到一个菜单,该菜单使用一个名为 ncurses
的流行命令行界面框架。
使用此菜单,您可以选择要访问的界面。
例如,要获得所有网络流量的概览,您可以选择第一个菜单,然后选择“所有接口”。 它会给你一个看起来像这样的屏幕:
在这里,您可以看到您在所有网络接口上通信的 IP 地址。
如果您希望将这些 IP 地址解析为域,您可以通过退出流量屏幕,选择 Configure
然后切换到 Reverse DNS lookups
来启用反向 DNS 查找。
您还可以启用 TCP/UDP service names
以查看正在运行的服务的名称而不是端口号。
启用这两个选项后,显示可能如下所示:
netstat
命令是另一种收集网络信息的通用工具。
netstat
默认安装在大多数现代系统上,但您可以通过从服务器的默认软件包存储库下载来自行安装。 在包括 Ubuntu 在内的大多数 Linux 系统上,包含 netstat
的包是 net-tools
:
sudo apt install net-tools
默认情况下,netstat
命令自己打印一个打开的套接字列表:
netstat
OutputActive Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.241.187.204:ssh ip223.hichina.com:50324 ESTABLISHED tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 5 [ ] DGRAM 6559 /dev/log unix 3 [ ] STREAM CONNECTED 9386 unix 3 [ ] STREAM CONNECTED 9385 . . .
如果添加 -a
选项,它将列出所有端口,监听和非监听:
netstat -a
OutputActive Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 6195 @/com/ubuntu/upstart unix 2 [ ACC ] STREAM LISTENING 7762 /var/run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 6503 /var/run/dbus/system_bus_socket . . .
如果您想过滤以仅查看 TCP 或 UDP 连接,请分别使用 -t
或 -u
标志:
netstat -at
OutputActive Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN
通过传递“-s”标志查看统计信息:
netstat -s
OutputIp: 13500 total packets received 0 forwarded 0 incoming packets discarded 13500 incoming packets delivered 3078 requests sent out 16 dropped because of missing route Icmp: 41 ICMP messages received 0 input ICMP message failed. ICMP input histogram: echo requests: 1 echo replies: 40 . . .
如果您想不断更新输出,可以使用 -c
标志。 netstat 还有许多其他可用选项,您可以通过查看其 手册页 了解这些选项。
在下一步中,您将学习一些有用的方法来监控您的磁盘使用情况。
第 3 步 – 如何监控您的磁盘使用情况
要快速了解连接的驱动器上剩余的磁盘空间,您可以使用 df
程序。
没有任何选项,它的输出如下所示:
df
OutputFilesystem 1K-blocks Used Available Use% Mounted on /dev/vda 31383196 1228936 28581396 5% / udev 505152 4 505148 1% /dev tmpfs 203920 204 203716 1% /run none 5120 0 5120 0% /run/lock none 509800 0 509800 0% /run/shm
这会以字节为单位输出磁盘使用情况,这可能有点难以阅读。
要解决此问题,您可以以人类可读的格式指定输出:
df -h
OutputFilesystem Size Used Avail Use% Mounted on /dev/vda 30G 1.2G 28G 5% / udev 494M 4.0K 494M 1% /dev tmpfs 200M 204K 199M 1% /run none 5.0M 0 5.0M 0% /run/lock none 498M 0 498M 0% /run/shm
如果要查看所有文件系统上可用的总磁盘空间,可以传递 --total
选项。 这将在底部添加一行包含摘要信息:
df -h --total
OutputFilesystem Size Used Avail Use% Mounted on /dev/vda 30G 1.2G 28G 5% / udev 494M 4.0K 494M 1% /dev tmpfs 200M 204K 199M 1% /run none 5.0M 0 5.0M 0% /run/lock none 498M 0 498M 0% /run/shm total 32G 1.2G 29G 4%
df
可以提供有用的概述。 另一个命令 du
给出了按目录的分类。
du
将分析当前目录和任何子目录的使用情况。 在几乎空的主目录中运行的 du
的默认输出如下所示:
du
Output4 ./.cache 8 ./.ssh 28 .
再一次,您可以通过传递 -h
来指定人类可读的输出:
du -h
Output4.0K ./.cache 8.0K ./.ssh 28K .
要查看文件大小和目录,请键入以下内容:
du -a
Output0 ./.cache/motd.legal-displayed 4 ./.cache 4 ./.ssh/authorized_keys 8 ./.ssh 4 ./.profile 4 ./.bashrc 4 ./.bash_history 28 .
对于底部的总数,您可以添加 -c
选项:
du -c
Output4 ./.cache 8 ./.ssh 28 . 28 total
如果您只对总数而不是细节感兴趣,您可以发出:
du -s
Output28 .
du
还有一个 ncurses
接口,适当地称为 ncdu
,您可以安装:
sudo apt install ncdu
这将以图形方式表示您的磁盘使用情况:
ncdu
Output--- /root ---------------------------------------------------------------------- 8.0KiB [##########] /.ssh 4.0KiB [##### ] /.cache 4.0KiB [##### ] .bashrc 4.0KiB [##### ] .profile 4.0KiB [##### ] .bash_history
您可以通过使用向上和向下箭头并在任何目录条目上按 Enter 来逐步浏览文件系统。
在最后一节中,您将学习如何监控您的内存使用情况。
第 4 步 – 如何监控您的内存使用情况
您可以使用 free
命令检查系统上当前的内存使用情况。
不带选项使用时,输出如下所示:
free
Output total used free shared buff/cache available Mem: 1004896 390988 123484 3124 490424 313744 Swap: 0 0 0
要以更易读的格式显示,您可以传递 -m
选项以兆字节显示输出:
free -m
Output total used free shared buff/cache available Mem: 981 382 120 3 478 306 Swap: 0 0 0
Mem
行包括用于缓冲和缓存的内存,这些内存会在需要时立即释放以用于其他目的。 Swap
是已写入磁盘上 swapfile
的内存,以节省活动内存。
最后,vmstat
命令可以输出你系统的各种信息,包括内存、swap、磁盘io、cpu信息。
您可以使用该命令来查看内存使用情况:
vmstat
Outputprocs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 99340 123712 248296 0 0 0 1 9 3 0 0 100 0
您可以通过使用 -S
标志指定单位来查看以兆字节为单位的信息:
vmstat -S M
Outputprocs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 96 120 242 0 0 0 1 9 3 0 0 100 0
要获取有关内存使用情况的一些一般统计信息,请键入:
vmstat -s -S M
Output 495 M total memory 398 M used memory 252 M active memory 119 M inactive memory 96 M free memory 120 M buffer memory 242 M swap cache 0 M total swap 0 M used swap 0 M free swap . . .
要获取有关各个系统进程的缓存使用情况的信息,请键入:
vmstat -m -S M
OutputCache Num Total Size Pages ext4_groupinfo_4k 195 195 104 39 UDPLITEv6 0 0 768 10 UDPv6 10 10 768 10 tw_sock_TCPv6 0 0 256 16 TCPv6 11 11 1408 11 kcopyd_job 0 0 2344 13 dm_uevent 0 0 2464 13 bsg_cmd 0 0 288 14 . . .
这将为您提供有关缓存中存储的信息类型的详细信息。
结论
使用这些工具,您应该开始能够从命令行监控您的服务器。 还有许多其他用于不同目的的监视实用程序,但这些是一个很好的起点。
接下来,您可能想了解使用 ps、kill 和 nice 进行 Linux 进程管理。