如何使用 Top、Netstat、Du 及其他工具监控服务器资源

介绍

每个计算机系统都受益于适当的管理和监控,监控系统的运行方式将有助于您发现问题并快速解决问题。

有大量的命令行实用程序为此而创建,本指南将介绍您在工具箱中的一些最有用的应用程序。

前提条件

要跟随这个指南,你需要访问运行基于Linux的操作系统的计算机. 它可以是一个虚拟的私人服务器,你已经连接到SSH或你的本地机器. 请注意,本教程是通过使用运行Ubuntu 20.04的Linux服务器验证的,但所示的例子应该在运行任何Linux发行版的计算机上工作。

如果您打算使用远程服务器来遵循本指南,我们建议您先完成我们的 初始服务器设置指南

步骤1:如何在Linux中查看运行过程

您可以通过使用顶部命令查看在您的服务器上运行的所有流程:

1top
 1[secondary_label Output]
 2top - 15:14:40 up 46 min, 1 user, load average: 0.00, 0.01, 0.05
 3Tasks:  56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie
 4Cpu(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
 5Mem:   1019600k total, 316576k used, 703024k free, 7652k buffers
 6Swap:        0k total, 0k used, 0k free, 258976k cached
 7
 8  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+  COMMAND           
 9    1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init               
10    2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd           
11    3 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0        
12    6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0        
13    7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0         
14    8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset             
15    9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper            
16   10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs

第一几个输出行提供系统统计数据,例如CPU/内存负载和运行任务总数。

您可以看到有 1 个运行过程,以及 55 个被认为是 sleeping 的过程,因为它们没有积极使用 CPU 周期。

显示的剩余输出显示了运行过程及其使用统计数据。默认情况下,顶部会自动按CPU使用量排序这些过程,因此您可以首先看到最繁忙的过程。顶部将继续在您的壳中运行,直到您使用标准的键组合Ctrl+C来停止运行过程。

在Ubuntu 20.04上,你可以用apt安装它:

1sudo apt install htop

之后,HOTP命令将可用:

1htop
 1[secondary_label Output]
 2  Mem[|||||||||||           49/995MB]     Load average: 0.00 0.03 0.05
 3  CPU[                          0.0%]     Tasks: 21, 3 thr; 1 running
 4  Swp[                         0/0MB]     Uptime: 00:58:11
 5
 6  PID USER PRI NI VIRT RES SHR S CPU% MEM%   TIME+  Command
 7 1259 root 20 0 25660 1880 1368 R 0.0 0.2 0:00.06 htop
 8    1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 /sbin/init
 9  311 root 20 0 17224 636 440 S 0.0 0.1 0:00.07 upstart-udev-brid
10  314 root 20 0 21592 1280 760 S 0.0 0.1 0:00.06 /sbin/udevd --dae
11  389 messagebu 20 0 23808 688 444 S 0.0 0.1 0:00.01 dbus-daemon --sys
12  407 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.02 rsyslogd -c5
13  408 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5
14  409 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5
15  406 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.04 rsyslogd -c5
16  553 root 20 0 15180 400 204 S 0.0 0.0 0:00.01 upstart-socket-br

htop提供更好的多 CPU 线程的可视化,现代终端的色彩支持的更好认识,以及更多的排序选项,其他功能。 与 top 不同,它并不总是默认安装,但可以被视为一个 drop-in 替代。

以下是一些键盘快捷键,可以帮助您更有效地使用 htop:

  • M:按内存使用分类过程
  • P:按处理器使用分类过程
  • ?:访问帮助
  • k:杀死当前/标记的过程
  • ** F2**:配置 htop. 您可以在这里选择显示选项。

有许多其他选项可以通过帮助或设置访问. 这些应该是您探索 htop 的功能的第一站. 在下一步,您将学习如何监控网络带宽。

步骤2 – 如何监控您的网络带宽

如果你的网络连接看起来过度使用,你不确定哪个应用程序是罪魁祸首,一个名为nethogs的程序是一个很好的选择来找出。

在Ubuntu上,您可以使用以下命令安装nethogs:

1sudo apt install nethogs

之后,nethogs命令将可用:

1nethogs
1[secondary_label Output]
2NetHogs version 0.8.0
3
4  PID USER PROGRAM DEV SENT RECEIVED       
53379 root     /usr/sbin/sshd eth0 0.485 0.182 KB/sec
6820 root sshd: root@pts/0 eth0 0.427 0.052 KB/sec
7?     root unknown TCP 0.000 0.000 KB/sec
8
9  TOTAL 0.912 0.233 KB/sec

nethogs将每个应用程序与其网络流量相关联。

您可以使用几个命令来控制nethogs:

  • M:在kb/s,kb,bmb之间更改显示。
  • R:按收到的流量排序。

’iptraf-ng’是监控网络流量的另一种方式,它提供了多种不同的交互式监控接口。

<$>[注] : IPTraf 需要至少为 80 列和 24 行的屏幕大小。

在Ubuntu上,您可以使用以下命令安装iptraf-ng:

1sudo apt install iptraf-ng

iptraf-ng需要用根特权运行,所以你应该先用sudo运行:

1sudo iptraf-ng

您将收到一个使用流行的命令行界面框架的菜单,称为ncurses

iptraf-ng main interface

通过此菜单,您可以选择您想要访问的界面。

例如,要查看所有网络流量,您可以选择第一个菜单,然后选择所有接口

iptraf-ng Traffic View

在这里,您可以看到您在所有网络接口中通信的IP地址。

如果您想将这些 IP 地址解决为域,您可以通过退出流量屏幕,选择配置,然后转到反向 DNS 搜索来启用反向 DNS 搜索。

您还可以启用TCP/UDP 服务名称,以查看正在运行的服务名称,而不是端口号。

如果启用了这两个选项,显示器可能看起来像这样:

iptraf-ng Named Traffic View

netstat命令是收集网络信息的另一个多功能工具。

「netstat」默认安装在大多数现代系统上,但您可以通过从服务器的默认包存库下载来自行安装它。

1sudo apt install net-tools

默认情况下,netstat命令自行打印了打开的插头列表:

1netstat
 1[secondary_label Output]
 2Active Internet connections (w/o servers)
 3Proto Recv-Q Send-Q Local Address Foreign Address State      
 4tcp 0 0 192.241.187.204:ssh ip223.hichina.com:50324 ESTABLISHED
 5tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED
 6Active UNIX domain sockets (w/o servers)
 7Proto RefCnt Flags Type State I-Node Path
 8unix 5      [ ]         DGRAM 6559     /dev/log
 9unix 3      [ ]         STREAM CONNECTED 9386     
10unix 3      [ ]         STREAM CONNECTED 9385     
11. . .

如果您添加一个-a选项,它会列出所有端口,倾听和不倾听:

1netstat -a
 1[secondary_label Output]
 2Active Internet connections (servers and established)
 3Proto Recv-Q Send-Q Local Address Foreign Address State      
 4tcp 0 0 *:ssh                   *:*                     LISTEN     
 5tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED
 6tcp6 0 0 [::]:ssh                [::]:*                  LISTEN     
 7Active UNIX domain sockets (servers and established)
 8Proto RefCnt Flags Type State I-Node Path
 9unix 2      [ ACC ]     STREAM LISTENING 6195     @/com/ubuntu/upstart
10unix 2      [ ACC ]     STREAM LISTENING 7762     /var/run/acpid.socket
11unix 2      [ ACC ]     STREAM LISTENING 6503     /var/run/dbus/system_bus_socket
12. . .

如果您想过滤以查看仅有 TCP 或 UDP 连接,则分别使用-t-u旗帜:

1netstat -at
1[secondary_label Output]
2Active Internet connections (servers and established)
3Proto Recv-Q Send-Q Local Address Foreign Address State      
4tcp 0 0 *:ssh                   *:*                     LISTEN     
5tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED
6tcp6 0 0 [::]:ssh                [::]:*                  LISTEN

通过-s旗帜查看统计数据:

1netstat -s
 1[secondary_label Output]
 2Ip:
 3    13500 total packets received
 4    0 forwarded
 5    0 incoming packets discarded
 6    13500 incoming packets delivered
 7    3078 requests sent out
 8    16 dropped because of missing route
 9Icmp:
10    41 ICMP messages received
11    0 input ICMP message failed.
12    ICMP input histogram:
13        echo requests: 1
14        echo replies: 40
15. . .

如果你想连续更新输出,你可以使用c旗帜.有许多其他选项可用于netstat,你可以通过审查其 手册页面来了解。

在下一步中,您将学习一些有用的方法来监控您的磁盘使用。

步骤3 – 如何监控您的磁盘使用

要快速了解您的附加驱动器上留有多少磁盘空间,您可以使用df程序。

没有任何选项,它的输出看起来像这样:

1df
1[secondary_label Output]
2Filesystem 1K-blocks Used Available Use% Mounted on
3/dev/vda 31383196 1228936 28581396 5% /
4udev 505152 4 505148 1% /dev
5tmpfs 203920 204 203716 1% /run
6none 5120 0 5120 0% /run/lock
7none 509800 0 509800 0% /run/shm

这会输出字节中的磁盘使用量,这可能有点难以读取。

若要修复此问题,您可以将输出指定为人类可读格式:

1df -h
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3/dev/vda 30G 1.2G 28G 5% /
4udev 494M 4.0K 494M 1% /dev
5tmpfs 200M 204K 199M 1% /run
6none 5.0M 0 5.0M 0% /run/lock
7none 498M 0 498M 0% /run/shm

如果你想看到所有文件系统中可用的总磁盘空间,你可以通过--total选项。

1df -h --total
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3/dev/vda 30G 1.2G 28G 5% /
4udev 494M 4.0K 494M 1% /dev
5tmpfs 200M 204K 199M 1% /run
6none 5.0M 0 5.0M 0% /run/lock
7none 498M 0 498M 0% /run/shm
8total 32G 1.2G 29G 4%

df可以提供有用的概述,另一个命令du则会根据目录进行分解。

du 将分析当前目录和任何子目录的使用情况. 在几乎空的 Home 目录中运行的 du 的默认输出看起来如下:

1du
1[secondary_label Output]
24    ./.cache
38    ./.ssh
428    .

再次,您可以通过传输它 -h 来指定人类可读的输出:

1du -h
1[secondary_label Output]
24.0K    ./.cache
38.0K    ./.ssh
428K    .

若要查看文件大小以及目录,请键入以下内容:

1du -a
1[secondary_label Output]
20    ./.cache/motd.legal-displayed
34    ./.cache
44    ./.ssh/authorized_keys
58    ./.ssh
64    ./.profile
74    ./.bashrc
84    ./.bash_history
928    .

对于底部的总数,您可以添加 -c 选项:

1du -c
1[secondary_label Output]
24    ./.cache
38    ./.ssh
428    .
528 total

如果您只对总和感兴趣,而不是具体情况,您可以发行:

1du -s
1[secondary_label Output]
228    .

还有一个为duncurses界面,适当地称为ncdu,您可以安装:

1sudo apt install ncdu

这将图形上表示您的磁盘使用情况:

1ncdu
1[secondary_label Output]
2--- /root ----------------------------------------------------------------------
3    8.0KiB [##########] /.ssh                                                   
4    4.0KiB [#####     ] /.cache
5    4.0KiB [#####     ]  .bashrc
6    4.0KiB [#####     ]  .profile
7    4.0KiB [#####     ]  .bash_history

您可以通过使用向上和向下箭头进入文件系统,并在任何目录条目上按下 Enter。

在最后一节中,您将学习如何监控您的内存使用。

步骤4:如何监控您的内存使用

您可以通过使用免费命令检查系统的当前内存使用量。

当没有选项使用时,输出看起来像这样:

1free
1[secondary_label Output]
2              total used free shared buff/cache available
3Mem:        1004896 390988 123484 3124 490424 313744
4Swap:             0 0 0

要在更易于阅读的格式中显示,您可以通过-m选项以显示以 Megabyte 的输出:

1free -m
1[secondary_label Output]
2              total used free shared buff/cache available
3Mem:            981 382 120 3 478 306
4Swap:             0 0 0

Mem行包括用于缓存和缓存的内存,该内存在其他用途所需时立即释放。

最后,vmstat命令可以输出有关您的系统的各种信息,包括内存、交换、磁盘 io 和 CPU 信息。

您可以使用该命令来获取记忆使用的另一个视图:

1vmstat
1[secondary_label Output]
2procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
3 r b swpd free buff cache si so bi bo in cs us sy id wa
4 1 0 0 99340 123712 248296 0 0 0 1 9 3 0 0 100 0

您可以通过指定与-S旗帜的单位来看到这一点:

1vmstat -S M
1[secondary_label Output]
2procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
3 r b swpd free buff cache si so bi bo in cs us sy id wa
4 1 0 0 96 120 242 0 0 0 1 9 3 0 0 100 0

若要获取有关内存使用的一些一般统计数据,请键入:

1vmstat -s -S M
 1[secondary_label Output]
 2          495 M total memory
 3          398 M used memory
 4          252 M active memory
 5          119 M inactive memory
 6           96 M free memory
 7          120 M buffer memory
 8          242 M swap cache
 9            0 M total swap
10            0 M used swap
11            0 M free swap
12. . .

若要获取有关个别系统流程的缓存使用的信息,请键入:

1vmstat -m -S M
 1[secondary_label Output]
 2Cache Num Total Size Pages
 3ext4_groupinfo_4k 195 195 104 39
 4UDPLITEv6 0 0 768 10
 5UDPv6 10 10 768 10
 6tw_sock_TCPv6 0 0 256 16
 7TCPv6 11 11 1408 11
 8kcopyd_job 0 0 2344 13
 9dm_uevent 0 0 2464 13
10bsg_cmd 0 0 288 14
11. . .

这将为您提供有关缓存中存储的信息的详细信息。

结论

使用这些工具,您应该开始能够从命令行监控您的服务器. 有许多其他监控工具用于不同的目的,但这些都是一个很好的起点。

接下来,您可能想了解使用 ps, kill, and nice的Linux流程管理。

Published At
Categories with 技术
comments powered by Disqus