介紹
每台電腦系統都受益於適當的管理和監控。密切關注系統的運行狀況將有助於您及時發現問題並解決它們。
有許多命令行工具是為此目的而創建的。本指南將向您介紹一些最有幫助的應用程序,以便放入您的工具箱。
先決條件
要跟隨本指南,您需要訪問運行基於Linux的操作系統的計算機。這可以是您通過SSH連接的虛擬私人服務器,也可以是您的本地計算機。請注意,本教程是在運行Ubuntu 20.04的Linux服務器上進行驗證的,但所給示例應該適用於運行任何Linux發行版的任何版本的計算機。
如果您計劃使用遠程服務器來跟隨此指南,我們建議您首先完成我們的初始服務器設置指南。這樣做將為您設置一個安全的服務器環境,包括一個具有sudo
特權的非root用戶和使用UFW配置的防火牆,您可以使用它來建立您的Linux技能。
步驟1 – 如何查看 Linux 中正在運行的進程
您可以使用 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 個被認為是因為它們沒有在主動使用 CPU 週期而被認為是正在 睡眠 中的進程。
顯示的其餘部分顯示了正在運行的進程及其使用統計信息。默認情況下,top
自動按 CPU 使用情況對這些進行排序,因此您可以首先看到最繁忙的進程。 top
將在您的 shell 中繼續運行,直到您使用標準的 Ctrl+C
組合鍵停止它,退出正在運行的進程。這會發送一個 kill
信號,如果可能的話,指示進程優雅地停止。
一個改進版的 top
,稱為 htop
,在大多數套件存儲庫中都可以找到。在 Ubuntu 20.04 上,您可以使用 apt
安裝它:
安裝完成後,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:
安裝完成後,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: 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
:
iptraf-ng
需要以 root 權限運行,因此你應該在其前面加上 sudo
:
你將看到一個使用了一個名為 ncurses
的流行命令行界面框架的菜單。
通過這個菜單,你可以選擇要訪問的界面。
例如,要獲取所有網絡流量的概覽,你可以選擇第一個菜單然後選擇 “All interfaces”。 它會給你一個看起來像這樣的屏幕:
在這裡,你可以看到你所有網絡接口上的通信 IP 地址。
如果你想將這些 IP 地址解析為域名,你可以退出流量屏幕,選擇 Configure
然後切換打開 Reverse DNS lookups
。
你還可以啟用 TCP/UDP service names
以查看運行的服務名稱而不是端口號。
啟用這兩個選項後,顯示可能如下:
netstat
命令是另一個收集網絡信息的多功能工具。
netstat
通常已預設安裝在大多數現代系統上,但您也可以通過從伺服器的預設套件存儲庫下載來安裝它。在大多數Linux系統上,包含netstat
的套件是net-tools
:
預設情況下,單獨運行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
選項,它將列出所有端口,包括監聽和非監聽的:
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
標誌:
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”標誌來查看統計信息:
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
程式。
不帶任何選項運行時,其輸出如下:
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
這將以位元組形式輸出磁盤使用情況,可能有點難以閱讀。
為解決此問題,您可以指定以人類可讀的格式輸出:
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
选项。这将在底部添加一行摘要信息:
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
的默认输出如下:
Output4 ./.cache
8 ./.ssh
28 .
再次,您可以通过传递-h
来指定人类可读的输出:
Output4.0K ./.cache
8.0K ./.ssh
28K .
要查看文件大小以及目录,请键入以下内容:
Output0 ./.cache/motd.legal-displayed
4 ./.cache
4 ./.ssh/authorized_keys
8 ./.ssh
4 ./.profile
4 ./.bashrc
4 ./.bash_history
28 .
要在底部显示总计,可以添加-c
选项:
Output4 ./.cache
8 ./.ssh
28 .
28 total
如果您只对总数感兴趣而不关心具体信息,可以执行:
Output28 .
还有一个du
的ncurses
界面,称为ncdu
,您可以安装:
这将以图形方式表示您的磁盘使用情况:
Output--- /root ----------------------------------------------------------------------
8.0KiB [##########] /.ssh
4.0KiB [##### ] /.cache
4.0KiB [##### ] .bashrc
4.0KiB [##### ] .profile
4.0KiB [##### ] .bash_history
您可以通过使用上下箭头并在任何目录条目上按Enter来浏览文件系统。
在最后一节中,您将学习如何监视内存使用情况。
步骤 4 – 如何监视内存使用情况
您可以使用free
命令检查系统当前的内存使用情况。
當未使用選項時,輸出如下:
Output total used free shared buff/cache available
Mem: 1004896 390988 123484 3124 490424 313744
Swap: 0 0 0
為了以更易讀的格式顯示,您可以傳遞-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信息。
您可以使用該命令來查看內存使用情況的另一個視圖:
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
標誌並指定單位,您可以以兆字節為單位查看此信息:
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
要獲取有關內存使用情況的一些常規統計信息,輸入:
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
. . .
要獲取有關個別系統進程緩存使用情況的信息,輸入:
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進程。