共計(jì) 3589 個(gè)字符,預(yù)計(jì)需要花費(fèi) 9 分鐘才能閱讀完成。
這期內(nèi)容當(dāng)中丸趣 TV 小編將會(huì)給大家?guī)?lái)有關(guān)如何采用分段排查法診斷服務(wù)器性能,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在日常性能測(cè)試中,我們需要掌握一些常用的策略以及有必要了解和掌握查看服務(wù)器性能的命令,來(lái)排查診斷服務(wù)器性能。
今天,就和大家分享一下在壓測(cè)過(guò)程中,采用分段排查法快速利用命令去診斷服務(wù)器的性能。
Linux 服務(wù)器分段排查的方法,按照 CPU、內(nèi)存、磁盤(pán) IO、網(wǎng)絡(luò)的先后順序依次排除。參考流程圖如下:
分析步驟:
Step1 用 top 查看系統(tǒng)大致情況:
關(guān)注 cpu(sys+us)使用率,若此值持續(xù)大于 80%,可以觀察進(jìn)程視圖,是否是非核心應(yīng)用進(jìn)程占用大量 CPU 資源,若能排除非核心應(yīng)用進(jìn)程的影響,則基本能確定該系統(tǒng) cpu 資源面臨短缺,此時(shí)結(jié)合 vmstat 監(jiān)控觀察到 proc 列 r 值應(yīng)該較大; 同理,當(dāng) cpu 利用率很低,但運(yùn)行進(jìn)程隊(duì)列 (r 值) 卻很大時(shí),表面 cpu 存在阻塞
關(guān)注 %idle(cpu 空閑時(shí)間的百分比),若此值較高但系統(tǒng)響應(yīng)卻很慢時(shí),有可能是 CPU 在等待分配內(nèi)存,此時(shí)應(yīng)關(guān)注內(nèi)存使用情況 (見(jiàn) step3); 如果空閑時(shí)間 %idle 持續(xù)為 0 并且系統(tǒng)時(shí)間(cpu sy) 是用戶時(shí)間 (cpu us) 的兩倍,系統(tǒng)則面臨著 CPU 資源的短缺.
關(guān)注 %wait(cpu 等待 IO 的時(shí)間的百分比),在 cpu 資源尚未耗盡情況下,若此值持續(xù)很高表示系統(tǒng)存儲(chǔ) IO 可能存在瓶頸; 問(wèn)題原因可能是:(1)系統(tǒng)存在一個(gè)應(yīng)用程序問(wèn)題 (應(yīng)用本身有許多 IO 請(qǐng)求);(2) 物理內(nèi)存不足; (3)低效的 I/O 子系統(tǒng)配置; 此時(shí)應(yīng)先排查是否是應(yīng)用程序問(wèn)題,然后檢查系統(tǒng)內(nèi)存使用情況,若是交換分頁(yè)多,則確定是由物理內(nèi)存不足引發(fā)的磁盤(pán) IO 問(wèn)題(見(jiàn) step3); 若不是,則檢查系統(tǒng)磁盤(pán),結(jié)合 iostat 來(lái)驗(yàn)證此現(xiàn)象是由應(yīng)用 IO 過(guò)多造成(見(jiàn) step4).
Step2 結(jié)合 vmstat、sar 監(jiān)控 cpu:
主要關(guān)注報(bào)告中的 4 個(gè) cpu 列和 2 個(gè) procs(內(nèi)核線程)列
r:等待在 CPU 資源的進(jìn)程數(shù)。這個(gè)數(shù)據(jù)比平均負(fù)載更加能夠體現(xiàn) CPU 負(fù)載情況,數(shù)據(jù)中不包含等待 IO 的進(jìn)程。如果這個(gè)數(shù)值大于系統(tǒng)中的邏輯 CPU 核數(shù),表示系統(tǒng)現(xiàn)在運(yùn)行比較慢, 有多數(shù)的進(jìn)程等待 CPU,那么系統(tǒng)的 CPU 資源已經(jīng)飽和。
us, sy, id, wa, st:這些都代表了 CPU 時(shí)間的消耗,它們分別表示用戶時(shí)間 (user)、系統(tǒng)(內(nèi)核) 時(shí)間 (sys)、空閑時(shí)間(idle)、IO 等待時(shí)間(wait) 和被偷走的時(shí)間(stolen,一般被其他虛擬機(jī)消耗)。上述這些 CPU 時(shí)間,可以讓我們很快了解 CPU 是否出于繁忙狀態(tài)。一般情況下,如果用戶時(shí)間和系統(tǒng)時(shí)間相加非常大,CPU 出于忙于執(zhí)行指令。如果 IO 等待時(shí)間很長(zhǎng),那么系統(tǒng)的瓶頸可能在磁盤(pán) IO。
sar ndash;P ALL : 對(duì) cpu 分開(kāi)查詢(xún),統(tǒng)計(jì)每個(gè) cpu 的使用情況,檢查多個(gè) cpu 的負(fù)載是否平衡
通過(guò)前兩步,已能基本確定 cpu 是否存在瓶頸:
若 cpu 資源不足,可以調(diào)整應(yīng)用程序?qū)?CPU 的占用情況,使得應(yīng)用程序能夠更有效的使用 CPU,同時(shí)可以考慮增加更多的 CPU;
若 cpu 不是瓶頸,則著重查看系統(tǒng)內(nèi)存。
Step3 用 vmstat 查看內(nèi)存使用情況:
每行會(huì)輸出一些系統(tǒng)核心指標(biāo),這些指標(biāo)可以讓我們更詳細(xì)的了解系統(tǒng)狀態(tài)。后面跟的參數(shù) 1,表示每秒輸出一次統(tǒng)計(jì)信息,參數(shù) 2,表示一共輸出 2 次統(tǒng)計(jì)信息。表頭提示了每一列的含義,這只介紹一些和內(nèi)存性能調(diào)優(yōu)相關(guān)的列:
Memory 區(qū)域
swpd:表示切換到內(nèi)存交換區(qū)的內(nèi)存大小,即虛擬內(nèi)存已使用的大小(單位 KB),如果大于 0,表示你的機(jī)器物理內(nèi)存不足了,如果不是程序內(nèi)存泄露的原因,那么你該升級(jí)內(nèi)存了或者把耗內(nèi)存的任務(wù)遷移到其他機(jī)器。
free:表示當(dāng)前空閑的物理內(nèi)存(以千字節(jié)為單位), 如果剩余內(nèi)存不足,也會(huì)導(dǎo)致系統(tǒng)性能問(wèn)題。
buff:表示 baffers cached 內(nèi)存大小,也就是緩沖大小,一般對(duì)塊設(shè)備的讀寫(xiě)才需要緩沖。
Cache:表示 page cached 的內(nèi)存大小,也就是緩存大小,一般作為文件系統(tǒng)進(jìn)行緩沖,頻繁訪問(wèn)的文件都會(huì)被緩存,如果 cache 值非常大說(shuō)明緩存文件比較多,如果此時(shí) io 中的 bi 比較小,說(shuō)明文件系統(tǒng)效率比較好。
Swap 區(qū)域
si:表示有磁盤(pán)調(diào)入內(nèi)存,也就是內(nèi)存進(jìn)入內(nèi)存交換區(qū)的內(nèi)存大小; 通俗的講就是 每秒從磁盤(pán)讀入虛擬內(nèi)存的大小,如果這個(gè)值大于 0,表示物理內(nèi)存不夠用或者內(nèi)存泄露了,要查找耗內(nèi)存進(jìn)程解決掉。
so:表示由內(nèi)存進(jìn)入磁盤(pán),也就是由內(nèi)存交換區(qū)進(jìn)入內(nèi)存的內(nèi)存大小。
注意:一般情況下 si、so 的值都為 0,如果 si、so 的值長(zhǎng)期不為 0,則說(shuō)明系統(tǒng)內(nèi)存不足,需要增加系統(tǒng)內(nèi)存。
Step4 用 iostat 查看磁盤(pán) IO
tps:該設(shè)備每秒的傳輸次數(shù)(Indicate the number of transfers persecond that were issued to the device.)。一次傳輸 意思是 一次 I / O 請(qǐng)求。多個(gè)邏輯請(qǐng)求可能會(huì)被合并為 一次 I / O 請(qǐng)求。一次傳輸 請(qǐng)求的大小是未知的。
kB_read/s:每秒從設(shè)備 (drive expressed) 讀取的數(shù)據(jù)量;
kB_wrtn/s:每秒向設(shè)備 (drive expressed) 寫(xiě)入的數(shù)據(jù)量;
kB_read:讀取的總數(shù)據(jù)量;
kB_wrtn:寫(xiě)入的總數(shù)量數(shù)據(jù)量; 這些單位都為 Kilobytes
關(guān)注 %iowait,如果 CPU 和內(nèi)存受限的情況不存在,并且 %iowait 長(zhǎng)時(shí)間大于 25%,則認(rèn)為 IO 存在瓶頸。
收集磁盤(pán) IO 數(shù)據(jù)吞吐量(iostat ndash;d -k),大致估計(jì)系統(tǒng)數(shù)據(jù)吞吐量與應(yīng)用負(fù)載是否相匹配,排查是否有與業(yè)務(wù)無(wú)關(guān)的大量 IO 操作。
Step5 使用 sar ndash;d 查看磁盤(pán)讀寫(xiě):
其中:
tps: 每秒從物理磁盤(pán) I / O 的次數(shù). 多個(gè)邏輯請(qǐng)求會(huì)被合并為一個(gè) I / O 磁盤(pán)請(qǐng)求, 一次傳輸?shù)拇笮∈遣淮_定的。
rd_sec/s: 每秒讀扇區(qū)的次數(shù)。
wr_sec/s: 每秒寫(xiě)扇區(qū)的次數(shù)。
avgrq-sz: 平均每次設(shè)備 I / O 操作的數(shù)據(jù)大小(扇區(qū))。
avgqu-sz: 磁盤(pán)請(qǐng)求隊(duì)列的平均長(zhǎng)度。
await: 從請(qǐng)求磁盤(pán)操作到系統(tǒng)完成處理,每次請(qǐng)求的平均消耗時(shí)間,包括請(qǐng)求隊(duì)列等待時(shí)間,單位是毫秒(1 秒 =1000 毫秒)。
svctm: 系統(tǒng)處理每次請(qǐng)求的平均時(shí)間,不包括在請(qǐng)求隊(duì)列中消耗的時(shí)間。
%util:I/ O 請(qǐng)求占 CPU 的百分比,比率越大,說(shuō)明越飽和。
正常情況下 avserv 應(yīng)該是小于 avwait 值的, 如果 avserv 的值與 avwait 很接近,表示幾乎沒(méi)有 I / O 等待,磁盤(pán)性能很好; 如果 avwait 的值遠(yuǎn)高于 avserv 的值,則表示 I / O 隊(duì)列等待太長(zhǎng),系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?,磁盤(pán) IO 為系統(tǒng)瓶頸。
Step6 使用 netstat 查看網(wǎng)絡(luò):
1、通過(guò) ping 命令檢測(cè)網(wǎng)絡(luò)的連通性
2、通過(guò) netstat ndash;nltp 組合檢測(cè)網(wǎng)絡(luò)接口狀況
-u (udp)僅顯示 udp 相關(guān)選項(xiàng)
-l 僅列出有在 Listen (監(jiān)聽(tīng)) 的服務(wù)狀態(tài)
-n 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化成數(shù)字。
-t (tcp)僅顯示 tcp 相關(guān)選項(xiàng)
-p 顯示建立相關(guān)鏈接的程序名,
3、通過(guò) netstat ndash;r 組合檢測(cè)系統(tǒng)的路由表信息
cpu 瓶頸常見(jiàn)征兆:
很慢的響應(yīng)時(shí)間
cpu 空閑時(shí)間為零
過(guò)高的用戶占用 cpu 時(shí)間
過(guò)高的系統(tǒng)占用 cpu 時(shí)間
長(zhǎng)時(shí)間的有很長(zhǎng)的運(yùn)行進(jìn)程隊(duì)列
cpu 調(diào)優(yōu)方法:
平衡系統(tǒng)負(fù)載,在不同的期間運(yùn)行進(jìn)程,從而更有效地利用每天的 24 小時(shí)。
使用 nice 或 renice 優(yōu)化調(diào)度程序 mdash; mdash; 可為運(yùn)行進(jìn)程分配不同的優(yōu)先級(jí),以避免占用大量 cpu 資源。
增加資源,添加更多的 cpu
內(nèi)存瓶頸常見(jiàn)征兆:
很高的換頁(yè)率
交換空間使用率很高
進(jìn)程進(jìn)入不活動(dòng)狀態(tài);
交換區(qū)所有磁盤(pán)的活動(dòng)次數(shù)很高;
很高的全局系統(tǒng) CPU 利用率;
內(nèi)存不夠出錯(cuò)
內(nèi)存調(diào)優(yōu)方法:
保證交換空間分配合理(分配足夠多的交換空間、每個(gè)交換空間大小相同、每個(gè)交換空間分配在不同的硬盤(pán)上)
參數(shù)調(diào)整,調(diào)整內(nèi)存參數(shù)閥值
增加內(nèi)存資源
IO 瓶頸常見(jiàn)征兆:
過(guò)高的磁盤(pán)利用率
太長(zhǎng)的磁盤(pán)等待隊(duì)列
等待磁盤(pán) I / O 的時(shí)間所占的百分率太高
太高的物理 I / O 速率
過(guò)低的緩存 *** 率
太長(zhǎng)的運(yùn)行進(jìn)程隊(duì)列,但 CPU 卻空閑
IO 調(diào)優(yōu)方法:
一般來(lái)說(shuō),高的 %iowait 表明系統(tǒng)至少存在一個(gè)應(yīng)用程序問(wèn)題、缺少內(nèi)存問(wèn)題或低效的 I/O 子系統(tǒng)配置;
應(yīng)檢查應(yīng)用程序產(chǎn)生大量 IO 請(qǐng)求是否正常;
檢查是否是由于內(nèi)存交換空間頻繁換頁(yè)引起的 IO 問(wèn)題;
檢查磁盤(pán)配置情況是否合理
針對(duì)磁盤(pán) IO 本身的優(yōu)化來(lái)說(shuō),盡管存在一些 I/O 優(yōu)化參數(shù)的虛擬內(nèi)存等價(jià)項(xiàng),但是提高磁盤(pán) I/O 性能的方法仍然是正確地配置 Linux 系統(tǒng),而不僅僅是優(yōu)化相關(guān)的參數(shù)。
上述就是丸趣 TV 小編為大家分享的如何采用分段排查法診斷服務(wù)器性能了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。