日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何使用LinuxPerf查看函數(shù)性能?(linuxperf查看函數(shù))

Linux Perf是一個(gè)功能強(qiáng)大的性能分析工具,可用于檢查Linux系統(tǒng)中函數(shù)的性能。它可以幫助程序員找出正在運(yùn)行的程序或代碼的瓶頸,并提供實(shí)時(shí)和歷史數(shù)據(jù)來指導(dǎo)和優(yōu)化應(yīng)用程序的性能。本文將介紹如何使用Linux Perf來檢查函數(shù)的性能。

宣州網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,宣州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為宣州上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的宣州做網(wǎng)站的公司定做!

1. 安裝Perf

在使用Perf之前,首先需要安裝它。Perf已經(jīng)包含在Linux內(nèi)核的源代碼中,所以可以直接使用命令行安裝:

“`

sudo apt-get update

sudo apt-get install linux-tools-common linux-tools-generic linux-tools-$(uname -r)

“`

安裝完之后,您可以開始使用Perf工具來檢查函數(shù)的性能。

2. 使用Perf進(jìn)行函數(shù)性能分析

在了解如何使用Perf之前,首先需要了解Perf可以監(jiān)視哪些相關(guān)的性能瓶頸。以下是Perf支持的功能:

CPU事件,例如硬件性能計(jì)數(shù)器和CPU clock等。

軟件事件,例如CPU周期和指令等。

監(jiān)視事件周期性和時(shí)間段性。

打印調(diào)用堆棧和棧跟蹤等。

制作和記錄跟蹤點(diǎn),可以用于可視化。

了解這些功能之后,您可以編寫一些代碼來測試Perf。以下是一些使用Perf進(jìn)行性能分析的示例:

$ perf stat -e cycles,instructions -p PID

這個(gè)命令將檢查進(jìn)程ID為PID的運(yùn)行時(shí)間(在周期和指令方面)。

要收集采樣,可以使用以下命令:

$ perf record ./a.out

這將收集程序a.out的采樣,并將結(jié)果存儲(chǔ)在perf.data文件中。

要打印收集的跟蹤數(shù)據(jù),可以使用以下命令:

$ perf report

或者,您可以使用以下命令:

$ perf report -n –stdio

這將輸出統(tǒng)計(jì)數(shù)據(jù),以幫助您查找性能瓶頸。

要檢查特定函數(shù)的性能,可以使用以下命令:

$ perf record -e cycles,instructions -g ./a.out

這將收集采樣數(shù)據(jù)和調(diào)用鏈(即函數(shù)調(diào)用)。

在此之后,您可以使用以下命令查看輸出:

$ perf report -g

這將提供有關(guān)在函數(shù)中花費(fèi)的時(shí)間和總調(diào)用次數(shù)等信息。

現(xiàn)在,您了解了如何在Linux上使用Perf分析函數(shù)的性能。使用這些命令,您可以比以往更加精確地了解代碼的運(yùn)行情況,并找到可能影響程序性能的問題。如果您進(jìn)行更詳細(xì)的分析,可以使用多種選項(xiàng)進(jìn)行更深入的探索。

相關(guān)問題拓展閱讀:

  • cpu指標(biāo)含義解釋
  • linux服務(wù)器cpu性能參數(shù)如何看
  • 容器內(nèi)的Linux診斷工具x.tools

cpu指標(biāo)含義解釋

CPU使用率

Linux 通過 /proc 虛擬文件系統(tǒng),向用戶空間提供了系統(tǒng)內(nèi)部狀態(tài)的信息,而 /proc/stat 提供的就是系統(tǒng)的 CPU 和任務(wù)統(tǒng)計(jì)信息

proc – process information pseudo-file system

查螞判詢 man proc

關(guān)鍵指標(biāo)常用參數(shù)

user(通??s寫為 us),代表用戶態(tài) CPU 時(shí)間。注意,它不包括下面的 nice 時(shí)間,但包括了 guest 時(shí)間。

nice(通??s寫為 ni),代表低優(yōu)先級(jí)用戶態(tài) CPU 時(shí)間,也就是進(jìn)程的 nice 值被調(diào)整為 1-19 之間時(shí)的 CPU 時(shí)間。這里注意,nice 可取值范圍是 -20 到 19,數(shù)值越大,優(yōu)先級(jí)反而越低。

system(通??s寫為 sys),代表內(nèi)核態(tài) CPU 時(shí)間。

