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