這篇文章主要介紹一些常用的linux服務器性能監(jiān)控命令降传,包括命令的常用參數(shù)钢属、指標的含義以及一些交互操作熔萧。
幾個問題
命令本身并不復雜,關鍵是你對操作系統(tǒng)基礎知識的掌握和理解洪唐,先來看看下面幾個問題:
- CPU钻蹬、內存以及硬盤的關系是怎樣的?
- 進程和線程是什么凭需?有什么區(qū)別问欠?有什么優(yōu)缺點肝匆?
- 什么是物理內存?什么是虛擬內存顺献?什么時候要用到虛擬內存旗国?
- 什么是CPU中斷?CPU上下文切換注整?CPU缺頁計算能曾?
- 怎么理解系統(tǒng)負載?如何通過load average的值來判斷系統(tǒng)負載是否過高肿轨?
- ...
相信基礎好的司機心里已經有個大致的答案寿冕,那如果你一知半解,請仔細閱讀全文萝招,部分答案會在相關的命令講解中揭曉蚂斤。對于理解錯誤或者不到位的地方希望老司機不吝賜教存捺。
free
free 命令是監(jiān)控linux 內存使用最常用的命令槐沼,參數(shù)[-m]表示以M 為單位查看內存使用情況(默認為kb)。
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 482 130 352 0 9 36
-/+ buffers/cache: 83 399
Swap: 991 0 991
- Mem:物理內存大小捌治。
- total:總計物理內存的大小岗钩。
- used:已使用多大。
- free:可用有多少肖油。
- shared:多個進程共享的內存總額兼吓。
- buffers:緩沖區(qū)內存總量。
- cached:交換區(qū)緩沖區(qū)內存總量森枪。
- 第三行(-/+ buffers/cached):系統(tǒng)的物理內存真實使用量视搏,可通過used-buffers-cached計算得到,因為buffers和cached也是占用物理內存得來县袱,可以通過釋放它們來獲得這部分內存浑娜。
- Swap:交換區(qū)總量,也叫虛擬內存式散。
那么筋遭,什么是虛擬內存?
虛擬內存是計算機系統(tǒng)內存管理的一種技術暴拄,通過使用硬盤空間來當做內存以彌補計算機物理內存(RAM空間)的缺乏漓滔。當物理內存不夠用時(不夠用前),系統(tǒng)在磁盤上劃分一塊虛擬的內存空間乖篷,這樣虛擬內存就在硬盤上創(chuàng)建了响驴。
現(xiàn)在明白什么是虛擬內存,什么時候要用到虛擬內存了吧撕蔼。所以豁鲤,當你在監(jiān)控linux操作系統(tǒng)的時候石蔗,如果發(fā)現(xiàn)系統(tǒng)使用了交換內存,那么說明系統(tǒng)的 ** 物理內存已經用完了**畅形,需要排查是哪些程序占用了物理內存养距,對內存進行進一步的深入分析。還有一點要說的就是日熬,交換內存的速度是非常慢的棍厌。
uptime
uptime 命令是監(jiān)控系統(tǒng)性能最常用的一個命令,主要是來統(tǒng)計系統(tǒng)當前的運行狀態(tài)竖席,即負載情況耘纱。
[root@localhost~]# uptime
05:41:01 up 3 min, 1 user, load average: 0.23, 0.33, 0.15
輸出信息依次是:系統(tǒng)現(xiàn)在的時間,系統(tǒng)從上次開機到現(xiàn)在運行了多長時間毕荐,系統(tǒng)當前有多少個登錄用戶束析,系統(tǒng)在1分鐘內、5 分鐘內憎亚、15 分鐘內的平均負載员寇。
如果load average值長期大于系統(tǒng)CPU的個數(shù)則說明CPU很繁忙,負載很高第美,可能會影響系統(tǒng)性能蝶锋,導致系統(tǒng)卡頓響應時間長等等。
load average值與系統(tǒng)CPU的個數(shù)對比怎么理解什往?load average的值表示在單位時間內運行的進程數(shù)扳缕,而CPU一個內核同一時間只能處理一個進程,一臺16核CPU的服務器如果load average大于16别威,那說明系統(tǒng)正處于超負荷運行狀態(tài)躯舔。
vmstat
vmstat 可以對操作系統(tǒng)的內存信息、進程狀態(tài)省古、CPU 活動粥庄、磁盤等信息進行監(jiān)控,不足之處是無法對某個進程進行深入分析衫樊。
[root@localhost~]# vmstat 2 3 -S M
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 235 11 88 0 0 32 2 21 23 0 1 98 1 0
0 0 0 235 11 88 0 0 0 0 16 19 0 0 100 0 0
0 0 0 235 11 88 0 0 0 0 13 19 0 0 100 0 0
2表示每2秒取樣一次飒赃,3表示取數(shù)3次,-S表示單位科侈,可選有 k 载佳、K 、m 臀栈、M蔫慧。
procs
R 列表示運行和等待 CPU 時間片的進程數(shù),這個值如果長期大于系統(tǒng) CPU 個數(shù)权薯,說明CPU 不足姑躲,需要增加 CPU睡扬。
B 列表示在等待資源的進程數(shù),比如正在等待 I/O 或者內存交換等黍析。memory
swpd 列表示切換到內存交換區(qū)的內存大新袅(單位 KB),通俗講就是虛擬內存的大小阐枣。如果 swap 值不為 0 或者比較大马靠, 只要 si、so 的值長期為 0蔼两,這種情況一般屬于正常情況
free 列表示當前空閑的物理內存(單位 KB) 甩鳄。
buff 列表示 buffers cached 內存大小,也就是緩沖區(qū)大小额划,一般對塊設備的讀寫才需要緩沖妙啃。
cache 列表示 page cached 的內存大小,也就是緩存大小俊戳,一般作為文件系統(tǒng)進行緩沖揖赴,頻繁訪問的文件都會被緩存,如果 cache 值非常大說明緩存文件比較多品抽,如果此時 io中的 bi 比較小储笑,說明文件系統(tǒng)效率比較好甜熔。swap
si 列表示由磁盤調入內存圆恤,也就是內存進入內存交換區(qū)的內存大小。
so 列表示由內存進入磁盤腔稀,也就是有內存交換區(qū)進入內存的內存大小盆昙。
一般情況下,si焊虏、so 的值都為 0淡喜,如果 si、so 的值長期不為 0诵闭,則說明系統(tǒng)內存不足炼团,需要增加系統(tǒng)內存。io
bi 列表示由塊設備讀入數(shù)據(jù)的總量疏尿,即讀磁盤瘟芝,單位 kb/s。
bo 列表示寫到塊設備數(shù)據(jù)的總量褥琐,即寫磁盤锌俱,單位 kb/s。
如果 bi+bo 值過大敌呈,且 wa 值較大贸宏,則表示系統(tǒng)磁盤 IO 瓶頸造寝。system
in 列表示某一時間間隔內觀測到的每秒設備中斷數(shù)。
cs 列表示每秒產生的上下文切換次數(shù)吭练。
這 2 個值越大诫龙,則由內核消耗的 CPU 就越多。cpu
us 列表示用戶進程消耗的 CPU 時間百分比鲫咽,us 值越高赐稽,說明用戶進程消耗 cpu 時間越多,如果長期大于 50%浑侥,則需要考慮優(yōu)化程序或者算法姊舵。
sy 列表示系統(tǒng)內核進程消耗的 CPU 時間百分比,一般來說 us+sy 應該小于 80%寓落,如果大于 80%括丁,說明可能處于 CPU 瓶頸。
id 列表示 CPU 處在空閑狀態(tài)的時間百分比伶选。
wa 列表示 IP 等待所占的 CPU 時間百分比史飞,wa 值越高,說明 I/O 等待越嚴重仰税,根據(jù)經驗 wa 的參考值為 20%构资,如果超過 20%,說明 I/O 等待嚴重陨簇,引起 I/O 等待的原因可能是磁盤大量隨機讀寫造成的吐绵, 也可能是磁盤或者此哦按監(jiān)控器的貸款瓶頸 (主要是塊操作)造成的。
vmstat命令的結果顯示比較全面河绽,可以看到操作系統(tǒng)的內存信息己单、進程狀態(tài)、CPU 活動耙饰、磁盤等信息纹笼,不足之處是無法對某個進程進行深入分析。但是以上每一列的含義都是要重點掌握苟跪!具體的參數(shù)和用法在這里就不列舉了廷痘,需要的可自行百度了解。
sar
好吧件已,我只是為了引起大家的注意笋额。
sar 是非常強大性能分析命令,通過 sar 命令可以全面的獲取系統(tǒng)的 CPU拨齐、運行隊列鳞陨、磁盤 I/O、交換區(qū)、內存厦滤、cpu 中斷援岩、網絡等性能數(shù)據(jù)。老司機必備掏导!
sar安裝直接yum install -y sysstat享怀,這里有個坑就是安裝完成后直接使用的話會報錯,提示文件不存在趟咆,解決辦法是先執(zhí)行sar -o 2 3添瓷,來生成所需文件,之后使用就正常啦值纱。
sar監(jiān)控CPU
[root@localhost~]# sar -u 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
06時58分50秒 CPU %user %nice %system %iowait %steal %idle
06時58分52秒 all 0.00 0.00 0.50 0.00 0.00 99.50
06時58分54秒 all 0.00 0.00 0.50 0.00 0.00 99.50
06時58分56秒 all 0.00 0.00 0.50 0.00 0.00 99.50
平均時間: all 0.00 0.00 0.50 0.00 0.00 99.50
2表示每2秒取樣一次鳞贷,3表示取數(shù)3次,-u表示CPU使用率虐唠。
- %usr:用戶進程消耗的 CPU 時間百分比搀愧。
- %nice: 運行正常進程消耗的 CPU 時間百分比。
- %system:系統(tǒng)進程消耗的 CPU 時間百分比疆偿。
- %iowait:I/O 等待所占 CPU 時間百分比咱筛。
- %steal:在內存緊張環(huán)境下,pagein 強制對不同的頁面進行的 steal 操作杆故。虛擬服務占用的CPU時間百分比迅箩,這個值一般為0.
- %idle:CPU 空閑狀態(tài)的時間百分比。
在所有的顯示中处铛,我們應主要注意%iowait 和%idle饲趋,%iowait 的值過高,表示硬盤存在 I/O 瓶頸罢缸, %idle 值高篙贸,表示 CPU 較空閑,如果%idle 值高但系統(tǒng)響應慢時枫疆,有可能是 CPU 等待分配內存, 此時應加大內存容量敷鸦。%idle 值如果持續(xù)低于 10息楔,那么系統(tǒng)的 CPU 處理能力相對較低,表 明系統(tǒng)中最需要解決的資源是 CPU扒披。
[root@localhost~]# sar -q 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
07時16分31秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
07時16分33秒 0 118 0.16 0.07 0.09
07時16分35秒 0 118 0.16 0.07 0.09
07時16分37秒 0 118 0.15 0.07 0.09
平均時間: 0 118 0.16 0.07 0.09
2表示每2秒取樣一次值依,3表示取數(shù)3次,-q顯示運行隊列的大小碟案,它與系統(tǒng)當時的平均負載相同愿险。
- runq-sz:運行隊列的長度(等待運行的進程數(shù)) 。
- plist-sz:進程列表中進程(processes)和線程(threads)的數(shù)量。
- ldavg-1:最后 1 分鐘的系統(tǒng)平均負載(System load average) 辆亏。
- ldavg-5:過去 5 分鐘的系統(tǒng)平均負載风秤。
- ldavg-15:過去 15 分鐘的系統(tǒng)平均負載。
sar監(jiān)控內存
[root@localhost~]# sar -r 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
07時22分04秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
07時22分06秒 241108 269556 52.79 12736 90360 543584 21.11
07時22分08秒 241108 269556 52.79 12736 90360 543584 21.11
07時22分10秒 241108 269556 52.79 12736 90360 543584 21.11
平均時間: 241108 269556 52.79 12736 90360 543584 21.11
2表示每2秒取樣一次扮叨,3表示取數(shù)3次缤弦,-r顯示顯示系統(tǒng)內存使用情況。
- kbmemfree: 這個值和 free 命令中的 free 值基本一致,所以它不包括 buffer 和 cache 的空間彻磁。
- kbmemused:這個值和 free 命令中的 used 值基本一致,所以它包括 buffer 和 cache 的空間碍沐。
- %memused:這個值是 kbmemused 和內存總量(不包括 swap)的一個百分比。
- kbbuffers 和 kbcached:這兩個值就是 free 命令中的 buffer 和 cache衷蜓。
- kbcommit:保證當前系統(tǒng)所需要的內存,即為了確保不溢出而需要的內存(RAM+swap)累提。
- %commit:這個值是 kbcommit 與內存總量(包括 swap)的一個百分比。
[root@localhost~]# sar -B 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
07時26分26秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
07時26分28秒 0.00 0.00 18.91 0.00 52.24 0.00 0.00 0.00 0.00
07時26分30秒 0.00 0.00 19.60 0.00 52.76 0.00 0.00 0.00 0.00
07時26分32秒 0.00 5.97 15.42 0.00 52.24 0.00 0.00 0.00 0.00
平均時間: 0.00 2.00 17.97 0.00 52.41 0.00 0.00 0.00 0.00
2表示每2秒取樣一次磁浇,3表示取數(shù)3次刻恭,-B顯示系統(tǒng)內存分頁情況。
- pgpgin/s:表示每秒從磁盤或 SWAP 置換到內存的字節(jié)數(shù)(KB)扯夭。
- pgpgout/s:表示每秒從內存置換到磁盤或 SWAP 的字節(jié)數(shù)(KB)鳍贾。
- fault/s:每秒鐘系統(tǒng)產生的缺頁數(shù),即主缺頁與次缺頁之和(major + minor)。
- majflt/s:每秒鐘產生的主缺頁數(shù)交洗。
[[root@localhost~]# sar -W 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
08時31分10秒 pswpin/s pswpout/s
08時31分12秒 0.00 0.00
08時31分14秒 0.00 0.00
08時31分16秒 0.00 0.00
平均時間: 0.00 0.00
2表示每2秒取樣一次骑科,3表示取數(shù)3次,-W顯示系統(tǒng)虛擬內存分頁情況构拳。
- pswpin/s:每秒系統(tǒng)換入的交換頁面(swap page)數(shù)量咆爽。
- pswpout/s:每秒系統(tǒng)換出的交換頁面(swap page)數(shù)量。
sar監(jiān)控I/O
[root@localhost~]# sar -b 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
08時36分27秒 tps rtps wtps bread/s bwrtn/s
08時36分29秒 0.00 0.00 0.00 0.00 0.00
08時36分31秒 0.00 0.00 0.00 0.00 0.00
08時36分33秒 0.00 0.00 0.00 0.00 0.00
平均時間: 0.00 0.00 0.00 0.00 0.00
2表示每2秒取樣一次置森,3表示取數(shù)3次斗埂,-b顯示緩沖區(qū)使用情況。
- tps:每秒鐘物理設備的 I/O 傳輸總量凫海。
- rtps:每秒鐘從物理設備讀入的數(shù)據(jù)總量呛凶。
- wtps:每秒鐘向物理設備寫入的數(shù)據(jù)總量。
- bread/s:每秒鐘從物理設備讀入的數(shù)據(jù)量行贪,單位為 塊/s漾稀。
- bwrtn/s:每秒鐘向物理設備寫入的數(shù)據(jù)量,單位為 塊/s建瘫。
sar監(jiān)控文件和內核
[root@localhost~]# sar -v 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
09時43分12秒 dentunusd file-nr inode-nr pty-nr
09時43分14秒 4466 768 11506 1
09時43分16秒 4466 768 11506 1
09時43分18秒 4466 768 11506 1
平均時間: 4466 768 11506 1
2表示每2秒取樣一次崭捍,3表示取數(shù)3次,-v顯示進程啰脚、節(jié)點殷蛇、文件和鎖表狀態(tài)。
- inode-sz:目前核心中正在使用或分配的節(jié)點表的表項數(shù),由核心參數(shù) MAX-INODE 控制粒梦。
- file-sz:目前核心中正在使用或分配的文件表的表項數(shù)亮航, 由核心參數(shù) MAX-FILE 控 制。
- super-sz:溢出出現(xiàn)的次數(shù)谍倦。
- dentunusd:目錄高速緩存中未被使用的條目數(shù)量 塞赂。
sar監(jiān)控設備使用情況
[root@localhost~]# sar -d 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
09時37分46秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
09時37分48秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09時37分48秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09時37分48秒 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2表示每2秒取樣一次,3表示取數(shù)3次昼蛀,-d顯示設備使用情況宴猾。
- tps:每秒從物理磁盤 I/O 的次數(shù).多個邏輯請求會被合并為一個 I/O 磁盤請求,一次傳輸?shù)拇笮∈遣淮_定的。
- rd_sec/s:每秒讀扇區(qū)的次數(shù)叼旋。
- wr_sec/s:每秒寫扇區(qū)的次數(shù)仇哆。
- avgrq-sz:平均每次設備 I/O 操作的數(shù)據(jù)大小(扇區(qū))。
- avgqu-sz:磁盤請求隊列的平均長度夫植。
- await:從請求磁盤操作到系統(tǒng)完成處理,每次請求的平均消耗時間,包括請求隊列等待時間,單位是毫秒(1 秒=1000 毫秒)讹剔。
- svctm:系統(tǒng)處理每次請求的平均時間,不包括在請求隊列中消耗的時間。
- %util:I/O 請求占 CPU 的百分比,比率越大,說明越飽和详民。
- avgqu-sz 的值較低時延欠,設備的利用率較高。
- 當%util 的值接近 1% 時沈跨,表示設備帶寬已經占滿由捎。
- await-svctm=io等待時間。
sar總結
- 要判斷系統(tǒng)瓶頸問題饿凛,有時需幾個 sar 命令選項結合起來
- 懷疑 CPU 存在瓶頸狞玛,可用 sar -u 和 sar -q 等來查看
- 懷疑內存存在瓶頸,可用 sar -B涧窒、sar -r 和 sar -W 等來查看
- 懷疑 I/O 存在瓶頸心肪,可用 sar -b、sar -u 和 sar -d 等來查看
- 參數(shù)列表
-u:CPU 利用率
-v:進程纠吴、節(jié)點硬鞍、文件和鎖表狀態(tài)。
-d:硬盤使用報告呜象。
-q:顯示運行隊列的大小膳凝,它與系統(tǒng)當時的平均負載相同
-B:內存分頁情況
-b:緩沖區(qū)使用情況。
-W:系統(tǒng)交換活動恭陡,虛擬內存。
iostat
iostat 是對系統(tǒng)的磁盤 I/O 操作進行監(jiān)控上煤,它的輸出主要顯示磁盤讀寫操作的統(tǒng)計信息休玩,同時給出 CPU 的使用情況。同 vmstat 一樣,iostat 不能對某個進程進行深入分析拴疤,僅對操作系統(tǒng)的整體情況進行分析永部。
iostat監(jiān)控磁盤
[root@localhost~]# iostat -x
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.04 0.00 0.30 0.23 0.00 99.43
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.16 0.07 0.23 0.12 13.67 1.51 43.06 0.01 22.07 8.37 49.13 11.15 0.39
dm-0 0.00 0.00 0.31 0.19 13.08 1.50 29.58 0.01 29.07 18.88 45.61 7.92 0.39
dm-1 0.00 0.00 0.02 0.00 0.15 0.00 8.00 0.00 5.47 5.47 0.00 4.12 0.01
-x顯示所有磁盤分區(qū)的情況。
- rrqm/s:每秒進行 merge 的讀操作數(shù)目呐矾,即 delta(rmerge)/s 苔埋。
- wrqm/s:每秒進行 merge 的寫操作數(shù)目,即 delta(wmerge)/s 蜒犯。
- r/s:每秒完成的讀 I/O 設備次數(shù)组橄,即 delta(rio)/s 。
- w/s: 每秒完成的寫 I/O 設備次數(shù)罚随,即 delta(wio)/s 玉工。
- rsec/s:每秒讀扇區(qū)數(shù),即 delta(rsect)/s淘菩。
- wsec/s:每秒寫扇區(qū)數(shù)遵班,即 delta(wsect)/s
- rkB/s:每秒讀 K 字節(jié)數(shù),是 rsect/s 的一半潮改,因為每扇區(qū)大小為 512 字節(jié)狭郑。
- wkB/s:每秒寫 K 字節(jié)數(shù),是 wsect/s 的一半
- avgrq-sz:平均每次設備 I/O 操作的數(shù)據(jù)大小 (扇區(qū))汇在,即
delta(rsect+wsect)/delta(rio+wio) 翰萨。 - avgqu-sz:平均 I/O 隊列長度,即 delta(aveq)/s/1000 (因為 aveq 的單位為毫秒)趾疚。
- Await: 平均每次設備 I/O 操作的等待時間 (毫秒)缨历, 即 delta(ruse+wuse)/delta(rio+wio) 。
- **Svctm:平均每次設備 I/O 操作的服務時間 (毫秒)糙麦,即delta(use)/delta(rio+wio) **
- %util:一秒中有百分之多少的時間用于 I/O 操作辛孵,或者說一秒中有多少時間 I/O 隊列是非空的,即 delta(use)/s/1000 (因為 use 的單位為毫秒) 赡磅。
[root@localhost~]# iostat -d
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.35 13.40 1.50 212052 23818
dm-0 0.49 12.82 1.50 202898 23800
dm-1 0.02 0.15 0.00 2400 0
-d顯示磁盤使用情況魄缚。
- tps:每秒從物理磁盤 I/O 的次數(shù).多個邏輯請求會被合并為一個 I/O 磁盤請求,一次傳輸?shù)拇笮∈遣淮_定的。磁盤的一次讀或者寫都是一次 I/O 操作
- Blk_read/s:每秒讀取的數(shù)據(jù)塊數(shù)焚廊。
- Blk_wrtn/s :每秒寫入的數(shù)據(jù)塊數(shù)冶匹。
- Blk_read:讀取的所有塊數(shù)。
- Blk_wrtn :寫入的所有塊數(shù)咆瘟。
iostat監(jiān)控CPU
[root@localhost~]# iostat -c 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.04 0.00 0.29 0.24 0.00 99.43
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.50 0.00 0.00 99.50
-c顯示系統(tǒng)CPU使用情況嚼隘,2表示時間間隔2s,3表示取數(shù)3次袒餐。
- %usr:用戶進程消耗的 CPU 時間百分比飞蛹。
- %nice: 運行正常進程消耗的 CPU 時間百分比谤狡。
- %system:系統(tǒng)進程消耗的 CPU 時間百分比。
- %iowait:I/O 等待所占 CPU 時間百分比卧檐。
- %steal:在內存緊張環(huán)境下墓懂,pagein 強制對不同的頁面進行的 steal 操作。
- %idle:CPU 空閑狀態(tài)的時間百分比霉囚。
top
我想這個命令大家肯定已經相當熟悉捕仔,甚至有些童鞋有用過。top 命令能夠實時監(jiān)控系統(tǒng)的運行狀態(tài)盈罐, 并且可以按照 CPU榜跌、 內存和執(zhí)行時間進行排序,同時 top 命令還可以通過交互式命令進行設定顯示暖呕,通過 top 命令可以查看即時活躍的進程斜做。
top - 05:57:44 up 2 min, 1 user, load average: 0.47, 0.37, 0.15
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 510664k total, 268192k used, 242472k free, 11464k buffers
Swap: 2064380k total, 0k used, 2064380k free, 90252k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
745 root 20 0 0 0 0 S 0.3 0.0 0:00.04 flush-253:0
1724 root 20 0 12468 3392 2640 S 0.3 0.7 0:00.45 sshd
1 root 20 0 2900 1408 1204 S 0.0 0.3 0:03.05 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.19 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 sync_supers
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.21 kblockd/0
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpid
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_notify
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_hotplug
23 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ata_aux
24 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ata_sff/0
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksuspend_usbd
26 root 20 0 0 0 0 S 0.0 0.0 0:00.01 khubd
直接在命令行輸入top回車之后就可以看到上面的效果了,內容是不是很豐富湾揽,先逐個介紹參數(shù)的含義瓤逼。
參數(shù) | 含義 |
---|---|
05:57:44 | 系統(tǒng)時間 |
up 2 min | 系統(tǒng)運行時間 |
user | 系統(tǒng)當前登錄用戶數(shù) |
load average: 0.47, 0.37, 0.15 | 過去一分鐘五分鐘十五分鐘系統(tǒng)負載 |
-- | -- |
Tasks | 進程/任務 |
total | 總進程數(shù) |
running | 正在運行進程數(shù) |
sleeping | 休眠狀態(tài)進程數(shù) |
stopped | 停止進程數(shù) |
zombie | 僵尸進程數(shù)(處于無響應狀態(tài)) |
-- | -- |
%us | 用戶進程消耗的 CPU 時間百分比 |
%sy | 系統(tǒng)進程消耗的 CPU 時間百分比 |
%ni | 運行正常進程消耗的 CPU 時間百分比 |
%id | CPU 空閑狀態(tài)的時間百分比 |
%wa | I/O 等待所占 CPU 時間百分比 |
%hi | 硬中斷(Hardware IRQ)占用CPU的百分比 |
%si | 軟中斷(Software Interrupts)占用CPU的百分比 |
%st | 在內存緊張環(huán)境下,pagein 強制對不同的頁面進行的 steal 操作 |
-- | -- |
Mem total | 物理內存總量 |
Mem used | 使用中的內存總量 |
Mem free | 空閑內存總量 |
Mem buffers | 緩存的內存量 |
-- | -- |
Swap total | 交換區(qū)總量 |
Swap free | 使用的交換區(qū)總量 |
Swap used | 空閑交換區(qū)總量 |
Swap cached | 緩沖的交換區(qū)總量 |
-- | -- |
PID | 進程id |
USER | 進程所有者 |
PR | 進程優(yōu)先級 |
NI | nice值库物。負值表示高優(yōu)先級约谈,正值表示低優(yōu)先級 |
VIRT | 進程使用的虛擬內存總量次洼,單位kb灌灾。VIRT=SWAP+RES |
RES | 進程使用的儒搭、未被換出的物理內存大小,單位kb民晒。RES=CODE+DATA |
SHR | 共享內存大小精居,單位kb |
S | 進程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程 |
%CPU | 次更新到現(xiàn)在的CPU時間占用百分比 |
%MEM | 進程使用的物理內存百分比 |
TIME+ | 進程使用的CPU時間總計潜必,單位1/100秒 |
COMMAND | 進程名稱(命令名/命令行) |
其實不難發(fā)現(xiàn)靴姿,top包含了前面介紹的一些命令的結果,如uptime磁滚、free佛吓、iostat等,那除了內容比較全面之外垂攘,top還提供了一些交互操作维雇,讓我們能更進一步的分析系統(tǒng)性能。
下面我介紹幾個常用的交互操作:
展開Cpu(s)
在top交互界面直接按鍵盤的數(shù)字1晒他。
這里還是要強調一下吱型,%cpu的值是跟內核數(shù)成正比的,如8核cpu的%cpu最大可以800%陨仅。顯示線程
在top交互界面按ctrl+h顯示線程唁影,再按一次關閉顯示耕陷。幫助
在top交互界面按h進入幫助界面掂名。增加或刪除顯示列
在top交互界面按h進入据沈,輸入想顯示的列的首字母如n,退出直接回車饺蔑。排序
Cpu : 在top交互界面按shift+p锌介。
Mem :在top交互界面按shift+m。
Time :在top交互界面按shift+t猾警。顯示程序名
在top交互界面按c孔祸。監(jiān)控進程下的線程
在命令行輸入top -H -p pid,其中pid為進程id发皿,進入界面后顯示的PID為線程ID崔慧;或者使用命令top -H -p pid進入界面之后在按shift+h來顯示線程。
netstat
Netstat 命令用于顯示本機網絡連接穴墅、運行端口惶室、路由表等信息,常用命令有兩個netstat -plnt和netstat -i玄货,我們來看看皇钞。
[root@localhost~]# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1 1500 0 4249 0 0 0 5786 0 0 0 BMRU
lo 65536 0 0 0 0 0 0 0 0 0 LRU
- Iface:表示網絡設備的接口名稱。
- MTU:表示最大傳輸單元松捉,單位為字節(jié)夹界。
- RX-OK/TX-OK:表示已經準確無誤地接收/發(fā)送了多少數(shù)據(jù)包。
- RX-ERR/TX-ERR:表示接收/發(fā)送數(shù)據(jù)包時候產生了多少錯誤隘世。
- RX-DRP/TX-DRP:表示接收/發(fā)送數(shù)據(jù)包時候丟棄了多少數(shù)據(jù)包可柿。
- RX-OVR/TX-OVR:表示由于誤差而丟失了多少數(shù)據(jù)包。
- Flg 表示接口標記丙者,其中
B 已經設置了一個廣播地址复斥。
L 該接口是一個回送設備。
M 接收所有數(shù)據(jù)包(混亂模式) 蔓钟。
N 避免跟蹤永票。
O 在該接口上,禁用 AR P滥沫。
P 這是一個點到點鏈接侣集。
R 接口正在運行。
U 接口處于“活動”狀態(tài)兰绣。 - 其中 RX-ERR/TX-ERR世分、 RX-DRP/TX-DRP 和 RX-OVR/TX-OVR 的值應該都為 0,如果不為 0缀辩,并且很大臭埋,那么網絡質量肯定有問題踪央,網絡傳輸性能也一代會下降。
[root@localhost~]# netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1073/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1152/master
tcp 0 0 :::3306 :::* LISTEN 1623/mysqld
tcp 0 0 :::80 :::* LISTEN 1209/httpd
tcp 0 0 :::21 :::* LISTEN 1265/proftpd
tcp 0 0 :::22 :::* LISTEN 1073/sshd
tcp 0 0 ::1:25 :::* LISTEN 1152/master
tcp 0 0 :::443 :::* LISTEN 1209/httpd
- Proto :協(xié)議
- Recv-Q:表示接收隊列瓢阴。
- Send-Q :表示發(fā)送隊列畅蹂。
- LocalAddress :表示本地機器名、端口
- Foreign Address :表示遠程機器名荣恐、端口
- State:表示狀態(tài)液斜,其中
LISTEN :在監(jiān)聽狀態(tài)中。
ESTABLISHED:已建立聯(lián)機的聯(lián)機情況叠穆。
TIME_WAIT:該聯(lián)機在目前已經是等待的狀態(tài)少漆。 - PID/Program name:進程id/進程名
strace
strace 常用來跟蹤進程執(zhí)行時的系統(tǒng)調用和所接收的信號。 在 Linux 世界硼被,進程不能直接訪問硬件設備示损,當進程需要訪問硬件設備(比如讀取磁盤文件,接收網絡數(shù)據(jù)等等)時嚷硫,必須由用戶態(tài)模式切換至內核態(tài)模式检访,通過系統(tǒng)調用訪問硬件設備。strace 可以跟蹤到一個進程產生的系統(tǒng)調用,包括參數(shù)论巍,返回值烛谊,執(zhí)行消耗的時間。
那在什么情況下需要用到strace呢嘉汰?比如用戶CPU高的時候丹禀,你可以通過dump線程棧等方式進行深入分析,而系統(tǒng)CPU高時鞋怀,先分析I/O双泪,此時如果I/O高那么就可以確定是I/O問題了,如果I/O不高密似,那么想進一步分析就需要用到strace啦焙矛。
[root@localhost~]# strace -c -f -r -t -p 1724
Process 1724 attached
^CProcess 1724 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000039 20 2 read
0.00 0.000000 0 2 write
0.00 0.000000 0 3 select
0.00 0.000000 0 8 rt_sigprocmask
------ ----------- ----------- --------- --------- ----------------
100.00 0.000039 15 total
以上命令中-p 172的172指的是你的進程id。
- % time :調用該行命令占總時間的百分比
- Seconds :調用總時長
- usecs/call :用戶調用次數(shù)
- Calls:系統(tǒng)調用次數(shù)
- Errors:錯誤總數(shù)
- Syscall:調用的內核命令
總結
篇幅比較長残腌,讀起來難免枯燥村斟,學習linux監(jiān)控我認為首先要知道它有哪些命令,分別能做什么抛猫,其次要掌握每個命令的用法蟆盹,最后一定要了解命令輸出參數(shù)的含義。做到以上幾點闺金,我覺得你就已經具備了簡單的監(jiān)控和分析的能力逾滥,這個再去使用一些監(jiān)控工具,就so easy了败匹。
我的答案
CPU寨昙、內存以及硬盤的關系讥巡?
我們都知道,CPU是計算機的大腦舔哪,主要負責計算和邏輯判斷欢顷,且自帶一塊容量比較小的高速緩存區(qū),內存是CPU運行時數(shù)據(jù)存儲的空間尸红,硬盤的作用是數(shù)據(jù)保存吱涉。那么他們的工作流程到底是怎么樣的呢,還是先看一個比較形象的例子外里。
把CPU比喻成車間工人,每個工人看做一個CPU內核特石,把內存比喻成車間盅蝗,硬盤比喻成倉庫。車間的物件(數(shù)據(jù))來自于倉庫姆蘸,車間工人在車間工作墩莫,處理車間內的物件(數(shù)據(jù)),當車間內的物件(數(shù)據(jù))處理好后存放回倉庫逞敷。很明顯狂秦,車間越大車間工人越多,那么整個工廠單位時間能干的活也就越多推捐。buff和cach的區(qū)別裂问?
buff:緩沖區(qū),在進程通信時由于設備讀寫速度不一致產生牛柒,慢的一方先將數(shù)據(jù)存放到buff中堪簿,達到一定程度存儲快的設備再讀取buffer的數(shù)據(jù),通過buffer可以減少進程間通信需要等待的時間皮壁。
cache:緩存區(qū)椭更,高速緩存,位于CPU和主內存之間的容量較小但速度很快的存儲器蛾魄,它減少了CPU等待的時間虑瀑。線程與進程的區(qū)別及優(yōu)缺點?
一個進程包含至少一個線程,進程是資源集合體滴须,是系統(tǒng)資源分配調度的基本單位舌狗,線程是進程的執(zhí)行單元,進程和線程都可以并發(fā)描馅,進程在執(zhí)行過程中擁有獨立的內存單元把夸,而線程之間共享內存