idle(通常縮寫為 id),代表空閑時(shí)間。注意,它不包括等待 I/O 的時(shí)間(iowait)。

iowait(通??s寫為 wa),代表等待 I/O 的 CPU 時(shí)間。

irq(通常縮寫為 hi),代表處理硬中斷的 CPU 時(shí)間。

softirq(通??s寫為 si),代表處理軟中斷的 CPU 時(shí)間。

steal(通常縮寫為 st),代表當(dāng)系統(tǒng)運(yùn)行在虛擬機(jī)中的時(shí)候,被其他虛擬機(jī)占用的 CPU 時(shí)間。

guest(通??s寫為 guest),代表通過虛擬化運(yùn)行其他操作系統(tǒng)的時(shí)間,也就是運(yùn)行虛擬機(jī)的 CPU 時(shí)間。

guest_nice(通??s寫為 gnice),代表以低優(yōu)先級(jí)運(yùn)行虛擬機(jī)的時(shí)間

工具使用

top

# top

top – 15:16:08 up 4 days,  3:12,  1 user,  load average: 3.77, 2.88, 2.52

Tasks: 255 total,  1 running, 254 sleeping,  0 stopped,  0 zombie

%Cpu0  : 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

%Cpu1  : 42.3 us,  4.8 sy,  0.0 ni, 50.2 id,  0.7 wa,  0.0 hi,  2.0 si,  0.0 st

KiB Mem :total,free,used,buff/cache

KiB Swap:total,free,used.avail Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM    TIME+ COMMAND

rootS  93.7  0.0 832:50.08 kswapd0

rootS  64.2  0.3  25:58.04 t

rootS  6.6  2.1 317:33.63 kubelet

rootR  0.3  0.0  0:00.53 top

// top 默認(rèn)顯示的是所有 CPU 的平均值,這個(gè)時(shí)候你只需要按下數(shù)字 1 ,就可以切換到每個(gè) CPU 的使用率了。

S 列(也就是啟伏 Status 列)表示進(jìn)程的狀態(tài)

進(jìn)程的狀態(tài)主要有以下幾個(gè):

R 是 Running 或 Runnable 的縮寫,表示進(jìn)程在 CPU 的就緒隊(duì)列中,正在運(yùn)行或者正在等待運(yùn)行。

D 是 Disk Sleep 的縮寫,也就是不可中斷狀態(tài)睡眠(Uninterruptible Sleep),一般表示進(jìn)程正在跟硬件交互,并且交互過程不允許被其他進(jìn)程或中斷打斷。

Z 是 Zombie 的縮寫,它表示僵尸悶旁改進(jìn)程,也就是進(jìn)程實(shí)際上已經(jīng)結(jié)束了,但是父進(jìn)程還沒有回收它的資源(比如進(jìn)程的描述符、PID 等)。

S 是 Interruptible Sleep 的縮寫,也就是可中斷狀態(tài)睡眠,表示進(jìn)程因?yàn)榈却硞€(gè)事件而被系統(tǒng)掛起。當(dāng)進(jìn)程等待的事件發(fā)生時(shí),它會(huì)被喚醒并進(jìn)入 R 狀態(tài)。

I 是 Idle 的縮寫,也就是空閑狀態(tài),用在不可中斷睡眠的內(nèi)核線程上。前面說了,硬件交互導(dǎo)致的不可中斷進(jìn)程用 D 表示,但對某些內(nèi)核線程來說,它們有可能實(shí)際上并沒有任何負(fù)載,用 Idle 正是為了區(qū)分這種情況。要注意,D 狀態(tài)的進(jìn)程會(huì)導(dǎo)致平均負(fù)載升高, I 狀態(tài)的進(jìn)程卻不會(huì)。

pidstat

用戶態(tài) CPU 使用率 (%usr);

內(nèi)核態(tài) CPU 使用率(%system);

運(yùn)行虛擬機(jī) CPU 使用率(%guest);

等待 CPU 使用率(%wait);

總的 CPU 使用率(%CPU)。

# pidstat 1 5

Linux 3.10.0-1062.4.1.el7.x86_64 (instance-010oj085)/06/2023  _x86_64_    (2 CPU)

03:23:11 PM  UIDPID    %usr %system  %guest    %CPU  CPU  Command

03:23:12 PM….kube-controller

03:23:12 PM….etcd

03:23:12 PM….pidstat

03:23:12 PM….hosteye

03:23:12 PM….kubelet

