Linux 系統監控工具鏈

摘要

        對於系統和網絡管理員來說每天監控和調試Linux系統的性能問題是一項繁重的工作。在IT領域作爲一名Linux系統的管理員工作5年後,我逐漸認識到監控和保持系統啓動並運行是多麼的不容易。基於此原因,我們已編寫了最常使用的18個命令行工具列表,這些工具將有助於每個Linux/Unix 系統管理員的工作。這些命令行工具可以在各種Linux系統下使用,可以用於監控和查找產生性能問題的原因。這個命令行工具列表提供了足夠的工具,您可以挑選適用於您的監控場景的工具。

1. top

        Linux下的top命令是一個性能監控程序,許多系統管理員常常用它來監控Linux性能,在許多Linux或者類Unix操作系統裏都有這個命令。top命令用於按一定的順序顯示所有正在運行而且處於活動狀態的實時進程,而且會定期更新顯示結果。這條命令顯示了CPU的使用率、內存使用率、交換內存使用大小、高速緩存使用大小、緩衝區使用大小,進程PID、所使用命令以及其他。它還可以顯示正在運行進程的內存和CPU佔用多的情況。對系統管理員來說,top命令式是一個非常有用的,它可用於監控系統並在需要的時候採取正確的處理動作。讓我們看看實際中的top命令運行結果:
  1. [root@BendSha_RHEL5_5_x64 ~]# top
  2. top - 20:02:50 up 1:56, 1 user, load average: 0.00, 0.00, 0.00
  3. Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie
  4. 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
  5. Mem: 1926288k total, 811812k used, 1114476k free, 140948k buffers
  6. Swap: 2064344k total, 0k used, 2064344k free, 457388k cached
  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  8. 3199 root 15 0 130m 4212 3360 S 0.3 0.2 0:02.81 vmtoolsd
  9. 1 root 15 0 10296 680 564 S 0.0 0.0 0:00.95 init
  10. 2 root RT -5 0 0 0 S 0.0 0.0 0:00.01 migration/0
  11. 3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
  12. 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/1
  13. 5 root 34 19 0 0 0 S 0.0 0.0 0:00.94 ksoftirqd/1
  14. 6 root 10 -5 0 0 0 S 0.0 0.0 0:03.27 events/0
  15. 7 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 events/1
  16. 8 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper
  17. 25 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
  18. 30 root 10 -5 0 0 0 S 0.0 0.0 0:00.06 kblockd/0
  19. 31 root 10 -5 0 0 0 S 0.0 0.0 0:00.31 kblockd/1
  20. 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:
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat
  2. procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
  3. r b swpd free buff cache si so bi bo in cs us sy id wa st
  4. 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
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat -d
  2. disk- ------------reads------------ ------------writes----------- -----IO------
  3. total merged sectors ms total merged sectors ms cur sec
  4. ram0 0 0 0 0 0 0 0 0 0 0
  5. ram1 0 0 0 0 0 0 0 0 0 0
  6. ram2 0 0 0 0 0 0 0 0 0 0
  7. ram3 0 0 0 0 0 0 0 0 0 0
  8. ram4 0 0 0 0 0 0 0 0 0 0
  9. ram5 0 0 0 0 0 0 0 0 0 0
  10. ram6 0 0 0 0 0 0 0 0 0 0
  11. ram7 0 0 0 0 0 0 0 0 0 0
  12. ram8 0 0 0 0 0 0 0 0 0 0
  13. ram9 0 0 0 0 0 0 0 0 0 0
  14. ram10 0 0 0 0 0 0 0 0 0 0
  15. ram11 0 0 0 0 0 0 0 0 0 0
  16. ram12 0 0 0 0 0 0 0 0 0 0
  17. ram13 0 0 0 0 0 0 0 0 0 0
  18. ram14 0 0 0 0 0 0 0 0 0 0
  19. ram15 0 0 0 0 0 0 0 0 0 0
  20. sda 45992 15956 1155388 343690 11881 24403 290114 379451 0 193
  21. sdb 93 662 2544 195 2662 295042 595468 992799 0 10
  22. fd0 0 0 0 0 0 0 0 0 0 0
  23. sr0 7 10 136 32 0 0 0 0 0 0
  24. 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
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat -p /dev/sda1
  2. sda1 reads read sectors writes requested writes
  3. 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
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat -m
  2. Cache Num Total Size Pages
  3. ext4_inode_cache 4 4 896 4
  4. ext4_xattr 0 0 88 44
  5. ext4_free_block_extents 0 0 56 67
  6. ext4_alloc_context 0 0 144 27
  7. ext4_prealloc_space 0 0 104 37
  8. ext4_system_zone 0 0 40 92
  9. jbd2_journal_handle 0 0 24 144
  10. jbd2_journal_head 1 40 96 40
  11. jbd2_revoke_table 2 202 16 202
  12. jbd2_revoke_record 0 0 32 112
  13. rpc_buffers 8 8 2048 2
  14. rpc_tasks 8 10 384 10
  15. rpc_inode_cache 6 10 768 5
  16. ip_fib_alias 10 59 64 59
  17. ip_fib_hash 10 59 64 59
  18. ip_conntrack_expect 0 0 136 28
  19. ip_conntrack 2 13 304 13
  20. iser_descriptors 0 0 320 12
  21. 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命令,它常用於以列表的形式顯示所有打開的文件和進程。打開的文件包括磁盤文件、網絡套接字、管道、設備和進程。使用這條命令的主要情形之一就是在無法掛載磁盤和顯示正在使用或者打開某個文件的錯誤信息的時候。使用這條命令,你可以很容易地看到正在使用哪個文件。這條命令最常用的格式如下:
  1. [root@BendSha_RHEL5_5_x64 ~]# lsof
  2. bash 4856 root 0u CHR 136,0 2 /dev/pts/0
  3. bash 4856 root 1u CHR 136,0 2 /dev/pts/0
  4. bash 4856 root 2u CHR 136,0 2 /dev/pts/0
  5. bash 4856 root 255u CHR 136,0 2 /dev/pts/0
  6. pdflush 5029 root cwd DIR 8,2 4096 2 /
  7. pdflush 5029 root rtd DIR 8,2 4096 2 /
  8. pdflush 5029 root txt unknown /proc/5029/exe
  9. jbd2/sdb1 5092 root cwd DIR 8,2 4096 2 /
  10. jbd2/sdb1 5092 root rtd DIR 8,2 4096 2 /
  11. jbd2/sdb1 5092 root txt unknown /proc/5092/exe
  12. ext4-dio- 5093 root cwd DIR 8,2 4096 2 /
  13. ext4-dio- 5093 root rtd DIR 8,2 4096 2 /
  14. ext4-dio- 5093 root txt unknown /proc/5093/exe
  15. ext4-dio- 5094 root cwd DIR 8,2 4096 2 /
  16. ext4-dio- 5094 root rtd DIR 8,2 4096 2 /
  17. ext4-dio- 5094 root txt unknown /proc/5094/exe
  18. man 9278 root cwd DIR 8,2 4096 1736705 /root
  19. man 9278 root rtd DIR 8,2 4096 2 /

