您好,登錄后才能下訂單哦!
楊海春,曾在從興技術(shù)有限公司擔(dān)任主要設(shè)計(jì)開發(fā)崗,熟悉移動計(jì)費(fèi)系統(tǒng)整體系統(tǒng)架構(gòu)。目前就職于騰訊計(jì)算機(jī)系統(tǒng)有限公司,擔(dān)任工程師職位,熟悉日志計(jì)費(fèi)系統(tǒng),離線計(jì)算等場景。
軟件系統(tǒng)跑在機(jī)器上,處理能力受硬件制約,所以,單機(jī)處理能力會有上限。評估機(jī)器處理能力的上限,檢查程序的瓶頸在哪,有助于程序性能分析。
主要的幾大硬件:CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤。本文主要結(jié)合本人經(jīng)驗(yàn)介紹這幾大硬件的性能評估工具。
vmstat 1 10
第一個參數(shù):采樣頻率
第二個參數(shù):采樣次數(shù)
結(jié)果參數(shù):
--procs--
r:運(yùn)行和等待CPU時間片的進(jìn)程數(shù)
b:等待資源的進(jìn)程數(shù)。如等待網(wǎng)絡(luò)I/O
如果r值長期大于CPU的個數(shù), 則CPU遇到瓶頸
--cpu--
us:用戶進(jìn)程消耗CPU時間百分比
sy :內(nèi)核進(jìn)程消耗的CPU時間百分比
如上圖,跑了幾個耗cpu的程序,發(fā)現(xiàn)us長期接近100,cpu已經(jīng)跑滿了。這個時候,可能需要考慮優(yōu)化應(yīng)用服務(wù)算法了。
一般:如果us長時間大于50,需要考慮優(yōu)化程序算法等。
sy + us > 80
可能存在CPU瓶頸了
舉例:sar -u 1 5
%idle
值高,表示CPU較空閑。
如果idle值持續(xù)低于10,表示系統(tǒng)中目前的瓶頸在CPU。
如上圖,CPU已經(jīng)達(dá)到瓶頸了。
舉例:free –g or free –m
-g:以GB為單位查看
-m:以MB為單位查看
關(guān)注第二行:
-buffers/cache=Mem行:used-buffers-cached
+buffers/cache=Mem行:free+buffers+cached
一般第二行 +buffers/cache
表示應(yīng)用程序可使用的內(nèi)存。
cached里的內(nèi)容,一般可以釋放給應(yīng)用程序使用。
釋放cached里的內(nèi)存,看是否可用:
echo 3 > /proc/sys/vm/drop_caches
再查看內(nèi)存:
發(fā)現(xiàn)末完全釋放,只釋放了一部分。(與上面的圖比較)
檢查:發(fā)現(xiàn)部分共享內(nèi)存占用,無法釋放,應(yīng)用程序也就無法使用這部分了。
刪除目前沒有使用的共享內(nèi)存:
ipcs -m | awk '$6 == 0 {system("ipcrm -m "$2)}'
再執(zhí)行
echo 3 > /proc/sys/vm/drop_caches
再執(zhí)行
free –m
cached里的內(nèi)存又釋放了一些。
剩下的,部分的共享內(nèi)存,應(yīng)用程序正常使用,無法釋放。
所以,真正可用的內(nèi)存,應(yīng)該是 2400M左右。
還可以使用cat /proc/meminfo
查看
舉例:
iostat -d -x -k 1 10
-d 表示,顯示設(shè)備(磁盤)使用狀態(tài)
-x將用于顯示和io相關(guān)的擴(kuò)展數(shù)據(jù)
-k某些使用block為單位的列強(qiáng)制使用Kilobytes為單位
await I/O
請求的平均等待時間,單位毫秒;值越小,性能越好;
svctm I/O
請求的平均服務(wù)時間,單位毫秒
%util
統(tǒng)計(jì)時間內(nèi)有百分幾的時間用于I/O操作。接近100,表示磁盤已經(jīng)接近滿負(fù)荷運(yùn)行了。
如上圖,如果await時間遠(yuǎn)大于svctm,表示等待I/O隊(duì)列的時候太大,磁盤已經(jīng)達(dá)到瓶頸了。
舉例:
sar –d 1 10
avwait:隊(duì)列占滿時傳送請求等待隊(duì)列空閑的平均時間。
avserv:完成傳送請求所需平均時間(毫秒)。
%util
: 100磁盤已經(jīng)繁忙了。
看寫入速度,100多M每秒。要提高寫入速度,可以換更快的盤。
舉例:
ss -a -tp -s|grep agent
ss –s
查看現(xiàn)有連接數(shù)等:
常用選項(xiàng):
-a 顯示所有的sockets
-l 顯示正在監(jiān)聽的
-n 顯示數(shù)字IP和端口,不通過域名服務(wù)器
-p 顯示使用socket的對應(yīng)的程序
-s 打印出統(tǒng)計(jì)信息。
舉例:
top
%us:指的是cpu用在用戶態(tài)程序上的時間;
%sy:指的是cpu用在內(nèi)核態(tài)程序上的時間;
%ni:指的是用在nice優(yōu)先級調(diào)整過的用戶態(tài)程序上的時間;
%id:指的是cpu空閑時間;
load average:
任務(wù)隊(duì)列的平均長度
1分鐘、5分鐘、15分鐘前到現(xiàn)在平均值
三個值長時間大于CPU核數(shù)的話,表示機(jī)器很繁忙。上圖開了8個耗CPU程序,可以發(fā)現(xiàn),1分鐘均值已經(jīng)越過CPU個數(shù)(機(jī)器CPU個數(shù)為8核)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。