03:23:12 PM….kube-apiserver

03:23:12 PM….kswapd0

perf

perf 是 Linux 2.6.31 以后內(nèi)置的性能分析工具。它以性能事件采樣為基礎(chǔ),不僅可以分析系統(tǒng)的各種事件和內(nèi)核性能,還可以用來分析指定應(yīng)用程序的性能問題??梢圆檎覠狳c(diǎn)函數(shù)。

# perf top

Samples: 75K of event ‘cycles’, 4000 Hz, Event count (approx.):lost: 0/0 drop: 0/0

Overhead  Shared Object    Symbol

  1.57%  kswapd 0xc

  1.10%  perf-3482.map    0x00007fdbbf621e8c   

  0.68%  t 0xf147   

  0.61%  kswapd 0xc8647 

  0.60%  perf-3482.map    0x00007fdbbf621eb5

輸出結(jié)果中,之一行包含三個(gè)數(shù)據(jù),分別是采樣數(shù)(Samples)、事件類型(event)和事件總數(shù)量(Event count)。

之一列 Overhead ,是該符號(hào)的性能事件在所有采樣中的比例,用百分比來表示。

第二列 Shared ,是該函數(shù)或指令所在的動(dòng)態(tài)共享對象(Dynamic Shared Object),如內(nèi)核、進(jìn)程名、動(dòng)態(tài)鏈接庫名、內(nèi)核模塊名等。

第三列 Object ,是動(dòng)態(tài)共享對象的類型。比如 表示用戶空間的可執(zhí)行程序、或者動(dòng)態(tài)鏈接庫,而 則表示內(nèi)核空間。

最后一列 Symbol 是符號(hào)名,也就是函數(shù)名。當(dāng)函數(shù)名未知時(shí),用十六進(jìn)制的地址來表示。

dstat

dstat可以讓你實(shí)時(shí)地看到所有系統(tǒng)資源,例如,你能夠通過統(tǒng)計(jì)IDE控制器當(dāng)前狀態(tài)來比較磁盤利用率,或者直接通過網(wǎng)絡(luò)帶寬數(shù)值來比較磁盤的吞吐率(在相同的時(shí)間間隔內(nèi))

# dstat

You did not select any stats, using -cdngy by default.

—-total-cpu-usage—- -dsk/total- -net/total- —paging– —system–

usr sys idl wai hiq siq| read  writ| recv  send|  in  out | int  csw

|4910B  470k|||

|k| 394k  267k||

|k| 362k  230k||

|B| 287k  196k||

|k| 360k  235k||

默認(rèn)輸出信息:

CPU狀態(tài):CPU的使用率。這項(xiàng)報(bào)告更有趣的部分是顯示了用戶,系統(tǒng)和空閑部分,這更好地分析了CPU當(dāng)前的使用狀況。如果你看到”wait”一欄中,CPU的狀態(tài)是一個(gè)高使用率值,那說明系統(tǒng)存在一些其它問題。當(dāng)CPU的狀態(tài)處在”waits”時(shí),那是因?yàn)樗诘却齀/O設(shè)備(例如內(nèi)存,磁盤或者網(wǎng)絡(luò))的響應(yīng)而且還沒有收到。

磁盤統(tǒng)計(jì):磁盤的讀寫操作,這一欄顯示磁盤的讀、寫總數(shù)。

網(wǎng)絡(luò)統(tǒng)計(jì):網(wǎng)絡(luò)設(shè)備發(fā)送和接受的數(shù)據(jù),這一欄顯示的網(wǎng)絡(luò)收、發(fā)數(shù)據(jù)總數(shù)。

分頁統(tǒng)計(jì):系統(tǒng)的分頁活動(dòng)。分頁指的是一種內(nèi)存管理技術(shù)用于查找系統(tǒng)場景,一個(gè)較大的分頁表明系統(tǒng)正在使用大量的交換空間,或者說內(nèi)存非常分散,大多數(shù)情況下你都希望看到page in(換入)和page out(換出)的值是0 0。

系統(tǒng)統(tǒng)計(jì):這一項(xiàng)顯示的是中斷(int)和上下文切換(csw)。這項(xiàng)統(tǒng)計(jì)僅在有比較基線時(shí)才有意義。這一欄中較高的統(tǒng)計(jì)值通常表示大量的進(jìn)程造成擁塞,需要對CPU進(jìn)行關(guān)注。你的服務(wù)器一般情況下都會(huì)運(yùn)行運(yùn)行一些程序,所以這項(xiàng)總是顯示一些數(shù)值