4. tcpdump

       tcpdump是最廣泛使用的網絡包分析器或者包監控程序之一,它用於捕捉或者過濾網絡上指定接口上接收或者傳輸的TCP/IP包。它還有一個選項用於把捕捉到的包保存到文件裏,以便以後進行分析。在幾乎所有主要的Linux發佈裏,tcpdump都可以使用。
  1. [root@BendSha_RHEL5_5_x64 ~]# tcpdump -i eth0
  2. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  3. listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
  4. 20:40:52.811086 IP 192.168.117.129.ssh > 192.168.117.1.29750: P 499354857:499355053(196) ack 1824130863 win 89
  5. 20:40:52.811381 IP 192.168.117.1.29750 > 192.168.117.129.ssh: . ack 196 win 2051
  6. 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)
  7. 20:40:54.619500 arp who-has 192.168.117.129 (00:0c:29:ae:13:27 (oui Unknown)) tell 192.168.117.1
  8. 20:40:54.619511 arp reply 192.168.117.129 is-at 00:0c:29:ae:13:27 (oui Unknown)
  9. 20:40:54.814372 IP 192.168.117.2.domain > 192.168.117.129.46557: 1078 NXDomain 0/1/0 (99)
  10. 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命令非常的強大,這裏只展示了默認的用法,後期應用過程中可以查看幫助文檔深入挖掘。
  1. [root@BendSha_RHEL5_5_x64 ~]# netstat
  2. Active Internet connections (w/o servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State
  4. tcp 0 0 192.168.117.129:ssh 192.168.117.1:29750 ESTABLISHED
  5. tcp 0 1 192.168.117.129:53573 192.168.242.198:apc-9952 SYN_SENT
  6. Active UNIX domain sockets (w/o servers)
  7. Proto RefCnt Flags Type State I-Node Path
  8. unix 2 [ ] DGRAM 2240 @/org/kernel/udev/udevd
  9. unix 2 [ ] DGRAM 13146 @/org/freedesktop/hal/udev_event
  10. unix 16 [ ] DGRAM 12186 /dev/log
  11. unix 2 [ ] DGRAM 18551
  12. unix 2 [ ] DGRAM 17778
  13. unix 3 [ ] STREAM CONNECTED 17402 @/tmp/fam-root-
  14. unix 3 [ ] STREAM CONNECTED 17401
  15. unix 3 [ ] STREAM CONNECTED 17388 /var/run/dbus/system_bus_socket
  16. unix 3 [ ] STREAM CONNECTED 17387
  17. unix 3 [ ] STREAM CONNECTED 17385 /tmp/.X11-unix/X0
  18. unix 3 [ ] STREAM CONNECTED 17384
  19. 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也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。
  1. [root@BendSha_RHEL5_5_x64 ~]# wget http://linuxinsight.com/files/iostat-2.2.tar.gz
  2. [root@BendSha_RHEL5_5_x64 ~]# tar xvf iostat-2.2.tar.gz
  3. [root@BendSha_RHEL5_5_x64 ~]# cd iostat-2.2
  4. [root@BendSha_RHEL5_5_x64 iostat-2.2]# ls
  5. INSTALL iostat iostat.8 iostat.c LICENSE Makefile README
  6. [root@BendSha_RHEL5_5_x64 iostat-2.2]# make & make install
  7. [root@BendSha_RHEL5_5_x64 iostat-2.2]# which iostat
  8. /usr/local/bin/iostat
  9. [root@BendSha_RHEL5_5_x64 iostat-2.2]# iostat 5 5
  10. sda sdb sr0 cpu
  11. kps tps svc_t kps tps svc_t kps tps svc_t us sy wt id
  12. 43 3 3.3 15 0 3.7 0 0 4.0 0 1 0 99
  13. 14 0 3.0 0 0 0.0 0 0 0.0 0 1 0 99
  14. 1 0 18.0 0 0 0.0 0 0 0.0 0 1 0 99
  15. 0 0 0.0 0 0 0.0 0 0 0.0 0 1 0 99
  16. 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校驗和錯誤,接口活動等。
  1. [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工具系統中並不默認安裝,需要自己下載源碼包,重新編譯安裝,使用過程相對比較簡單。
  1. [root@BendSha_RHEL5_5_x64 opt]# wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
  2. [root@BendSha_RHEL5_5_x64 opt]# tar xvf ifstat-1.1.tar.gz
  3. [root@BendSha_RHEL5_5_x64 opt]# cd ifstat-1.1
  4. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# ./configure
  5. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# make & make install
  6. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# which ifstat
  7. /usr/local/bin/ifstat
  8. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# ifstat -tT
  9. Time eth0 Total
  10. HH:MM:SS KB/s in KB/s out KB/s in KB/s out
  11. 00:46:42 0.06 0.20 0.06 0.20
  12. 00:46:43 0.06 0.15 0.06 0.15
  13. 00:46:44 0.06 0.15 0.06 0.15
  14. 00:46:45 0.12 0.15 0.12 0.15
  15. 00:46:46 0.06 0.15 0.06 0.15
  16. 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、開關、路由器和打印機。它可以危險警告並指出系統/服務器是否有異常,這可以間接幫助你在問題發生之前採取搶救措施。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章