摘要
對於系統和網絡管理員來說每天監控和調試Linux系統的性能問題是一項繁重的工作。在IT領域作爲一名Linux系統的管理員工作5年後,我逐漸認識到監控和保持系統啓動並運行是多麼的不容易。基於此原因,我們已編寫了最常使用的18個命令行工具列表,這些工具將有助於每個Linux/Unix 系統管理員的工作。這些命令行工具可以在各種Linux系統下使用,可以用於監控和查找產生性能問題的原因。這個命令行工具列表提供了足夠的工具,您可以挑選適用於您的監控場景的工具。
1. top
Linux下的top命令是一個性能監控程序,許多系統管理員常常用它來監控Linux性能,在許多Linux或者類Unix操作系統裏都有這個命令。top命令用於按一定的順序顯示所有正在運行而且處於活動狀態的實時進程,而且會定期更新顯示結果。這條命令顯示了CPU的使用率、內存使用率、交換內存使用大小、高速緩存使用大小、緩衝區使用大小,進程PID、所使用命令以及其他。它還可以顯示正在運行進程的內存和CPU佔用多的情況。對系統管理員來說,top命令式是一個非常有用的,它可用於監控系統並在需要的時候採取正確的處理動作。讓我們看看實際中的top命令運行結果:
[root@BendSha_RHEL5_5_x64 ~]# top
top - 20:02:50 up 1:56, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.4%us, 0.0%sy, 0.0%ni, 99.1%id, 0.0%wa, 0.0%hi, 0.5%si, 0.0%st
Mem: 1926288k total, 811812k used, 1114476k free, 140948k buffers
Swap: 2064344k total, 0k used, 2064344k free, 457388k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3199 root 15 0 130m 4212 3360 S 0.3 0.2 0:02.81 vmtoolsd
1 root 15 0 10296 680 564 S 0.0 0.0 0:00.95 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.01 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/1
5 root 34 19 0 0 0 S 0.0 0.0 0:00.94 ksoftirqd/1
6 root 10 -5 0 0 0 S 0.0 0.0 0:03.27 events/0
7 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 events/1
8 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper
25 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
30 root 10 -5 0 0 0 S 0.0 0.0 0:00.06 kblockd/0
31 root 10 -5 0 0 0 S 0.0 0.0 0:00.31 kblockd/1
32 root 14 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid
2. vmstat
Linux 的 vmstat命令用於顯示虛擬內存、內核線程、磁盤、系統進程、Block I/O、中斷、CPU 活動 等的統計信息。缺省情況下, vmstat命令在 Linux 系統下不可用,你需要安裝一個包含了 vmstat 程序的 sysstat 軟件包。vmstat支持四種模式,默認是VM MODE,讓我們看看實際中各種模式的執行結果:
VM MODE:
[root@BendSha_RHEL5_5_x64 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1112220 141508 458428 0 0 41 31 527 76 0 1 97 1 0
每一列的說明:
Procs
r: The number of processes waiting for run time.
b: The number of processes in uninterruptible sleep.
Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)
Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
DISK MODE
[root@BendSha_RHEL5_5_x64 ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
ram0 0 0 0 0 0 0 0 0 0 0
ram1 0 0 0 0 0 0 0 0 0 0
ram2 0 0 0 0 0 0 0 0 0 0
ram3 0 0 0 0 0 0 0 0 0 0
ram4 0 0 0 0 0 0 0 0 0 0
ram5 0 0 0 0 0 0 0 0 0 0
ram6 0 0 0 0 0 0 0 0 0 0
ram7 0 0 0 0 0 0 0 0 0 0
ram8 0 0 0 0 0 0 0 0 0 0
ram9 0 0 0 0 0 0 0 0 0 0
ram10 0 0 0 0 0 0 0 0 0 0
ram11 0 0 0 0 0 0 0 0 0 0
ram12 0 0 0 0 0 0 0 0 0 0
ram13 0 0 0 0 0 0 0 0 0 0
ram14 0 0 0 0 0 0 0 0 0 0
ram15 0 0 0 0 0 0 0 0 0 0
sda 45992 15956 1155388 343690 11881 24403 290114 379451 0 193
sdb 93 662 2544 195 2662 295042 595468 992799 0 10
fd0 0 0 0 0 0 0 0 0 0 0
sr0 7 10 136 32 0 0 0 0 0 0
md0 0 0 0 0 0 0 0 0 0 0
每一列的說明:
Reads
total: Total reads completed successfully
merged: grouped reads (resulting in one I/O)
sectors: Sectors read successfully
ms: milliseconds spent reading
Writes
total: Total writes completed successfully
merged: grouped writes (resulting in one I/O)
sectors: Sectors written successfully
ms: milliseconds spent writing
IO
cur: I/O in progress
s: seconds spent for I/O
DISK PARTITION MODE
[root@BendSha_RHEL5_5_x64 ~]# vmstat -p /dev/sda1
sda1 reads read sectors writes requested writes
226 17829 22 50
reads: Total number of reads issued to this partition
read sectors: Total read sectors for partition
writes : Total number of writes issued to this partition
requested writes: Total number of write requests made for partition
SLAB MODE
[root@BendSha_RHEL5_5_x64 ~]# vmstat -m
Cache Num Total Size Pages
ext4_inode_cache 4 4 896 4
ext4_xattr 0 0 88 44
ext4_free_block_extents 0 0 56 67
ext4_alloc_context 0 0 144 27
ext4_prealloc_space 0 0 104 37
ext4_system_zone 0 0 40 92
jbd2_journal_handle 0 0 24 144
jbd2_journal_head 1 40 96 40
jbd2_revoke_table 2 202 16 202
jbd2_revoke_record 0 0 32 112
rpc_buffers 8 8 2048 2
rpc_tasks 8 10 384 10
rpc_inode_cache 6 10 768 5
ip_fib_alias 10 59 64 59
ip_fib_hash 10 59 64 59
ip_conntrack_expect 0 0 136 28
ip_conntrack 2 13 304 13
iser_descriptors 0 0 320 12
ib_mad 0 0 448 8
每一列的說明:
cache: Cache name
num: Number of currently active objects
total: Total number of available objects
size: Size of each object
pages: Number of pages with at least one active object
totpages: Total number of allocated pages
pslab: Number of pages per slab
3. lsof
在許多Linux或者類Unix系統裏都有lsof命令,它常用於以列表的形式顯示所有打開的文件和進程。打開的文件包括磁盤文件、網絡套接字、管道、設備和進程。使用這條命令的主要情形之一就是在無法掛載磁盤和顯示正在使用或者打開某個文件的錯誤信息的時候。使用這條命令,你可以很容易地看到正在使用哪個文件。這條命令最常用的格式如下:
[root@BendSha_RHEL5_5_x64 ~]# lsof
bash 4856 root 0u CHR 136,0 2 /dev/pts/0
bash 4856 root 1u CHR 136,0 2 /dev/pts/0
bash 4856 root 2u CHR 136,0 2 /dev/pts/0
bash 4856 root 255u CHR 136,0 2 /dev/pts/0
pdflush 5029 root cwd DIR 8,2 4096 2 /
pdflush 5029 root rtd DIR 8,2 4096 2 /
pdflush 5029 root txt unknown /proc/5029/exe
jbd2/sdb1 5092 root cwd DIR 8,2 4096 2 /
jbd2/sdb1 5092 root rtd DIR 8,2 4096 2 /
jbd2/sdb1 5092 root txt unknown /proc/5092/exe
ext4-dio- 5093 root cwd DIR 8,2 4096 2 /
ext4-dio- 5093 root rtd DIR 8,2 4096 2 /
ext4-dio- 5093 root txt unknown /proc/5093/exe
ext4-dio- 5094 root cwd DIR 8,2 4096 2 /
ext4-dio- 5094 root rtd DIR 8,2 4096 2 /
ext4-dio- 5094 root txt unknown /proc/5094/exe
man 9278 root cwd DIR 8,2 4096 1736705 /root
man 9278 root rtd DIR 8,2 4096 2 /
4. tcpdump
tcpdump是最廣泛使用的網絡包分析器或者包監控程序之一,它用於捕捉或者過濾網絡上指定接口上接收或者傳輸的TCP/IP包。它還有一個選項用於把捕捉到的包保存到文件裏,以便以後進行分析。在幾乎所有主要的Linux發佈裏,tcpdump都可以使用。
[root@BendSha_RHEL5_5_x64 ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
20:40:52.811086 IP 192.168.117.129.ssh > 192.168.117.1.29750: P 499354857:499355053(196) ack 1824130863 win 89
20:40:52.811381 IP 192.168.117.1.29750 > 192.168.117.129.ssh: . ack 196 win 2051
20:40:52.811556 IP 192.168.117.129.46557 > 192.168.117.2.domain: 1078+ PTR? 1.117.168.192.in-addr.arpa. (44)
20:40:54.619500 arp who-has 192.168.117.129 (00:0c:29:ae:13:27 (oui Unknown)) tell 192.168.117.1
20:40:54.619511 arp reply 192.168.117.129 is-at 00:0c:29:ae:13:27 (oui Unknown)
20:40:54.814372 IP 192.168.117.2.domain > 192.168.117.129.46557: 1078 NXDomain 0/1/0 (99)
20:40:54.814626 IP 192.168.117.129.55859 > 192.168.117.2.domain: 53381+ PTR? 129.117.168.192.in-addr.arpa. (46)
5. netstat
netstat是一個用於監控進出網絡的包和網絡接口統計的命令行工具。它是一個非常有用的工具,系統管理員可以用來監控網絡性能,定位並解決網絡相關問題,netstat命令非常的強大,這裏只展示了默認的用法,後期應用過程中可以查看幫助文檔深入挖掘。
[root@BendSha_RHEL5_5_x64 ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.117.129:ssh 192.168.117.1:29750 ESTABLISHED
tcp 0 1 192.168.117.129:53573 192.168.242.198:apc-9952 SYN_SENT
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 2240 @/org/kernel/udev/udevd
unix 2 [ ] DGRAM 13146 @/org/freedesktop/hal/udev_event
unix 16 [ ] DGRAM 12186 /dev/log
unix 2 [ ] DGRAM 18551
unix 2 [ ] DGRAM 17778
unix 3 [ ] STREAM CONNECTED 17402 @/tmp/fam-root-
unix 3 [ ] STREAM CONNECTED 17401
unix 3 [ ] STREAM CONNECTED 17388 /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 17387
unix 3 [ ] STREAM CONNECTED 17385 /tmp/.X11-unix/X0
unix 3 [ ] STREAM CONNECTED 17384
unix 3 [ ] STREAM CONNECTED 17381 /tmp/.X11-unix/X0
6. htop
htop 是一個非常高級的交互式的實時linux進程監控工具。 它和top命令十分相似,但是它具有更豐富的特性,例如用戶可以友好地管理進程,快捷鍵,垂直和水平方式顯示進程等等。 htop是一個第三方工具,它不包含在linux系統中,你需要使用YUM包管理工具去安裝它。
7. iotop
iotop命令同樣也非常類似於top命令和htop程序,不過它具有監控並顯示實時磁盤I/O和進程的統計功能。在查找具體進程和大量使用磁盤讀寫進程的時候,這個工具就非常有用。
備註:iotop 對內核版本的要求是 kernel 2.6.18-238 及以上,對應操作系統 CentOS 5.6 和 Red Hat Linux 5.6 及以上版本。
8. iostat
iostat是一個用於收集顯示系統存儲設備輸入和輸出狀態統計的簡單工具。這個工具常常用來追蹤存儲設備的性能問題,其中存儲設備包括設備、本地磁盤,以及諸如使用NFS等的遠端磁盤。
iostat是一個用於收集顯示系統存儲設備輸入和輸出狀態統計的簡單工具。這個工具常常用來追蹤存儲設備的性能問題,其中存儲設備包括設備、本地磁盤,以及諸如使用NFS等的遠端磁盤。同vmstat一樣,iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。
[root@BendSha_RHEL5_5_x64 ~]# wget http://linuxinsight.com/files/iostat-2.2.tar.gz
[root@BendSha_RHEL5_5_x64 ~]# tar xvf iostat-2.2.tar.gz
[root@BendSha_RHEL5_5_x64 ~]# cd iostat-2.2
[root@BendSha_RHEL5_5_x64 iostat-2.2]# ls
INSTALL iostat iostat.8 iostat.c LICENSE Makefile README
[root@BendSha_RHEL5_5_x64 iostat-2.2]# make & make install
[root@BendSha_RHEL5_5_x64 iostat-2.2]# which iostat
/usr/local/bin/iostat
[root@BendSha_RHEL5_5_x64 iostat-2.2]# iostat 5 5
sda sdb sr0 cpu
kps tps svc_t kps tps svc_t kps tps svc_t us sy wt id
43 3 3.3 15 0 3.7 0 0 4.0 0 1 0 99
14 0 3.0 0 0 0.0 0 0 0.0 0 1 0 99
1 0 18.0 0 0 0.0 0 0 0.0 0 1 0 99
0 0 0.0 0 0 0.0 0 0 0.0 0 1 0 99
0 0 0.0 0 0 0.0 0 0 0.0 0 1 0 99
9. iptraf
iptraf是一個在Linux控制檯運行的、開放源代碼的實時網絡(局域網)監控應用。它採集了大量信息,比如通過網絡的IP流量監控,包括TCP標記、ICMP詳細信息、TCP/UDP流量分離、TCP連接包和字節數。同時還採集有關接口狀態的常見信息和詳細信息:TCP、UDP、IP、ICMP、非IP,IP校驗和錯誤,接口活動等。
[root@BendSha_RHEL5_5_x64 ~]# iptraf
10. psacct
psacct或者acct工具用於監視系統裏每個用戶的活動狀況。這兩個服務進程運行在後臺,它們對系統上運行的每個用戶的所有活動進行近距離監視,同時還監視這些活動所使用的資源情況。
系統管理員可以使用這兩個工具跟蹤每個用戶的活動,比如用戶正在做什麼,他們提交了那些命令,他們使用了多少資源,他們在系統上持續了多長時間等等。
11. monit
monit是一個免費的開源軟件,也是一個基於網絡的進程監控工具。它能自動監控和管理系統進程,程序,文件,文件夾,權限,總和驗證碼和文件系統。這個軟件能監控像Apache, MySQL, Mail, FTP, ProFTP, Nginx, SSH這樣的服務。你可以通過命令行或者這個軟件提供的網絡藉口來查看系統狀態。
12. nethogs
nethogs是一個開放源源代碼的很小程序(與Linux下的top命令很相似),它密切監視着系統上每個進程的網絡活動。同時還追蹤着每個程序或者應用所使用的實時網絡帶寬。
13. ifstat
ifstat是一個統計網絡接口活動狀態的工具。ifstat工具系統中並不默認安裝,需要自己下載源碼包,重新編譯安裝,使用過程相對比較簡單。
[root@BendSha_RHEL5_5_x64 opt]# wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
[root@BendSha_RHEL5_5_x64 opt]# tar xvf ifstat-1.1.tar.gz
[root@BendSha_RHEL5_5_x64 opt]# cd ifstat-1.1
[root@BendSha_RHEL5_5_x64 ifstat-1.1]# ./configure
[root@BendSha_RHEL5_5_x64 ifstat-1.1]# make & make install
[root@BendSha_RHEL5_5_x64 ifstat-1.1]# which ifstat
/usr/local/bin/ifstat
[root@BendSha_RHEL5_5_x64 ifstat-1.1]# ifstat -tT
Time eth0 Total
HH:MM:SS KB/s in KB/s out KB/s in KB/s out
00:46:42 0.06 0.20 0.06 0.20
00:46:43 0.06 0.15 0.06 0.15
00:46:44 0.06 0.15 0.06 0.15
00:46:45 0.12 0.15 0.12 0.15
00:46:46 0.06 0.15 0.06 0.15
00:46:47 0.12 0.22 0.12 0.22
14. iftop
iftop是另一個在控制檯運行的開放源代碼系統監控應用,它顯示了系統上通過網絡接口的應用網絡帶寬使用(源主機或者目的主機)的列表,這個列表定期更新。iftop用於監視網絡的使用情況,而'top'用於監視CPU的使用情況。iftop是'top'工具系列中的一員,它用於監視所選接口,並顯示兩個主機間當前網絡帶寬的使用情況。
15. monitorix
monitorix 是一個免費的輕量級應用工具,它的設計初衷是運行和監控Linux/Unix服務器系統和資源等。它有一個HTTP 網絡服務器,這個服務器有規律的收集系統和網絡的信息並以圖形化的形式展示出來。它監控系統的平均負載和使用,內存分配、磁盤健康狀況、系統服務、網絡端口、郵件統計(Sendmail,Postfix,Dovecot等),MySQL統計,等等。它就是用來監控系統的總體性能,幫助發現失誤、瓶頸和異常活動的。
16. arpwitch
arpwatch被設計用來監控Linux上的以太網地址解析 (MAC和IP地址的變化)。他在一段時間內持續監控以太網活動並輸出IP和MAC地址配對變動的日誌。它還可以向管理員發送郵件通知,對地址配對的增改發出警告。這對於檢測網絡上的ARP攻擊很有用。
17. suricate
suricata 是一個開源的高性能網絡安全、入侵檢測和反監測工具,可以運行Linux、FreeBSD和Windows上。非營利組織OISF (Open Information Security Foundation)開發並擁有其版權。
18. vnstat php
vnstat php 是流行網絡工具"vnstat"的基於web的前端呈現。vnstat php 將網絡使用情況呈現在漂亮的圖形界面中。他可以顯示以小時、日、月計的上傳和下載流量並輸出總結報告。
19. nagios
nagios是領先而強大的開源監控系統,他可以讓網絡/系統管理員在問題影響到正常的業務之前發現並解決它們。有了nagios系統,管理員可以在單個窗口內遠程檢測Linux、Windows、開關、路由器和打印機。它可以危險警告並指出系統/服務器是否有異常,這可以間接幫助你在問題發生之前採取搶救措施。