pstree

// 指定 pid 查找父進(jìn)程

# pstree -aps 18035

systemd,1 –switched-root –system –deserialize 22

  `-sshd,2504 -D

`-sshd,16674

`-bash,16676

`-top,18035

總結(jié)

用戶 CPU 和 Nice CPU 高,說明用戶態(tài)進(jìn)程占用了較多的 CPU,所以應(yīng)該著重排查進(jìn)程的性能問題。

系統(tǒng) CPU 高,說明內(nèi)核態(tài)占用了較多的 CPU,所以應(yīng)該著重排查內(nèi)核線程或者系統(tǒng)調(diào)用的性能問題。

I/O 等待 CPU 高,說明等待 I/O 的時(shí)間比較長,所以應(yīng)該著重排查系統(tǒng)存儲(chǔ)是不是出現(xiàn)了 I/O 問題。

軟中斷和硬中斷高,說明軟中斷或硬中斷的處理程序占用了較多的 CPU,所以應(yīng)該著重排查內(nèi)核中的中斷服務(wù)程序。

進(jìn)程狀態(tài)

ps 或者 top ,可以查看進(jìn)程的狀態(tài),這些狀態(tài)包括運(yùn)行(R)、空閑(I)、不可中斷睡眠(D)、可中斷睡眠(S)、僵尸(Z)以及暫停(T)等。

不可中斷狀態(tài),表示進(jìn)程正在跟硬件交互,為了保護(hù)進(jìn)程數(shù)據(jù)和硬件的一致性,系統(tǒng)不允許其他進(jìn)程或中斷打斷這個(gè)進(jìn)程。進(jìn)程長時(shí)間處于不可中斷狀態(tài),通常表示系統(tǒng)有 I/O 性能問題。

僵尸進(jìn)程表示進(jìn)程已經(jīng)退出,但它的父進(jìn)程還沒有回收子進(jìn)程占用的資源。短暫的僵尸狀態(tài)我們通常不必理會(huì),但進(jìn)程長時(shí)間處于僵尸狀態(tài),就應(yīng)該注意了,可能有應(yīng)用程序沒有正常處理子進(jìn)程的退出。

常見問題

CPU使用率很高,通過top等命令找不到相應(yīng)的進(jìn)程

應(yīng)用里直接調(diào)用了其他二進(jìn)制程序,這些程序通常運(yùn)行時(shí)間比較短,通過 top 等工具也不容易發(fā)現(xiàn)。

linux服務(wù)器cpu性能參數(shù)如何看

processor: 44(處理器線程序號(hào),包括內(nèi)核和超線程)

vendor_id: AuthenticAMD(品牌AMD)

cpu family : 21(CPU家族代號(hào))

model: 1(型號(hào)代號(hào))

model name : AMD Opteron(TM) Processor 6234(型號(hào)名稱)

stepping: 2(工藝步進(jìn))

cpu MHz: 2400.127(主頻2.4G)

cache size : 2023 KB(答搏消緩存2M)

physical id : 0(CPU物理封裝的序號(hào))銀仔

siblings: 12(邏輯處理器數(shù)量,相當(dāng)于線程數(shù)。)清知

core id: 5(CPU物理內(nèi)核的序號(hào))

cpu cores: 6(CPU物理內(nèi)核的數(shù)量)

apicid: 43

initial apicid : 11

fpu: yes

fpu_exception : yes

cpuid level : 13

wp: yes

沒有12位的處理器。你的CPU是64位的。

由于AMD采用多線程技術(shù)與Intel不一樣,這款CPU應(yīng)描述為6模塊12核,而不是6核12線程。

processor:(44個(gè)線程)

vendor_id: AuthenticAMD (amd 這個(gè)不用多說吧)

cpu family :(cpu 家族)

model: 1 (運(yùn)行模式 1 )

model name : AMD Opteron(TM) Processor(模梁孫式名稱)

stepping:(cpu時(shí)鐘間隔)

cpu MHz: 2400.127 (主頻)

cache size : 2023 KB (緩存大小 2M)

physical id : 0 (物理ID號(hào))

siblings:(橡改鏈12位)

core id:(核心ID號(hào))

cpu cores: 6 (殲殲核心數(shù):6核)

apicid: 43

initial apicid :

fpu: yes

fpu_exception : yes

cpuid level : 13

wp: yes

