Linux系統(tǒng)資源監(jiān)控命令簡介
Linux 系統(tǒng)由若干主要物理組件組成,如CPU、內(nèi)存、網(wǎng)卡和存儲設(shè)備。要有效地管理Linux 環(huán)境,您應(yīng)該能夠以合理的精度測量這些資源的 各種指標(biāo)—每個組件處理多少資源、是否存在瓶頸等。下面我們介紹下linux資源監(jiān)控有關(guān)的一些命令。
查看系統(tǒng)發(fā)行版
root@cf0c6032ba2f:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
top(cpu)
Cpu(s)這一行提供了當(dāng)前CPU運行情況的信息:
Cpu(s): 11.4%us, 29.6%sy, 0.0%ni, 58.3%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st
- us:用戶CPU時間 運行非優(yōu)雅的用戶進(jìn)程所占CPU時間的百分比(優(yōu)雅,英文“nicing”,是指一個進(jìn)程允許你根據(jù)其他進(jìn)程更改優(yōu)先級)。
- sy:系統(tǒng)CPU時間 運行內(nèi)核和內(nèi)核進(jìn)程所占CPU時間的百分比。
- ni:優(yōu)雅CPU時間 如果更改過一些進(jìn)程的優(yōu)先級,這個指標(biāo)能夠告訴你它們所占CPU時間的百分比。
- id:CPU空閑時間 這是你希望具備很高數(shù)值的度量指標(biāo)中的一個。它代表了CPU的空閑時間比。如果系統(tǒng)運行緩慢,但是這個指標(biāo)特別高,那么你就可以確定問題的原因不是高CPU負(fù)載。
- wa:I/O等待 這個數(shù)字代表了CPU時間用在等待執(zhí)行I/O操作所占的百分比。當(dāng)你解決運行緩慢的系統(tǒng)問題的時候,這是一個非常有價值的度量指標(biāo),因為如果這個數(shù)值很低,那么就能輕松排除磁盤或者網(wǎng)絡(luò)I/O的問題。
- hi:硬件中斷 CPU用于處理硬件中斷所占時間的百分比。
- si:軟件中斷 CPU用在處理軟件中斷所占時間的百分比。
- st:流逝的時間 如果你正在運行虛擬機(jī),這個度量指標(biāo)會告訴你虛擬機(jī)中執(zhí)行的其他任務(wù)所占CPU時間的百分比。
查看cpu個數(shù)
判斷Linux服務(wù)器CPU情況的依據(jù)如下:
- 具有相同core id的CPU是同一個core的超線程。
- 具有相同physical id的CPU是同一個CPU封裝的線程或核心。
- 顯示物理CPU個數(shù)的命令如下所示:
- cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
- 顯示每個物理CPU中core的個數(shù)(即核數(shù))的命令如下所示:
- cat /proc/cpuinfo | grep "cpu cores" | uniq
命令結(jié)果顯示如下所示: cpu cores : 1
- 顯示邏輯CPU的個數(shù)的命令如下所示:
- cat /proc/cpuinfo | grep "processor" | wc -l
命令結(jié)果顯示如下所示: 4 其實大家從這里就可以看出來,按理說應(yīng)有如下等式: 物理CPU個數(shù)×核數(shù)=邏輯CPU的個數(shù) 如果不相等的話,則表示你的服務(wù)器CPU支持超線程技術(shù)。我們在配置服務(wù)器的應(yīng)用時,應(yīng)以服務(wù)器的邏輯CPU個數(shù)為準(zhǔn)。
uptime(平均負(fù)載)
有時候我們會覺得系統(tǒng)響應(yīng)速度很慢,但是又找不到原因,這時就要查平均負(fù)載了,看它是否有大量的進(jìn)程在排隊等待。特定時間間隔內(nèi)運行隊列中的平均進(jìn)程數(shù)可以反映系統(tǒng)的繁忙程度,所以我們通常會在自己的網(wǎng)站或系統(tǒng)變慢時第一時間查系統(tǒng)的負(fù)載,即CPU的平均負(fù)載。究竟應(yīng)該如何查看平均負(fù)載呢?最簡單的命令是uptime,如下所示:
- uptime
命令顯示結(jié)果如下:
- 11:31:11 up 11 days, 19:01, 2 users, load average: 0.02, 0.01, 0.00
目前的主流服務(wù)器都是雙四核,有相當(dāng)強悍的CPU,提供一般的應(yīng)用服務(wù)時,不必?fù)?dān)心Linux系統(tǒng)的負(fù)載。
這里需要注意的是load average的輸出值,這三個值的大小一般不能大于系統(tǒng)邏輯CPU的個數(shù),例如,本輸出中系統(tǒng)有4個邏輯CPU,如果load average的三個值長期大于4,說明CPU很繁忙,負(fù)載很高,可能會影響系統(tǒng)性能,但是偶爾大于4時,不用擔(dān)心,一般不會影響系統(tǒng)性能。相反,如果load average的輸出值小于CPU的個數(shù),則表示CPU還有空閑的,比如本例中的輸出,CPU是比較空閑的。
這時候可以結(jié)合vmstat命令來判斷我們的系統(tǒng)是否過于繁忙,如果確定很繁忙,就要考慮是否更換服務(wù)器或增加CPU的個數(shù)了??偨Y(jié)如下: 如果r經(jīng)常大于3或4,且id經(jīng)常少于50,則表示CPU的負(fù)荷很重。
top(mem)
- Mem: 1024176k total, 997408k used, 26768k free, 85520k buffers
- Swap: 1004052k total, 4360k used, 999692k free, 286040k cached
第1行告訴我們有多少物理內(nèi)存可用、占用了多少內(nèi)存、空閑多少內(nèi)存以及緩存了多少內(nèi)存。第2行為我們提供了相似的信息,交換存儲以及Linux文件緩存使用了多少RAM。
想要找出進(jìn)程到底真正使用了多少RAM,你必須刨除RAM中的文件緩存。正如你所看到的示例代碼一樣,在已用的997408KB的RAM中,有286040KB的RAM被文件緩存占用,所以這就是說實際上僅使用了711368KB的RAM。 辨別是否耗盡了RAM的一個好方法是查看文件緩存。
如果實際用的內(nèi)存減去文件緩存的值很大,同時交換存儲的值也很高,很可能的確有內(nèi)存問題。
free -m(內(nèi)存)
顯示的是當(dāng)前內(nèi)存的使用情況,m的意思是以M個字節(jié)來顯示內(nèi)容,此命令只在Linux系統(tǒng)下有效,在FreeBSD下是沒有此命令的。命令顯示結(jié)果如下所示:
- total used free shared buffers cached
- Mem: 3949 1397 2551 0 268 917
- -/+ buffers/cache: 211 3737
- Swap: 8001 0 8001
上述結(jié)果中各個參數(shù)的詳細(xì)說明如下:
- total:內(nèi)存總數(shù)。
- used:已經(jīng)使用的內(nèi)存數(shù)。
- free:空閑的內(nèi)存數(shù)。
- shared:多個進(jìn)程共享的內(nèi)存總額。
- buffers buffer cache和cached page cache:磁盤緩存的大小。
- -buffers/cache:(已用)的內(nèi)存數(shù),即used-buffers-cached。
- +buffers/cache:(可用)的內(nèi)存數(shù),即free + buffers + cached。 由此得出結(jié)論,可用內(nèi)存的計算公式為可用內(nèi)存=free+buffers+cached 即 2551MB+268MB+917MB=3737MB 注意 上面等式兩邊的數(shù)值并不相等,但這個沒關(guān)系,-m參數(shù)其實是以整數(shù)數(shù)值來取舍的。大家如果對這個運算結(jié)果有懷疑,可以嘗試不帶-m參數(shù)來觀看free命令顯示的結(jié)果,這樣就會一目了然了。
可見-buffers/cache反映的是被程序?qū)崒嵲谠谡加玫膬?nèi)存,而+buffers/cache反映的是可以挪用的內(nèi)存總數(shù)。
vmstat(io)
vmstat是一個相當(dāng)全面的性能分析工具,通過它可以觀察系統(tǒng)的進(jìn)程狀態(tài)、內(nèi)存使用情況、虛擬內(nèi)存的使用情況、磁盤的I/O、中斷、上下文切換、CPU的使用情況等性能信息,建議熟練掌握此命令。
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 0 519024 74732 4606568 0 0 3 9 5 10 27 5 68 0 2 0 0 519664 74732 4606568 0 0 0 0 1847 1244 20 17 63 0 1 0 0 517296 74732 4606568 0 0 0 284 2092 1617 37 17 47 0 3 0 0 515440 74732 4606568 0 0 0 164 1620 718 26 17 57 0
其中:
(1)procs r:等待運行的進(jìn)程數(shù)。 b:處于非中斷睡眠狀態(tài)的進(jìn)程數(shù)。
(2)memory swpd:虛擬內(nèi)存使用情況(單位:KB)。 free:空閑的內(nèi)存(單位:KB)。 buff:被用來作為緩存的內(nèi)存數(shù)量(單位:KB)。
(3)swap si:從磁盤交換到內(nèi)存的交換頁數(shù)量(單位:KB/s)。 so:從內(nèi)存交換到磁盤的交換頁數(shù)量(單位:KB/s)。
(4)io bi:發(fā)送到塊設(shè)備的塊數(shù)(單位:塊/秒)。 bo:從塊設(shè)備接收到的塊數(shù)(單位:塊/秒)。
(5)system in:每秒的中斷數(shù),包括時鐘中斷。 cs:每秒的環(huán)境(上下文)切換次數(shù)。 (6)cpu 按CPU的總使用百分比來顯示。 us:CPU使用時間。 sy:CPU系統(tǒng)使用時間。 id:閑置時間。
標(biāo)準(zhǔn)情況下r和b值應(yīng)該為:r<5,b≈0。 如果user%+sys%<70%則表示系統(tǒng)性能較好,如果user%+sys%>=85%或以上,這表示系統(tǒng)性能比較糟糕,這時就要對系統(tǒng)進(jìn)行全方面檢查了。其中: user%表示CPU處在用戶模式下的時間百分比。 sys%表示CPU處在系統(tǒng)模式下的時間百分比。
ps auxf(進(jìn)程)
要查看系統(tǒng)中用戶正在運行的所有進(jìn)程,可以在ps命令后面使用以下選項:
a(表示所有用戶)
u(以面向用戶的格式顯示,或顯示擁有每個進(jìn)程的用戶)
x(沒有控制tty或終端屏幕的進(jìn)程,“顯示每個進(jìn)程”的另一種方法)
- ps aux
請注意"ps -aux"不同于"ps aux"。POSIX和UNIX的標(biāo)準(zhǔn)要求"ps -aux"打印用戶名為"x"的用戶的所有進(jìn)程,以及打印所有將由-a選項選擇的過程。如果用戶名為"x"不存在,ps的將會解釋為"ps aux",而且會打印一個警告。這種行為是為了幫助轉(zhuǎn)換舊腳本和習(xí)慣。它是脆弱的,即將更改,因此不應(yīng)依賴。
要查看進(jìn)程樹,除了使用上一節(jié)用過的a、u和x選項,還要加上個f(其名稱源于ASCII art forest)選項。
- ps auxf
ps -ef(進(jìn)程)
ps aux是用BSD格式來顯示結(jié)果.ps -ef是用全格式的System V格式,顯示出來就是帶全路徑的進(jìn)程名.
一個影響使用的區(qū)別是aux會截斷command列,而-ef不會。因此當(dāng)需要結(jié)合grep的時候,優(yōu)先選擇-ef命令,避免誤判
netstat(網(wǎng)絡(luò))
netstat命令的功能是顯示網(wǎng)絡(luò)連接、路由表和網(wǎng)絡(luò)接口的信息,可以讓用戶得知目前都有哪些網(wǎng)絡(luò)連接正在運作。 下面是它的重要參數(shù),以及詳細(xì)的說明:
-A:顯示任何關(guān)聯(lián)的協(xié)議控制塊的地址。主要用于調(diào)試。
-a:顯示所有套接字的狀態(tài)。在一般情況下不顯示與服務(wù)器進(jìn)程相關(guān)聯(lián)的套接字。
-i:顯示自動配置接口的狀態(tài)。那些在系統(tǒng)初始引導(dǎo)后配置的接口狀態(tài)不在輸出之列。
-m:打印網(wǎng)絡(luò)存儲器的使用情況。
-n:打印實際地址,而不是對地址的解釋或顯示主機(jī)、網(wǎng)絡(luò)名之類的符號。
-r:打印路由選擇表。
-f address:family會對于給出名字的地址簇打印統(tǒng)計數(shù)字和控制塊信息。到目前為止,它唯一支持的地址簇是inet。
-I interface:表示只打印給出名字的接口狀態(tài)。
-p protocol-name:表示只打印給出名字的協(xié)議的統(tǒng)計數(shù)字和協(xié)議控制塊信息。
-s:打印每個協(xié)議的統(tǒng)計數(shù)字。
-t:表示在輸出顯示中用時間信息代替隊列長度信息。
我們用得最多的,也是最習(xí)慣的參數(shù)有兩個,即netstat-an,如下所示:
- netstat -an | grep –v unix
lsof(文件)
lsof(list open files)是一個列出當(dāng)前系統(tǒng)打開文件的工具。在UNIX環(huán)境下,任何事物都是以文件的形式存在的,通過文件不僅僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng)絡(luò)連接和硬件。所以像傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報協(xié)議(UDP)套接字等,系統(tǒng)在后臺都為該應(yīng)用程序分配了一個文件描述符,無論這個文件的本質(zhì)如何,該文件描述符都會為應(yīng)用程序與基礎(chǔ)操作系統(tǒng)之間的交互提供通用接口。因為應(yīng)用程序打開文件的描述符列表提供了大量關(guān)于這個應(yīng)用程序的信息,因此通過lsof工具查看這個列表對系統(tǒng)監(jiān)測,以及排錯非常有幫助。順便提一下,這工具首先出現(xiàn)在UNIX系統(tǒng)中,后才移植到Linux平臺下。
工作中用得最多的是-i參數(shù),可以用它來查看特定端口的情況,比如,我可以用lsof -i:22查看22端口是由哪些程序占用的。
fdisk -l(硬盤分區(qū))
查看硬盤及分區(qū)信息,如下所示: fdisk –l 命令顯示結(jié)果如下:
Disk /dev/sda: 160.0 GB, 160040803840 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 13 104391 83 Linux / /dev/sda2 14 3200 25599577+ 83 Linux /dev/sda3 3201 3582 3068415 82 Linux swap / Solaris /dev/sda4 3583 19457 127515937+ 5 Extended /dev/sda5 3583 19457 127515906 83 Linux
以上結(jié)果表明這是一塊160GB的服務(wù)器硬盤。
df(硬盤空間)
檢查文件系統(tǒng)的磁盤空間占用情況,命令如下所示:
df –h 命令顯示結(jié)果如下:
Filesystem Size Used Avail Use% Mounted on /dev/sda2 24G 5.9G 17G 26% /
/dev/sda5 118G 8.8G 103G 8% /data
/dev/sda1 99M 20M 75M 21% /boot
tmpfs 859M 0 859M 0% /dev/shm
du(目錄大小)
查看Linux系統(tǒng)中某目錄的大小,這在工作中經(jīng)常會遇到??梢允褂萌缦旅畈榭矗?/p>
- du -sh 目錄名
例如du -sh /data 命令顯示結(jié)果如下所示: 8.6G /data/ 檢查是否有分區(qū)使用率(Use%)過高(比如超過90%),如發(fā)現(xiàn)某個分區(qū)空間接近用完,可以進(jìn)入該分區(qū)的掛載點,用以下命令找出占用空間最多的文件或目錄,然后按照從大到小的順序,正好可以找出系統(tǒng)中占用最多空間的前十個文件或目錄:
- du -sh * | sort -hr | head -n 10
doc