CPU使用率的查看以及性能分析(perf top/record/report)

目錄

  • CPU使用率
  • 查看CPU使用率(top、pidstat解釋)
  • CPU使用率過高
    • perf top
    • perf record 和 perf report

CPU使用率

Linux通過/proc虛擬文件系統,向用戶空間提供了系統內部狀態的信息。
/proc/stat提供的就是系統的CPU和任務統計信息。
執行命令cat /proc/stat | grep ^cpu,表示只保留各個CPU的數據,結果如下:
在這里插入圖片描述
輸出表示:
第一行表示所有CPU的不同場景下的累加節拍數。
Tips:為了維護 CPU 時間,Linux 通過事先定義的節拍率(內核中表示為 HZ),觸發時間中斷,并使用全局變量 Jiffies 記錄了開機以來的節拍數。每發生一次時間中斷,Jiffies 的值就加 1。通過命令grep 'CONFIG_HZ=' /boot/config-$(uname -r)可以查看系統配置的節拍率,即每秒鐘觸發多少次時間中斷。
第一列:CPU編號
接下來的幾列:
usr(縮寫為us),代表用戶態CPU時間。不包含nice時間,包括guest時間
nice(縮寫ni),代表低優先級用戶態CPU時間。nice可取范圍為-20~19,數值越大,優先級越低。
system(縮寫為sys),代表內核態CPU時間。
idle(縮寫為id),代表空閑時間。不包括等待I/O的時間(iowait)
iowait(縮寫為wa),代表等待I/O的CPU時間
irq(縮寫為hi),代表處理硬中斷的CPU時間
softirq(縮寫為si),代表處理軟中斷的CPU時間
steal(縮寫為st),代表當系統運行在虛擬機中時,被其他虛擬機占用的CPU時間
guest,代表虛擬化運行其他操作系統的時間,也就是運行虛擬機的CPU時間
guest_nice(縮寫為gnice),代表以低優先級運行虛擬機的時間。
CPU使用率的定義則是:
在這里插入圖片描述
/proc/stat 的數據記錄的是開機以來的節拍累積值,所以算出來的是平均CPU使用率。
一般來說,性能工具回取間隔一段時間(如3s)的兩次值,作差后,再計算這段時間內的平均CPU使用率:
在這里插入圖片描述

查看CPU使用率(top、pidstat解釋)

關于top與ps:
top 顯示了系統總體的 CPU 和內存使用情況,以及各個進程的資源使用情況。
ps 則只顯示了每個進程的資源使用情況。
top命令中的第三行%cpu即系統CPU使用率,默認顯示的是平均值
在這里插入圖片描述
空白行之后是進程實時信息,每個進程都有一個%CPU列,表示進程的CPU使用率。該使用率 = 用戶態 + 內核態CPU使用率的總和,包括進程用戶空間使用的CPU、通過系統調用執行的內核空間CPU、就緒隊列等待運行的CPU。
再按1,切換顯示每個CPU使用率。
在這里插入圖片描述
接下來使用pidstat:
包括了:
用戶態CPU使用率(%usr)
內核態CPU使用率(%system)
運行虛擬機CPU使用率(%guest)
等待CPU使用率(%wait)
總的CPU使用率(%CPU)
最后輸出平均值

# 隔 1 秒 輸出一組數據, 共輸出5組
pidstat 1 5
21時55分30秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
21時55分31秒     0        54    0.00    1.00    0.00    0.00    1.00     7  ksoftirqd/7
21時55分31秒  1000      1311    1.00    0.00    0.00    0.00    1.00     4  gnome-shell
21時55分31秒  1000      3170    0.00    1.00    0.00    0.00    1.00     1  pidstat
...
平均時間:   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
平均時間:     0        54    0.00    0.25    0.00    0.00    0.25     -  ksoftirqd/7
平均時間:     0       135    0.00    0.25    0.00    0.00    0.25     -  kworker/u16:2-phy0
平均時間:  1000       998    0.25    0.25    0.00    0.00    0.50     -  Xorg
平均時間:  1000      1311    1.25    0.50    0.00    0.00    1.75     -  gnome-shell
平均時間:  1000      2370    0.25    0.00    0.00    0.00    0.25     -  chrome
平均時間:  1000      2712    0.75    0.00    0.00    0.00    0.75     -  chrome
平均時間:  1000      3157    0.50    0.00    0.00    0.00    0.50     -  gnome-terminal-
平均時間:  1000      3170    0.25    0.75    0.00    0.00    1.00     -  pidstat