AMD Opteron(TM) Processor 6234

這一句足夠了。

實(shí)際來櫻蔽說要看你的機(jī)器到底什么配置。如果是 VPS 這種虛擬機(jī),CPU 型號(hào)和實(shí)際系統(tǒng)能用的 CPU 性能都是可以被限制的。敏螞看這堆信息沒什么意義。還不如直接打脊拿州開機(jī)箱看看,如果是獨(dú)立服務(wù)器,一般都應(yīng)該知道具體配置了。服務(wù)器我還沒見到坑人說好 CPU 結(jié)果上破爛貨的掛羊頭賣狗肉的事情。

型橘拆櫻御碰號(hào) : AMD Opteron(TM) Processor

cpu MHz: 2400.127

CPU核圓叢心: 6

容器內(nèi)的Linux診斷工具x.tools

Linux上有大量的問題診斷工具,如perf、bcc等,但這些診斷工具,雖然功能強(qiáng)大,但卻需要很高的權(quán)限才可以使用。

而0x.tools這個(gè)工具提供了一個(gè)很好的思路,通過采樣 /proc 目錄來診斷問題,對被測量程序幾乎無性能影響,且只要與目標(biāo)進(jìn)程擁有同等級(jí)的權(quán)限,即可正常使用。

不要小看這個(gè)權(quán)限區(qū)別,在互聯(lián)網(wǎng)大廠,開發(fā)同學(xué)一般只能嘩拿逗獲取到一個(gè)受限于容器內(nèi)的shell環(huán)境,想要獲取機(jī)器的root權(quán)限幾乎是不可能的。

實(shí)際上0x.tools里的工具大多數(shù)是腳本,如psn工具是python腳本,因此直接將代碼clone下來,然后執(zhí)行 bin/psn 也是可以的。

psn 工具用來觀測系統(tǒng)中當(dāng)前活躍的線程正在做什么,如線程在做什么系統(tǒng)調(diào)用、寫什么文件、阻塞在哪個(gè)內(nèi)核函數(shù)下?

如上,默認(rèn)情況下,psn采樣 /proc 目錄下每個(gè)線程的 /proc/$pid/stat 文件,采樣5秒鐘,將R(正在運(yùn)行)或D(不可中斷休眠)狀態(tài)的線程的數(shù)據(jù)記錄下來,并做匯總。

由于R或D狀態(tài)的線程都是活躍線程,被采樣到的次數(shù)越多,則越說明這些線程敏梁運(yùn)行得更慢或更頻繁。

通過 -G 可以指定需要查看的列,syscall表示線程正在執(zhí)行的系統(tǒng)調(diào)用,filenamesum表示正在讀寫的文件,一亂賣般來說,線程處于D狀態(tài)時(shí)在做文件io操作,如果D狀態(tài)線程頻繁出現(xiàn),那么我們肯定想知道線程正在讀寫哪個(gè)文件。

同理,通過wchan字段可以查看線程阻塞在什么內(nèi)核方法上,而kstack字段則可以查看線程阻塞時(shí)的內(nèi)核調(diào)用棧是什么。

其實(shí)psn和ps命令一樣,是通過遍歷/proc目錄來獲取線程信息的,如下:

state:取自 /proc/$pid/stat 文件。

syscall:取自 /proc/$pid/syscall 文件。

wchan:取自 /proc/$pid/wchan 文件。

kstack:取自 /proc/$pid/stack 文件。

與perf、bcc等工具的區(qū)別是,讀取這些文件只需要與進(jìn)程同等級(jí)的權(quán)限即可,不需要使用root賬號(hào)。

除了psn外,0x.tools里面還有一些其它工具,如xcapture、schedlat等,這里就不一一介紹了,感興趣可以訪問

查看。

另外,由于psn是通過遍歷 /proc 目錄實(shí)現(xiàn)的,因此我們也可自己編寫腳本來實(shí)現(xiàn)同樣的功能,如下:

這樣,我們不用安裝0x.tools,就也能得到類似于psn命令的功能了!

linux perf查看函數(shù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux perf查看函數(shù),如何使用Linux Perf查看函數(shù)性能?,cpu指標(biāo)含義解釋,linux服務(wù)器cpu性能參數(shù)如何看,容器內(nèi)的Linux診斷工具x.tools的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


分享標(biāo)題:如何使用LinuxPerf查看函數(shù)性能?(linuxperf查看函數(shù))
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/dhejgoh.html