{eval=Array;=+count(Array);}
當(dāng)遇到一個系統(tǒng)性能問題時,如何利用登錄的前60秒對系統(tǒng)的性能情況做一個快速瀏覽和分析,主要包括如下10個工具,這是一個非常有用且有效的命工具列表。本文將詳細介紹這些命令及其擴展選項的意義,及其在實踐中的作用。并利用一個實際出現(xiàn)問題的例子,來驗證這些套路是不是可行,下面工具的屏幕輸出結(jié)果都來自這個出現(xiàn)題的系統(tǒng)。
# 系統(tǒng)負(fù)載概覽uptime
# 系統(tǒng)日志dmesg | tail
# CPUvmstat 1mpstat -P ALL 1pidstat 1
# Diskiostat -xz 1
# 內(nèi)存free -m
# 網(wǎng)絡(luò)sar -n DEV 1sar -n TCP,ETCP 1
# 系統(tǒng)概覽top
上面的工具都基于內(nèi)核提供給用戶態(tài)的統(tǒng)計,并以計數(shù)器形式展示,是快速排查時的利器。對于應(yīng)用和系統(tǒng)的進一步跟蹤(tracing),則需要利用strace和systemtap,不在本文的范疇。
注意:
1. uptime[root@nginx1 ~]# uptime 15:38:10 up 43 days, 3:54, 1 user, load average: 1.13, 0.41, 0.18
uptime是快速查看load average的方法,在Linux中l(wèi)oad average包括處于runnable和uninterruptable狀態(tài)的進程總數(shù),runnable狀態(tài)的進程包括在CPU上運行的進程和已經(jīng)ready to run在等待CPU時間的進程;uninterruptable狀態(tài)的進程是在等待一些I/O訪問,比如等待disk的返回。Load average沒有根據(jù)系統(tǒng)的CPU數(shù)量做格式化,所以load average 1表示單CPU系統(tǒng)在對應(yīng)時間段內(nèi)(1分鐘, 5分鐘, 15分鐘)一直負(fù)載飽和,而在4 CPU的系統(tǒng)中,load average 1表示有75%的時間在idle。
Load average體現(xiàn)了一個high level的負(fù)載概覽,但是可能需要和別的工具一起來使用以了解更多信息,比如處于runable和uninterruptable的實時進程數(shù)量分別是多少,可以用下面將介紹到的vmstat來查看。1分鐘,5分鐘,15分鐘的負(fù)載平均值同時能體現(xiàn)系統(tǒng)負(fù)載的變化情況。例如,如果你要檢查一個問題服務(wù)器,當(dāng)你看到1分鐘的平均負(fù)載值已經(jīng)遠小于15分鐘的平均負(fù)載值,則意味這也許你登錄晚了點,錯過了現(xiàn)場。用top或者w命令,也可以看到load average信息。
上面示例中最近1分鐘內(nèi)的負(fù)載比15分鐘內(nèi)的負(fù)載高了不少 (因為是個測試的例子,1.13可以看作明顯大于0.18,但是在生產(chǎn)系統(tǒng)上這不能說明什么)。
2. dmesg | tail
[root@nginx1 ~]# dmesg | tail [3128052.929139] device eth0 left promiscuous mode [3128104.794514] device eth0 entered promiscuous mode [3128526.750271] device eth0 left promiscuous mode [3537292.096991] device eth0 entered promiscuous mode [3537295.941952] device eth0 left promiscuous mode [3537306.450497] device eth0 entered promiscuous mode [3537307.884028] device eth0 left promiscuous mode [3668025.020351] bash (8290): drop_caches: 1 [3674191.126305] bash (8290): drop_caches: 2 [3675304.139734] bash (8290): drop_caches: 1
dmesg用于查看內(nèi)核緩沖區(qū)存放的系統(tǒng)信息。另外查看/var/log/messages也可能查看出服務(wù)器系統(tǒng)方面的某些問題。
上面示例中的dmesg沒有特別的值得注意的錯誤。
3. vmstat 1
vmstat簡介:
結(jié)果中列的含義:
Procs(進程)
r: The number of runnable processes (running or waiting for run time).b: The number of processes in uninterruptible sleep.
注釋:r表示在CPU上運行的進程和ready等待運行的進程總數(shù),相比load average, 這個值更能判斷CPU是否飽和(saturation),因為它沒有包括I/O。如果r的值大于CPU數(shù)目,即達到飽和。
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.
Swap
si: Amount of memory swapped in from disk (/s).so: Amount of memory swapped to disk (/s).
注釋:swap-in和swap-out的內(nèi)存。如果是非零,說明主存中的內(nèi)存耗盡。
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.
根據(jù)user+system時間,可以判斷CPUs是否繁忙。如果wait I/O一直維持一定程度,說明disk有瓶頸,這時CPUs是"idle"的,因為任務(wù)都被block在等待disk I/O中。wait I/O可以被視為另一種形式的CPU idle,并且說明idle的原因就是在等待disk I/O的完成。
處理I/O需要花費system time,在將I/O提交到disk driver之前可能要經(jīng)過remap, split和merge等操作,并被I/O scheduler調(diào)度到request queue。如果處理I/O時平均system time比較高,超過20%,則要進一步分析下,是不是內(nèi)核處理I/O時的效率有問題。
如果用戶空間的CPU使用率接近100%,不一定就代表有問題,可以結(jié)合r列的進程總數(shù)量看下CPU的飽和程度。
上面示例可以看到在CPU方面有一個明顯的問題。user+system的CPU一直維持在50%左右,并且system消耗了大部分的CPU。
4. mpstat -P ALL 1
mpstat可以打印按照CPU的分解,可以用來檢查不不均衡的情況。
上面示例結(jié)果可以印證vmstat中觀察到的結(jié)論,并且可以看到服務(wù)器有2個CPU,其中CPU 1的使用率一直維持在100%,而CPU 0并沒有什么負(fù)載。CPU 1的消耗主要在內(nèi)核空間,而非用戶空間。
5. pidstat 1
默認(rèn)pidstat類似于top按照進程的打印方式,不過是以滾動打印的方式,和top的清屏方式不同。利用-p可以打出指定進程的信息,-p ALL可以打出所有進程的信息。如果沒有指定任何進程默認(rèn)相當(dāng)于-p ALL,但是只打印活動進程的信息(統(tǒng)計非0的數(shù)據(jù))。
pidstat不只可以打印進程的CPU信息,還可以打印內(nèi)存,I/O等方面的信息,如下是比較有用的信息:
上面示例中可以明確得看到是nc這個進程在消耗CPU 1 100%的CPU。因為測試系統(tǒng)里消耗CPU的進程比較少,所以一目了然,在生產(chǎn)系統(tǒng)中pidstat應(yīng)該能輸出更多正在消耗CPU的進程情況。
6. iostat -zx 1
了解塊設(shè)備(block device, 這里是disk)負(fù)載和性能的工具。主要看如下指標(biāo):
如果存儲設(shè)備是一個對應(yīng)多個后端磁盤的邏輯磁盤,那么100%使用率可能僅僅表示一些I/O在處理時間占比達到100%,其他后端磁盤不一定也到達了飽和。請注意磁盤I/O的性能問題并不一定會造成應(yīng)用的問題,很多技術(shù)都是使用異步I/O操作,所以應(yīng)用不一定會被block或者直接受到延遲的影響。
7. free -m# free -m total used free shared buff/cache available Mem: 7822 129 214 0 7478 7371 Swap: 0 0 0
查看內(nèi)存使用情況。倒數(shù)第二列:
Linux用free memory來做cache, 當(dāng)應(yīng)用需要時,這些cache可以被回收。比如kswapd內(nèi)核進程做頁面回收時可能回收cache;另外手動寫/proc/sys/vm/drop_caches也會導(dǎo)致cache回收。
上面示例中free的內(nèi)存只有129M,大部分memory被cache占用。但是系統(tǒng)并沒有問題。
8. sar -n DEV 1
輸出指標(biāo)的含義如下:
這個工具可以查看網(wǎng)絡(luò)接口的吞吐量,特別是上面藍色高亮的rxkB/s和txkB/s,這是網(wǎng)絡(luò)負(fù)載,也可以看是否達到了limit。
9. sar -n TCP,ETCP 1
輸出指標(biāo)的含義如下:
上述藍色高亮的3個指標(biāo):active/s, passive/s和retrans/s是比較有代表性的指標(biāo)。
10. top
# top Tasks: 79 total, 2 running, 77 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.0 us, 44.1 sy, 0.0 ni, 49.6 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 8010456 total, 7326348 free, 132296 used, 551812 buff/cache KiB Swap: 0 total, 0 free, 0 used. 7625940 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4617 root 20 0 44064 2076 1544 R 100.0 0.0 16:27.23 nc 13634 nginx 20 0 121192 3864 1208 S 0.3 0.0 17:59.85 nginx 1 root 20 0 125372 3740 2428 S 0.0 0.0 6:11.53 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.60 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:17.92 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:03.21 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 31:47.62 rcu_sched 10 root rt 0 0 0 0 S 0.0 0.0 0:10.00 watchdog/0
top是一個常用的命令,包括了多方面的指標(biāo)。缺點是沒有滾動輸出(rolling output),不可復(fù)現(xiàn)問題發(fā)生時不容易保留信息。對于信息保留,用vmstat或者pidstat等能夠提供滾動輸出的工具會更好。
示例的問題?
在上面利用工具排查的過程中,我們可以在非常短的時間內(nèi)快速得到如下結(jié)論:
整個排查過程把系統(tǒng)的問題定位到了進程級別,并且能排除一些可能性 (Disk I/O和內(nèi)存)。接下來就是進一步到進程級別的排查,不屬于本文的覆蓋范圍,有時間再進一步演示。
1 cpu性能評估
Cpu是影響Linux性能的主要因素之一,下面先介紹幾個查看CPU性能的命令。
1.1 vmstat命令
該命令可以顯示關(guān)于系統(tǒng)各種資源之間相關(guān)性能的簡要信息,這里我們主要用它來看CPU的一個負(fù)載情況。
下面是vmstat命令在某個系統(tǒng)的輸出結(jié)果:
[root@node1 ~]# vmstat 2 3
procs ———–memory———- —swap– —–io—- –system– —–cpu——
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0
0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0
0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0
對上面每項的輸出解釋如下:
l procs
? r列表示運行和等待cpu時間片的進程數(shù),這個值如果長期大于系統(tǒng)CPU的個數(shù),說明CPU不足,需要增加CPU。
? b列表示在等待資源的進程數(shù),比如正在等待I/O、或者內(nèi)存交換等。
l memory
? swpd列表示切換到內(nèi)存交換區(qū)的內(nèi)存數(shù)量(以k為單位)。如果swpd的值不為0,或者比較大,只要si、so的值長期為0,這種情況下一般不用擔(dān)心,不會影響系統(tǒng)性能。
? free列表示當(dāng)前空閑的物理內(nèi)存數(shù)量(以k為單位)
? buff列表示buffers cache的內(nèi)存數(shù)量,一般對塊設(shè)備的讀寫才需要緩沖。
? cache列表示page cached的內(nèi)存數(shù)量,一般作為文件系統(tǒng)cached,頻繁訪問的文件都會被cached,如果cache值較大,說明cached的文件數(shù)較多,如果此時IO中bi比較小,說明文件系統(tǒng)效率比較好。
l swap
? si列表示由磁盤調(diào)入內(nèi)存,也就是內(nèi)存進入內(nèi)存交換區(qū)的數(shù)量。
? so列表示由內(nèi)存調(diào)入磁盤,也就是內(nèi)存交換區(qū)進入內(nèi)存的數(shù)量。
一般情況下,si、so的值都為0,如果si、so的值長期不為0,則表示系統(tǒng)內(nèi)存不足。需要增加系統(tǒng)內(nèi)存。
l IO項顯示磁盤讀寫狀況
? Bi列表示從塊設(shè)備讀入數(shù)據(jù)的總量(即讀磁盤)(每秒kb)。
? Bo列表示寫入到塊設(shè)備的數(shù)據(jù)總量(即寫磁盤)(每秒kb)
這里我們設(shè)置的bi+bo參考值為1000,如果超過1000,而且wa值較大,則表示系統(tǒng)磁盤IO有問題,應(yīng)該考慮提高磁盤的讀寫性能。
l system 顯示采集間隔內(nèi)發(fā)生的中斷數(shù)
? in列表示在某一時間間隔中觀測到的每秒設(shè)備中斷數(shù)。
? cs列表示每秒產(chǎn)生的上下文切換次數(shù)。
上面這2個值越大,會看到由內(nèi)核消耗的CPU時間會越多。
l CPU項顯示了CPU的使用狀態(tài),此列是我們關(guān)注的重點。
? us列顯示了用戶進程消耗的CPU 時間百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大于50%,就需要考慮優(yōu)化程序或算法。
? sy列顯示了內(nèi)核進程消耗的CPU時間百分比。Sy的值較高時,說明內(nèi)核消耗的CPU資源很多。
根據(jù)經(jīng)驗,us+sy的參考值為80%,如果us+sy大于 80%說明可能存在CPU資源不足。
? id 列顯示了CPU處在空閑狀態(tài)的時間百分比。
? wa列顯示了IO等待所占用的CPU時間百分比。wa值越高,說明IO等待越嚴(yán)重,根據(jù)經(jīng)驗,wa的參考值為20%,如果wa超過20%,說明IO等待嚴(yán)重,引起IO等待的原因可能是磁盤大量隨機讀寫造成的,也可能是磁盤或者磁盤控制器的帶寬瓶頸造成的(主要是塊操作)。
綜上所述,在對CPU的評估中,需要重點注意的是procs項r列的值和CPU項中us、sy和id列的值。
1.2 sar命令
檢查CPU性能的第二個工具是sar,sar功能很強大,可以對系統(tǒng)的每個方面進行多帶帶的統(tǒng)計,但是使用sar命令會增加系統(tǒng)開銷,不過這些開銷是可以評估的,對系統(tǒng)的統(tǒng)計結(jié)果不會有很大影響。
下面是sar命令對某個系統(tǒng)的CPU統(tǒng)計輸出:
[root@webserver ~]# sar -u 3 5
Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)
11:41:24 AM CPU %user %nice %system %iowait %steal %idle
11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83
11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50
11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99. 45
對上面每項的輸出解釋如下:
l %user列顯示了用戶進程消耗的CPU 時間百分比。
l %nice列顯示了運行正常進程所消耗的CPU 時間百分比。
l %system列顯示了系統(tǒng)進程消耗的CPU時間百分比。
l %iowait列顯示了IO等待所占用的CPU時間百分比
l %steal列顯示了在內(nèi)存相對緊張的環(huán)境下pagein強制對不同的頁面進行的steal操作 。
l %idle列顯示了CPU處在空閑狀態(tài)的時間百分比。
1.3 iostat命令
iostat指令主要用于統(tǒng)計磁盤IO狀態(tài),但是也能查看CPU的使用信息,它的局限性是只能顯示系統(tǒng)所有CPU的平均信息,看下面的一個輸出:
[root@webserver ~]# iostat -c
Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.52 0.00 0.30 0.24 0.00 96.96
在這里,我們使用了“-c”參數(shù),只顯示系統(tǒng)CPU的統(tǒng)計信息,輸出中每項代表的含義與sar命令的輸出項完全相同,不再詳述。
1.4 uptime命令
uptime是監(jiān)控系統(tǒng)性能最常用的一個命令,主要用來統(tǒng)計系統(tǒng)當(dāng)前的運行狀況,輸出的信息依次為:系統(tǒng)現(xiàn)在的時間、系統(tǒng)從上次開機到現(xiàn)在運行了多長時間、系統(tǒng)目前有多少登陸用戶、系統(tǒng)在一分鐘內(nèi)、五分鐘內(nèi)、十五分鐘內(nèi)的平均負(fù)載??聪旅娴囊粋€輸出:
[root@webserver ~]# uptime
18:52:11 up 27 days, 19:44, 2 users, load average: 0.12, 0.08, 0.08
這里需要注意的是load average這個輸出值,這三個值的大小一般不能大于系統(tǒng)CPU的個數(shù),例如,本輸出中系統(tǒng)有8個CPU,如果load average的三個值長期大于8時,說明CPU很繁忙,負(fù)載很高,可能會影響系統(tǒng)性能,但是偶爾大于8時,倒不用擔(dān)心,一般不會影響系統(tǒng)性能。相反,如果load average的輸出值小于CPU的個數(shù),則表示CPU還有空閑的時間片,比如本例中的輸出,CPU是非常空閑的。
1.5 本節(jié)小結(jié)
上面介紹了檢查CPU使用狀況的四個命令,通過這些命令需要了解的是:系統(tǒng)CPU是否出現(xiàn)性能瓶頸,也就是說,以上這些命令只能查看CPU是否繁忙,負(fù)載是否過大,但是無法知道CPU為何負(fù)載過大,因而,判斷系統(tǒng)CPU出現(xiàn)問題后,要結(jié)合top、ps等命令進一步檢查是由那些進程導(dǎo)致CPU負(fù)載過大的。引起CPU資源緊缺的原因可能是應(yīng)用程序不合理造成的,也可能是硬件資源匱乏引起的,所以,要具體問題具體分析,或者優(yōu)化應(yīng)用程序,或者增加系統(tǒng)CPU資源。
2 內(nèi)存性能評估
內(nèi)存的管理和優(yōu)化是系統(tǒng)性能優(yōu)化的一個重要部分,內(nèi)存資源的充足與否直接影響應(yīng)用系統(tǒng)的使用性能,在進行內(nèi)存優(yōu)化之前,一定要熟悉linux的內(nèi)存管理機制,這一點我們在前面的章節(jié)已經(jīng)有深入講述,本節(jié)的重點是如何通過系統(tǒng)命令監(jiān)控linux系統(tǒng)的內(nèi)存使用狀況。
2.1 free 命令
free是監(jiān)控linux內(nèi)存使用狀況最常用的指令,看下面的一個輸出:
[root@webserver ~]# free -m
total used free shared buffers cached
Mem: 8111 7185 925 0 243 6299
-/+ buffers/cache: 643 7468
Swap: 8189 0 8189
“free –m”表示以M為單位查看內(nèi)存使用情況,在這個輸出中,我們重點關(guān)注的應(yīng)該是free列與cached列的輸出值,由輸出可知,此系統(tǒng)共8G內(nèi)存,系統(tǒng)空閑內(nèi)存還有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系統(tǒng)緩存了很多的文件和目錄,而對于應(yīng)用程序來說,可以使用的內(nèi)存還有7468M,當(dāng)然這個7468M包含了Buffer Cache和Page Cache的值。在swap項可以看出,交換分區(qū)還未使用。所以從應(yīng)用的角度來說,此系統(tǒng)內(nèi)存資源還非常充足。
一般有這樣一個經(jīng)驗公式:應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存>70%時,表示系統(tǒng)內(nèi)存資源非常充足,不影響系統(tǒng)性能,應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<20%時,表示系統(tǒng)內(nèi)存資源緊缺,需要增加系統(tǒng)內(nèi)存,20%< 應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<70%時,表示系統(tǒng)內(nèi)存資源基本能滿足應(yīng)用需求,暫時不影響系統(tǒng)性能。
2.2 通過watch與free相結(jié)合動態(tài)監(jiān)控內(nèi)存狀況
watch是一個非常有用的命令,幾乎每個linux發(fā)行版都帶有這個工具,通過watch,可以動態(tài)的監(jiān)控命令的運行結(jié)果,省去手動執(zhí)行的麻煩。
可以在watch后面跟上需要運行的命令,watch就會自動重復(fù)去運行這個命令,默認(rèn)是2秒鐘執(zhí)行一次,并把執(zhí)行的結(jié)果更新在屏幕上。例如:
[root@webserver ~]# watch -n 3 -d free
Every 3.0s: free Sun Nov 30 16:23:20 2008
total used free shared buffers cached
Mem: 8306544 7349548 956996 0 203296 6500024
-/+ buffers/cache: 646228 7660316
Swap: 8385888 160 8385728
其中,“-n”指定重復(fù)執(zhí)行的時間,“-d”表示高亮顯示變動。
2.3 vmstat命令監(jiān)控內(nèi)存
vmstat命令在監(jiān)控系統(tǒng)內(nèi)存方面功能強大,請看下面的一個輸出:
procs ———–memory———- —swap– —–io—- –system– —-cpu—-
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 906440 22796 155616 1325496 340 180 2 4 1 4 80 0 10 10
0 0 906440 42796 155616 1325496 320 289 0 54 1095 287 70 15 0 15
0 0 906440 42884 155624 1325748 236 387 2 102 1064 276 78 2 5 15
對于內(nèi)存的監(jiān)控,在vmstat中重點關(guān)注的是swpd、si和so行,從這個輸出可以看出,此系統(tǒng)內(nèi)存資源緊缺,swpd占用了900M左右內(nèi)存,si和so占用很大,而由于系統(tǒng)內(nèi)存的緊缺,導(dǎo)致出現(xiàn)15%左右的系統(tǒng)等待,此時增加系統(tǒng)的內(nèi)存是必須要做的。
2.4 sar -r命令組合
sar命令也可以監(jiān)控linux的內(nèi)存使用狀況,可以通過“sar –r”組合查看系統(tǒng)內(nèi)存和交換空間的使用率。請看下面的一個輸出:
[root@webserver ~]# sar -r 2 3
Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU)
09:57:33 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
09:57:35 PM 897988 7408556 89.19 249428 6496532 786556 4.71
09:57:37 PM 898564 7407980 89.18 249428 6496532 784276 4.70
09:57:39 PM 899196 7407348 89.17 249440 6496520 782132 4.69
Average: 898583 7407961 89.18 249432 6496528 784321 4.70
其中:
Kbmemfree表示空閑物理內(nèi)存大小,kbmemused表示已使用的物理內(nèi)存空間大小,%memused表示已使用內(nèi)存占總內(nèi)存大小的百分比,kbbuffers和kbcached分別表示Buffer Cache和Page Cache的大小,kbcommit和%commit分別表示應(yīng)用程序當(dāng)前使用的內(nèi)存大小和使用百分比。
可以看出sar的輸出其實與free的輸出完全對應(yīng),不過sar更加人性化,不但給出了內(nèi)存使用量,還給出了內(nèi)存使用的百分比以及統(tǒng)計的平均值。從%commit項可知,此系統(tǒng)目前內(nèi)存資源充足。
2.5 本節(jié)小結(jié)
上面介紹了內(nèi)存監(jiān)控常用的幾個指令以及一些經(jīng)驗規(guī)則,其實現(xiàn)在的系統(tǒng)在內(nèi)存方面出現(xiàn)的瓶頸已經(jīng)很少,因為內(nèi)存價格很低,充足的內(nèi)存已經(jīng)完全能滿足應(yīng)用程序和系統(tǒng)本身的需要,如果系統(tǒng)在內(nèi)存方面出現(xiàn)瓶頸,很大的可能是應(yīng)用程序本身的問題造成的。
Linux服務(wù)器性能快速分析通常使用top命令,通過一個命令,就能實時查看服務(wù)器的負(fù)載、cpu、內(nèi)存使用率,類似windows 系統(tǒng)的任務(wù)管理器。那如何使用top命令查看和分析各項性能指標(biāo)呢?
只需登錄到服務(wù)器后,在命令行模式下輸入top即可,是不是很容易呢。如下圖所示:
前5行是服務(wù)器性能指標(biāo)概覽。以上圖為例來詳細說明各項指標(biāo)代表的含義,以便于理解。
第1行是任務(wù)隊列信息:
當(dāng)前時間 22:52:45
系統(tǒng)運行時間 823 days
當(dāng)前登錄用戶數(shù) 2 users
系統(tǒng)負(fù)載 load average: 0.00, 0.03, 0.06 。 三個數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。如果15分鐘對應(yīng)的數(shù)值在升高,但1分鐘對應(yīng)數(shù)值降低,則代表服務(wù)器負(fù)載呈下降趨勢,反之代表負(fù)載在升高。
第2行為進程信息:
進程總數(shù) 121
正在運行的進程數(shù) 1
睡眠的進程數(shù) 119
停止的進程數(shù) 1
僵尸進程數(shù) 0
第3行為cpu信息:
用戶空間占用CPU百分比 (us)0.3%
內(nèi)核空間占用CPU百分比(sy)0.2%
用戶進程空間內(nèi)改變過優(yōu)先級的進程占用CPU百分比(ni)10%
空閑CPU百分比(id)89.2%
等待輸入輸出的CPU時間百分比(wa) 0.0%
硬中斷(Hardware IRQ)占用CPU的百分比(hi)0.0%
軟中斷(Software Interrupts)占用CPU的百分比(si)0.2%
虛擬 CPU 等待實際 CPU 的時間的百分比(st)0.2%
第4、5行為內(nèi)存信息:
物理內(nèi)存總量 6291456k
使用的物理內(nèi)存總量 5760744k
空閑內(nèi)存總量 530712k
用作內(nèi)核緩存的內(nèi)存量 209064k
交換區(qū)總量6258680k
使用的交換區(qū)總量 3132084k
空閑交換區(qū)總量 3126596k
緩沖的交換區(qū)總量 437464k
第6行開始是進程信息區(qū),下方顯示了各個進程的詳細信息。字段含義分別為:
PID 進程id
USER 進程所有者的用戶名
PR 優(yōu)先級
NI nice值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT 進程使用的虛擬內(nèi)存總量,單位kb
RES 進程使用的、未被換出的物理內(nèi)存大小
SHR 共享內(nèi)存大小
S 進程狀態(tài)(D=不可中斷的睡眠狀態(tài) R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程 )
%CPU 上次更新到現(xiàn)在的CPU時間占用百分比,即cpu使用率
%MEM 進程使用的物理內(nèi)存百分比 ,即內(nèi)存使用率
TIME+ 進程使用的CPU時間總計
COMMAND 命令名/命令行
各指標(biāo)含義已詳細說明,指標(biāo)項很多,但我們工作中判斷服務(wù)器是否存在性能問題,通常關(guān)注以下幾項指標(biāo):
1.CPU
使用率。在top基本視圖中,按鍵盤數(shù)字“1”,可監(jiān)控每個邏輯CPU的狀況。CPU使用率數(shù)值越高,代表服務(wù)器越繁忙。而進程信息區(qū)還會顯示各進程當(dāng)前的cpu使用率,若需查詢進程下各線程cpu使用率情況,可使用top -p 進程id -H,配合使用jstack命令還可定位到具體占用cpu過高的功能。2.內(nèi)存使用率。若使用的內(nèi)存過高,空閑內(nèi)存較低,則需注意。
3.服務(wù)器負(fù)載,若服務(wù)器負(fù)載 load average超過cpu核心數(shù)的話,則說明系統(tǒng)超負(fù)荷運行。如果是單核CPU,負(fù)載等于1就是滿負(fù)荷運轉(zhuǎn)了,如果是四核、甚至更多核心的CPU,負(fù)載大于1這說明系統(tǒng)當(dāng)前負(fù)載很小,不需要過多關(guān)心。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答