CPU使用率過高

使用perf,它以性能事件采樣為基礎,可以分析系統的各種事件和內核性能,也可以分析指定應用程序的性能問題。

perf top

類似于top,它能夠實時顯示占用CPU時鐘最多的函數或者指令,因此可以用來查找熱點函數。如:

$ perf top
2 Samples: 833
3 Overhead
of event 'cpu-clock', Event count (approx.): 97742399
Shared Object Symbol
4 7.28% perf [.] 0x00000000001f78a4
5 4.72% [kernel] [k] vsnprintf
6 4.32% [kernel] [k] module_get_kallsym
7 3.65% [kernel] [k] _raw_spin_unlock_irqrestore

輸出結果解釋:
第一行,包含三個數據: 采樣數(Samples)、事件類型(event)和事件總數量(Event count)。
下面的表格數據包含四列:
第一列: Overhead,該符號的性能事件在所有采樣中的比率
第二列:Shared,該函數或指令所在的動態共享對象,如內核、進程名、動態鏈接庫名、內核模塊等
第三列:Object,是動態共享對象的類型,比如[.]表示用戶空間的可執行程序,或者動態鏈接庫,[k]表示內核空間。
第四列:Symbol,符號名,即函數名。當函數名未知時,用16進制的地址表示

perf record 和 perf report

perf top 能夠實時展示系統性能,但是不能保存數據,也就無法用于離線或者后續的分析。
而perf record 提供了保存數據的功能,保存后的數據,需要使用perf report 來解析展示:

perf record # 按下 ctrl + c 終止采樣
[perf record: Woken up 1 times to write data]
[perf record: Captured and wrote 0.452 MB perf.data(6093 samples) ]perf report # 展示類似于perf top的報告

在實際使用中經常為perf top 和 perf record 加上 -g 參數,開啟調用關系的采樣,方便根據調用鏈來分析性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376898.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenSSL再曝CCS注入漏洞-心傷未愈又成篩子

太戲劇了,昨晚看了佳片有約,還不錯,2012版的《完美回顧》,像我這樣的人依舊選擇用電視或者去影院看電影,在沒有中間插播廣告的時候,體驗憋尿得過程中,總是能突然有非常多的想法,這是…

如何從JavaScript數組中獲取多個隨機唯一元素?

The JavaScript is a very versatile language and it has a function almost everything that you want. JavaScript是一種非常通用的語言,它幾乎具有您想要的所有功能。 Here, we will show you how to generate random unique elements from an array in JavaSc…

用SQL語句添加刪除修改字段

