Linux中經常使用的服務器監控命令

若是你的Linux系統默認就是進入GUI,你能夠調一調配置,讓他默認進入runlevel 3。具體方法就是:html

  • 1 打開一個終端,su到root帳號mysql

  • 2 用你喜歡的編輯器(vi/emacs/...)打開/etc/inittab文件linux

  • 3 查找initdefault關鍵字,將「id:5:initdefault:」修改成「id:3:initdefault:」ios

若是系統中根本就沒有/etc/inittab文件的話,也不要緊,直接建立這個文件,並添加新的一行「id:3」。這樣的話,你再重啓服務器,便會默認進入命令行狀態。固然,若是你只想在臨時進入命令行狀態,那麼直接在終端中輸入「init 3」就行了。nginx

至此,咱們的命令行準備好了,下面就能夠開始經過強大的命令來查看「到底服務器裏發生了什麼」:sql

[01    - iostat       ]  [02/03 - meminfo/free ]  [04    - mpstat       ]  [05    - netstat      ]  [06    - nmon         ]  [07    - pmap         ]  [08/09 - ps/pstree    ]  [10    - sar          ]  [11    - strace       ]  [12    - tcpdump      ]  [13    - top          ]  [14    - uptime       ]  [15    - vmstat       ]  [16    - wireshark    ]

[01 - iostat]shell

iostat命令顯示的是你的存儲系統的細節狀態。你一般能夠用這個命令去檢測你的存儲設備是否工做正常,api

徹底能夠在用戶抱怨服務器慢以前,經過這個命令發現系統IO方面的問題。服務器

以下能夠看到iostat既能夠顯示CPU使用狀況,也能夠看到每一個磁盤的IO狀況。網絡

# iostat 1  Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012年12月22日 _i686_ (4 CPU)     avg-cpu: %user %nice %system %iowait %steal %idle  0.55 0.00 0.03 0.02 0.00 99.40     Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn  sdb 0.41 2.61 5.76 2558664 5653872  sda 0.24 0.80 4.12 784650 4038344

[02/03 - meminfo/free]

meminfo提供了很詳細的內存使用情況。能夠直接用cat命令查看:

cat /proc/meminfo

固然meminfo裏包含了太多細節,你能夠直接使用free命令來查看有關內存的綜述。

# free -m  total used free shared buffers cached  Mem: 1513 1429 83 0 343 836  -/+ buffers/cache: 249 1263  Swap: 0 0 0

[04 - mpstat]

mpstat用在多處理器的服務器上,用來顯示每個CPU的狀態。

另外,mpstat也會顯示全部處理器的平均情況。

你能夠設置顯示每一個服務器的CPU統計信息,或者每一個處理的CPU統計信息。

# mpstat -P ALL  Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012年12月22日 _i686_ (4 CPU)     17時46分35秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle  17時46分35秒 all 0.55 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.40  17時46分35秒 0 0.84 0.00 0.04 0.03 0.00 0.01 0.00 0.00 99.08  17時46分35秒 1 0.51 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.44  17時46分35秒 2 0.45 0.00 0.02 0.01 0.00 0.00 0.00 0.00 99.51  17時46分35秒 3 0.40 0.00 0.02 0.01 0.00 0.00 0.00 0.00 99.56     # mpstat -P 0  Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012年12月22日 _i686_ (4 CPU)     17時46分39秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle  17時46分39秒 0 0.84 0.00 0.04 0.03 0.00 0.01 0.00 0.00 99.08

其中各個域的含義簡述以下:

  • 1 CPU:處理器編號,若是爲all,則此行表示的是全部處理器的統計平均值

  • 2 %usr:用戶態的CPU利用率

  • 3 %nice:具備調度優先級的用戶態CPU利用率

  • 4 %sys:內核態CPU利用率(此值不包括響應硬件中斷和軟件中斷的時間)

  • 5 %iowait:處理IO請求致使CPU處於IDLE狀態的時間百分比

  • 6 %irq:CPU響應硬件中斷的時間比率

  • 7 %soft:CPU響應軟件中斷的時間比率

  • 8 %steal:當虛擬機監控器在服務於其餘虛擬處理器時,虛擬CPU的被動等待時間比率

  • 9 %guest:運行一個虛擬處理器所消耗的CPU時間比率

[05 - netstat]

netstat命令,是Linux系統管理員幾乎天天都會用到的命令(它已經逐步在被ss命令取代),他能夠顯示不少有關網絡方面的信息,例如socket使用狀況、路由狀況、網卡狀況、協議狀況、網絡流量統計等等。

一些經常使用的netstat選項包括:

  • -a : 顯示全部socke信息

  • -r : 顯示路由信息

  • -i : 顯示網卡藉口統計

  • -s : 顯示網絡協議統計

[06 - nmon]

nmon是Nigel’s Monitor的縮寫,它是一個很知名的監視Linux系統性能的工具。

nmon能夠查看處處理器利用率、內存使用率、運行隊列信息、磁盤IO統計、網絡IO統計、換頁統計等。

你能夠經過一個基於curses的類GUI界面來查看到上述信息。

nmon監控工具

[07 - pmap]

pmap命令能夠顯示進程佔用的內存量。

你能夠經過pmap找到那個佔用內存量最多的進程。

以下就是nignx主進程所佔用的內存狀況:

