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

介紹

每台電腦系統都受益於適當的管理和監控。密切關注系統的運行狀況將有助於您及時發現問題並解決它們。

有許多命令行工具是為此目的而創建的。本指南將向您介紹一些最有幫助的應用程序,以便放入您的工具箱。

先決條件

要跟隨本指南,您需要訪問運行基於Linux的操作系統的計算機。這可以是您通過SSH連接的虛擬私人服務器,也可以是您的本地計算機。請注意,本教程是在運行Ubuntu 20.04的Linux服務器上進行驗證的,但所給示例應該適用於運行任何Linux發行版的任何版本的計算機。

如果您計劃使用遠程服務器來跟隨此指南,我們建議您首先完成我們的初始服務器設置指南。這樣做將為您設置一個安全的服務器環境,包括一個具有sudo特權的非root用戶和使用UFW配置的防火牆,您可以使用它來建立您的Linux技能。

步驟1 – 如何查看 Linux 中正在運行的進程

您可以使用 top 命令查看您的伺服器上正在運行的所有進程:

  1. top
Output
top - 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 個被認為是因為它們沒有在主動使用 CPU 週期而被認為是正在 睡眠 中的進程。

顯示的其餘部分顯示了正在運行的進程及其使用統計信息。默認情況下,top 自動按 CPU 使用情況對這些進行排序,因此您可以首先看到最繁忙的進程。 top 將在您的 shell 中繼續運行,直到您使用標準的 Ctrl+C 組合鍵停止它,退出正在運行的進程。這會發送一個 kill 信號,如果可能的話,指示進程優雅地停止。

一個改進版的 top,稱為 htop,在大多數套件存儲庫中都可以找到。在 Ubuntu 20.04 上,您可以使用 apt 安裝它:

  1. sudo apt install htop

安裝完成後,htop 命令將可用:

  1. 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 不同的是,它不是始終默認安裝的,但可以被視為一個可以隨時替代的工具。您可以像使用 top 一樣通過按下 Ctrl+C 退出 htop

這裡有一些鍵盤快捷鍵,可以幫助您更有效地使用 htop:

  • M: Sort processes by memory usage
  • P: Sort processes by processor usage
  • ?: 訪問幫助
  • k: Kill current/tagged process
  • F2: 配置 htop。您可以在這裡選擇顯示選項。
  • /: 搜索進程

您可以通過幫助或設置訪問許多其他選項。這些應該是您探索 htop 功能的第一站。在下一步中,您將學習如何監控您的網絡帶寬。

步驟2 – 如何監控您的網絡帶寬

如果您的網絡連接似乎被過度使用,而您又不確定是哪個應用程序造成的,一個名為 nethogs 的程序是一個很好的選擇。

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

  1. sudo apt install nethogs

安裝完成後,nethogs 命令將可用:

  1. nethogs
Output
NetHogs 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: Change displays between “kb/s”, “kb”, “b”, and “mb”.
  • R: Sort by traffic received.
  • S: Sort by traffic sent.
  • Q: quit

iptraf-ng 是另一種監控網絡流量的方式。 它提供了多種不同的交互式監控界面。

注意:IPTraf 需要至少 80 列乘以 24 行的屏幕尺寸。

在 Ubuntu 上,你可以使用以下命令安裝 iptraf-ng

  1. sudo apt install iptraf-ng

iptraf-ng 需要以 root 權限運行,因此你應該在其前面加上 sudo

  1. sudo iptraf-ng

你將看到一個使用了一個名為 ncurses 的流行命令行界面框架的菜單。

通過這個菜單,你可以選擇要訪問的界面。

例如,要獲取所有網絡流量的概覽,你可以選擇第一個菜單然後選擇 “All interfaces”。 它會給你一個看起來像這樣的屏幕:

在這裡,你可以看到你所有網絡接口上的通信 IP 地址。

如果你想將這些 IP 地址解析為域名,你可以退出流量屏幕,選擇 Configure 然後切換打開 Reverse DNS lookups

你還可以啟用 TCP/UDP service names 以查看運行的服務名稱而不是端口號。

啟用這兩個選項後,顯示可能如下:

netstat 命令是另一個收集網絡信息的多功能工具。

netstat通常已預設安裝在大多數現代系統上,但您也可以通過從伺服器的預設套件存儲庫下載來安裝它。在大多數Linux系統上,包含netstat的套件是net-tools

  1. sudo apt install net-tools

預設情況下,單獨運行netstat命令會列印出一個開放的套接字清單:

  1. netstat
Output
Active 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選項,它將列出所有端口,包括監聽和非監聽的:

  1. netstat -a
Output
Active 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標誌:

  1. netstat -at
Output
Active 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”標誌來查看統計信息:

  1. netstat -s
Output
Ip: 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程式。

不帶任何選項運行時,其輸出如下:

  1. df
Output
Filesystem 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

這將以位元組形式輸出磁盤使用情況,可能有點難以閱讀。

為解決此問題,您可以指定以人類可讀的格式輸出:

  1. df -h
Output
Filesystem 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选项。这将在底部添加一行摘要信息:

  1. df -h --total
Output
Filesystem 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的默认输出如下:

  1. du
Output
4 ./.cache 8 ./.ssh 28 .

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

  1. du -h
Output
4.0K ./.cache 8.0K ./.ssh 28K .

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

  1. du -a
Output
0 ./.cache/motd.legal-displayed 4 ./.cache 4 ./.ssh/authorized_keys 8 ./.ssh 4 ./.profile 4 ./.bashrc 4 ./.bash_history 28 .

要在底部显示总计,可以添加-c选项:

  1. du -c
Output
4 ./.cache 8 ./.ssh 28 . 28 total

如果您只对总数感兴趣而不关心具体信息,可以执行:

  1. du -s
Output
28 .

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

  1. sudo apt install ncdu

这将以图形方式表示您的磁盘使用情况:

  1. ncdu
Output
--- /root ---------------------------------------------------------------------- 8.0KiB [##########] /.ssh 4.0KiB [##### ] /.cache 4.0KiB [##### ] .bashrc 4.0KiB [##### ] .profile 4.0KiB [##### ] .bash_history

您可以通过使用上下箭头并在任何目录条目上按Enter来浏览文件系统。

在最后一节中,您将学习如何监视内存使用情况。

步骤 4 – 如何监视内存使用情况

您可以使用free命令检查系统当前的内存使用情况。

當未使用選項時,輸出如下:

  1. free
Output
total used free shared buff/cache available Mem: 1004896 390988 123484 3124 490424 313744 Swap: 0 0 0

為了以更易讀的格式顯示,您可以傳遞-m選項以將輸出顯示為兆字節:

  1. 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命令可以輸出有關系統的各種信息,包括內存、交換、磁盤io和cpu信息。

您可以使用該命令來查看內存使用情況的另一個視圖:

  1. vmstat
Output
procs -----------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標誌並指定單位,您可以以兆字節為單位查看此信息:

  1. vmstat -S M
Output
procs -----------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

要獲取有關內存使用情況的一些常規統計信息,輸入:

  1. 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 . . .

要獲取有關個別系統進程緩存使用情況的信息,輸入:

  1. vmstat -m -S M
Output
Cache 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進程。

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-top-netstat-du-other-tools-to-monitor-server-resources