如何使用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 进程管理。