# pmap 2395|head -n 10  2395: nginx: master process ./sbin/nginx  00110000 240K r-x-- /lib/libgssapi_krb5.so.2.2  0014c000 4K ----- /lib/libgssapi_krb5.so.2.2  0014d000 4K r---- /lib/libgssapi_krb5.so.2.2  0014e000 4K rw--- /lib/libgssapi_krb5.so.2.2  0014f000 12K r-x-- /lib/libcom_err.so.2.1  00152000 4K r---- /lib/libcom_err.so.2.1  00153000 4K rw--- /lib/libcom_err.so.2.1  00154000 48K r-x-- /lib/libnss_files-2.12.so  00160000 4K r---- /lib/libnss_files-2.12.so  ...  b78e4000 20K rw--- [ anon ]  b78f3000 4K rw-s- /dev/zero (deleted)  b78f4000 4K rw--- [ anon ]  bfeaa000 84K rw--- [ stack ]  total 7280K

[08/09 - ps/pstree]

ps和pstree在Linux系統裏是一對好兄弟,它們都是用來列出處於運行狀態的進程的列表的。

ps告訴咱們每一個進程使用的內存量以及所消耗的CPU時間。

pstree則會告訴咱們進程間的父子關係,以下即是mysql的一些父子關係信息:

# pstree -p 1829  mysqld_safe(1829)───mysqld(2307)─┬─{mysqld}(2309)                                   ├─{mysqld}(2310)                                   ├─{mysqld}(2311)                                   ├─{mysqld}(2312)                                   ├─{mysqld}(2313)                                   ├─{mysqld}(2314)                                   ├─{mysqld}(2315)                                   ├─{mysqld}(2316)                                   ├─{mysqld}(2317)                                   ├─{mysqld}(2318)                                   ├─{mysqld}(2320)                                   ├─{mysqld}(2321)                                   ├─{mysqld}(2322)                                   ├─{mysqld}(2323)                                   ├─{mysqld}(2325)                                   ├─{mysqld}(2544)                                   ├─{mysqld}(2548)                                   ├─{mysqld}(7912)                                   ├─{mysqld}(7914)                                   ├─{mysqld}(7916)                                   ├─{mysqld}(24689)                                   ├─{mysqld}(27329)                                   └─{mysqld}(27331)

[10 - sar]

sar命令堪稱系統監控工具裏的瑞士***。

sar命令其實是由三個程序組成的,即sar(用於顯示數據)、sa1(用於採集數據)和sa2(用於存儲數據)。

sar能夠涵蓋到CPU利用率信息、內存換頁信息、網絡IO傳輸信息、進程建立行爲和存儲設備行爲。

sar和nmon的最大區別在於,sar更適用於長期的系統監控,而nmon則更適用於快速查看信息。

若是但願更詳細的學習sar命令,能夠閱讀《sar訪談》-linux命令五分鐘系列之二十九

[11 - strace]

starce常常被用來做爲追查程序問題的工具,但他的功能遠非如此。

它能夠解析和記錄進程的系統調用行爲,這使得strace成爲了一個很是有用的診斷、調查和糾錯工具。

舉例來講,你能夠適用strace來追查到一個程序在啓動之初所需加載的配置文件信息。

固然,strace也有它自身的缺陷,那就是strace會嚴重拖慢調查對象(某個進程)的性能和運行速度。

順便推薦一篇很是好的strace的文章:《strace使用詳解

另外,若是你使用MAC,strace的替代品是truss。

[12 - tcpdump]

tcpdump是一個簡單的、好用的網絡監控工具。它的網絡協議分析能力使得它可以看清網絡中到底發生了什麼,若是你但願更細節的調查的話,能夠考慮適用功能更爲強大的wireshark工具。

tcpdump的系列教程「在這裏」。

[13 - top]

top命令能夠顯示系統中的進程信息。默認狀況下,top會按照CPU使用率從高到低來顯示系統中的進程,而且每5秒刷新一次排行榜。

固然,你也可讓top按照PID、進程壽命、CPU耗時、內存消耗等維度對進程進行排序。(我常用的是P和M快捷鍵,分別是按CPU利用率排序、按內存使用量排序)

經過top命令,你能夠很快的發現那些失去控制或不符合預期的進程。

[14 - uptime]

經過uptime命令能夠查看系統已經運行了多久,能夠統計當前處於登錄狀態的用戶數量,還能夠顯示當前服務器的負載狀況。

# uptime  18:35:17 up 11 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00

[15 - vmstat]

大多數狀況下,你可使用vmstat命令去查看系統的虛擬內存狀況,由於Linux一般會經過虛擬內存來得到更好的存儲性能。

若是你的程序佔用了大量了內存,那麼系統會進行內存頁換出的動做,以便把程序從內存中移動到系統SWAP空間中,也就是硬盤中。

若是系統的內存頁的換入換出動做頻度超過一個臨界值,那麼這種狀態被叫作「Thrashing」。當系統處於thrashing狀態時,性能會急劇降低。

vmstat命令即可以幫助人們及時發現此類問題,找出那個拖慢系統的元兇。

# vmstat 1  procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----  r b swpd free buff cache si so bi bo in cs us sy id wa st  2 0 0 57484 356864 861332 0 0 0 1 7 3 1 0 99 0 0  0 0 0 57468 356864 861360 0 0 0 0 336 145 6 1 94 0 0  0 0 0 57468 356864 861360 0 0 0 0 43 51 0 0 100 0 0  0 0 0 57468 356864 861360 0 0 0 16 51 62 0 0 100 0 0

[16 - wireshark]

Wireshark的前身叫作Ethereal,咱們能夠認爲wireshark是tcpdump命令的大師兄,由於wireshark會更爲專業,也具備更高級的協議分析和統計能力。

Wireshark同時具備GUI界面和shell藉口。

若是你是一位資深的網絡管理員,那麼你必定使用過ethereal。而若是你正在使用wireshark/ethereal,那麼我推薦你閱讀Chris Sander的一本很是好的書《Practical Packet Analysis》。

謝謝!

原文連接:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.techug.com%2F

相關文章
相關標籤/搜索