1.增加字段 alter table docdsp add dspcodechar(200)2.刪除字段 ALTER TABLE table_NAME DROP COLUMNcolumn_NAME3.修改字段類型 ALTER TABLE table_name ALTER COLUMNcolumn_name new_data_type4.sp_rename 改名 EXEC sp_rename [dbo].[Table_1].[fi…

通過命令修改wampserver的mysql密碼

WAMP安裝好后,mysql教程密碼是為空的,那么要如何修改呢?其實很簡單,通過幾條指令就行了,下面我就一步步來操作。 首先,通過WAMP打開mysql控制臺。 提示輸入密碼,因為現在是空,所以直…

DBNull

1、執行ExecuteScalar時,要進行Null判斷,因為對Null進行操作會報:NullReferenceException 2、返回DBNull的情況,因為DBNull是用來表示數據庫中Null的,所以如果數據中返回null,程序中就是DBNull&#xff0c…

什么是ACID理論(二階段、三階段提交、TCC)

目錄二階段提交協議TCC(Try-Confirm-Cancel)預留成功預留失敗三階段提交協議總結Some questionsreferenceACID理論時對事務特性的抽象和總結,想要實現ACID需要掌握二階段提交協議以及TCC 這里是有關協議的論文PDF鏈接: CONCURRENC…

oracle安裝后新建數據庫實例及配置

ORA-12514 TNS 監聽程序當前無法識別連接描述符中請求服務 的解決方法 (2011-01-20 13:50:37) 轉載▼標簽: it 分類: 技術早上同事用PL/SQL連接虛擬機中的Oracle數據庫,發現又報了“ORA-12514 TNS 監聽程序當前無法識別連接描述符中請求服務…

html5游戲開發--動靜結合(二)-用地圖塊拼成大地圖 初探lufylegend

一、前言 本次教程將向大家講解如何用html5將小地圖塊拼成大地圖,以及如何用現有的高級html5游戲開發庫件lufylegend.js開發游戲。 首先讓我們來了解了解如何用html5實現動畫,畢竟“動靜結合”是先有動再有靜。看了上一章的內容,或許你就有了…

BASE理論(基本可用策略+ 最終一致性實現)

目錄實現基本可用的幾個策略1、流量削峰(不同地區售票時間錯峰出售)2、延遲響應,異步處理(買票排隊,基于隊列先收到用戶買票請求,排隊異步處理,延遲響應)3、體驗降級(看到…

一天一道算法題--6.15--卡特蘭數

感謝微信平臺---一天一道算法題---每天多一點進步- problem: 12個高矮不同的人 排成兩排 每排必須是從矮到高排列 而且第二行比對應的第一排的人高 問排列方式有多少種? analyse: 據說 這題 是來自于 阿里巴巴的面試題 果然 很有分量 ~~ 我反正 胡思亂想了好多 沒搞…

現有一些開源ESB總線的比較

現有的開源ESB總線中,自從2003年第一個開源總線Mule出現后,如今已經是百花爭鳴的景象了。如今我就對現有的各種開源ESB總線根據性能、可擴展性、資料文檔完整程度以及整合難易程度等方面展開。 一.CXF CXF的定位不是ESB總線,而是一…

Paxos算法(Basic Paxos 與 Multi-Paxos思想)

目錄Basic Paxos三個角色達成共識的方法對于Basic Paxos的總結Multi-Paxos領導者優化 Basic Paxos 執行referencePaxos 算法包含 2 個部分: 1、Basic Paxos : 描述多節點之間如何就某個值達成共識 2、Multi-Paxos : 描述執行多個Basic Paxos實…

vs2012下調試mvc4源代碼

當前流行的應該是mvc3才對。然后在研究mvc3的源代碼時候,Html這個屬性下的擴展方法Partial()都沒有。IntelliSense不會提示該方法,找了半天的資料也問了一些博友,沒看到好的解決棒法。最后沒轍另辟蹊蹺,就開始著手研究mvc4的源代碼…

JAVA UDP網絡編程學習筆記

一、UDP網絡編程概述 采用TCP協議通信時,客戶端的Socket必須先與服務器建立連接,連接建立成功后,服務器端也會持有客戶端連接的Socket,客戶端的Socket與服務器端的Socket是對應的,它們構成了兩個端點之間的虛擬通信鏈路…

firefox 插件開發

IDE,你可以嘗試下NetBeans foxbeans這個插件。轉載于:https://www.cnblogs.com/sode/archive/2013/01/25/2876562.html

13種負載均衡算法

目錄前言(1)輪轉調度(Round-Robin Scheduling)算法(2)加權輪轉調度(Weighted Round-Robin Scheduling)算法(3)隨機均衡調度(Random Scheduling&am…

對于shell腳本參數獲取時的一點小技巧

問題如下: 根據腳本參數的個數$#進行一個循環,在依次輸出每個參數$1 $2 $3...... 我有一個循環變量i $i 取到這時的i為1,我想使用這個1再去調用$1,也是就是打印出第一個參數 就是$($i)的意思來取到第幾個參數,當然$($i)是不好用的…

(轉)頁游安全攻與防,SWF加密和隱藏密匙

原文鏈接:http://netsecurity.51cto.com/art/201211/364775.htm 頁游,最最核心的就是客戶端(swf)與服務端的游戲通信了。游戲通信產生的封包,內容是否可識別,可篡改,可重放,處理邏輯…

C++自動類型推導 : auto 與 decltype 用法

基本用法與區別 auto 總是推導出“值類型”,絕不會是“引用”,如果有引用,auto會把引用去掉,推導出值類型; auto 可以附加上 const、volatile、*、& 這樣的類型修飾符,得到新的類型。 auto x 10L; // auto推導為…

C++智能指針使用指南 part1:基本使用

加粗樣式>TOC 智能指針是代理模式的具體應用,它使用 RAII 技術代理了裸指針,能夠自動釋放內存, 無需程序員干預,所以被稱為“智能指針”。 智能指針不是指針,而是一個對象,所以不要對其調用delete&…