最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

第2章 程序性能分析

2023-09-16 18:36 作者:納西妲愛(ài)編程  | 我要投稿

2.1 理解性能優(yōu)化

1. 性能優(yōu)化基本意識(shí)

確保優(yōu)化方向正確,產(chǎn)品特性和階段決定優(yōu)化方向,這是優(yōu)化的首要條件,優(yōu)化方向決定了優(yōu)化的效率和收益。

確定優(yōu)化帶來(lái)的收益,無(wú)收益不優(yōu)化,只有明確收益才啟動(dòng)優(yōu)化。

在投入和產(chǎn)出上做取舍,合理的設(shè)定優(yōu)化目標(biāo)和資源投入,做高性?xún)r(jià)比的性能優(yōu)化。

功能與性能的平衡,產(chǎn)品功能優(yōu)化是最低成本、高性?xún)r(jià)比的優(yōu)化之一,并且立竿見(jiàn)影。

防止過(guò)早和過(guò)渡優(yōu)化,過(guò)早和過(guò)渡直接導(dǎo)致人力成本升高以及資源浪費(fèi)。

2. 優(yōu)化的方向、思路

整理網(wǎng)絡(luò)、系統(tǒng)、前端、后端,移動(dòng)等 5 大方向性能優(yōu)化最佳實(shí)踐,針對(duì)各個(gè)技術(shù)細(xì)節(jié)進(jìn)行深度調(diào)研并在產(chǎn)品線中抓重點(diǎn)問(wèn)題實(shí)踐。

提升工程師在性能優(yōu)化方面的知識(shí),匯總各個(gè)部分的成果,積極組織交流、培訓(xùn)。

可持續(xù)的開(kāi)發(fā)性能優(yōu)化的工具、庫(kù),并集成到基礎(chǔ)平臺(tái)中,提供給產(chǎn)品線使用。

推廣性能優(yōu)化方法、工具和性能分析指南在產(chǎn)品線中的推廣,并指導(dǎo)工程師解決性能問(wèn)題。

做優(yōu)化首先要知道從哪里入手,也就是要知道系統(tǒng)的瓶頸在哪里。一個(gè)請(qǐng)求會(huì)消耗很多資源: CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤(pán)等,這些資源中總會(huì)有一個(gè)先到達(dá)瓶頸,只有優(yōu)化最先到達(dá)瓶頸的資源才會(huì)產(chǎn)生實(shí)際效果。 如何發(fā)現(xiàn)瓶頸 ? 從代碼執(zhí)行部分來(lái)看,就是看哪里消耗了最多的 CPU 時(shí)間,從消耗 CPU 最多的地方做優(yōu)化效果更明顯。所以首先要掌握一些工具, 例如壓測(cè)工具、發(fā)現(xiàn)代碼熱點(diǎn)的工具。 2.2 基本監(jiān)控系統(tǒng)方法 在 Linux操作系統(tǒng)中,我們可以使用一些分析系統(tǒng)性能的命令去分析服務(wù)器的性能?,F(xiàn)在介紹這些命令的使用方法。

2.2.1 ps 命令

ps 命令主要用來(lái)獲取對(duì)于某個(gè)進(jìn)程的一些信息。ps命令的常用參數(shù)如下所示 A: 顯示所有進(jìn)程。

a: 顯示一個(gè)終端的所有進(jìn)程, 除了會(huì)話引線。

N: 忽略選擇。

d: 顯示所有進(jìn)程,但省略所有的會(huì)話引線。

e: 列出程序時(shí), 顯示每個(gè)程序所使用的環(huán)境變量。

X: 顯示沒(méi)有控制終端的進(jìn)程,同時(shí)顯示各個(gè)命令的具體路徑。dx 不可合用。

p pid: 進(jìn)程使用 cpu 的時(shí)間。

u uid or username: 選擇有效的用戶id或者是用戶名。

g gid or groupname: 顯示組的所有進(jìn)程。

f: 全部列出,通常和其他選項(xiàng)聯(lián)用。

l: 長(zhǎng)格式 (有F, wchan,C等字段)。

j: 作業(yè)格式。

e: 命令之后顯示環(huán)境。

例: # 查看所有進(jìn)程的信息 ps -aux ? # 查詢(xún)所有進(jìn)程及其環(huán)境變量信息 ps -ef ? # 通常查看了進(jìn)程信息后,如果需要終止某個(gè)進(jìn)程,可以使用 kill命令,如下。 kill -KILL [pid] ? # 如果需要強(qiáng)行終止某個(gè)進(jìn)程的話,可以使用kill -9 [pid]命令,如下。 kill -9 [pid] ?

2.2.3 top 命令

top 命令是 Linux 操作系統(tǒng)下最常用的性能分析工具,能夠?qū)崟r(shí)地顯示操作系統(tǒng)中各個(gè)進(jìn)程消耗資源的情況。該命令可以顯示 CUP 使用、內(nèi)存使用和執(zhí)行時(shí)間,下面執(zhí)行 top 命令看下執(zhí)行的情況,如下所示。 [root@VM-0-13-centos ~]# top top - 15:13:50 up 25 days,?1:58,?1 user, load average: 0.11, 0.05, 0.08 Tasks: 116 total,?2 running, 113 sleeping,?0 stopped,?1 zombie %Cpu(s):?0.7 us,?0.7 sy,?0.0 ni, 98.3 id,?0.3 wa,?0.0 hi,?0.0 si,?0.0 st KiB Mem :?1881996 total,??80140 free,?502064 used,?1299792 buff/cache KiB Swap:?1049596 total,?957928 free,??91668 used.?1172928 avail Mem ? PID USER??PR NI?VIRT?RES?SHR S %CPU %MEM??TIME+ COMMAND???????????????????????????????? 30946 root???20?0?988160?35816?9708 S?0.7?1.9 108:27.91 YDService????????????????????????? 1909 redis??20?0?195612?7004??716 S?0.3?0.4 124:09.23 redis-server?????????????????????????????? 13957 mysql??20?0 1054568 166436?4264 S?0.3?8.8?1:21.40 mysqld????????????????????????????????? 20361 root???20?0?162112?2256?1560 R?0.3?0.1?0:00.47 top?????????????????????????????????? ??1 root???20?0?51912?3768?2388 S?0.0?0.2?6:52.50 systemd?????????????????????????????? ??2 root???20?0???0???0???0 S?0.0?0.0?0:00.82 kthreadd???????... 我們來(lái)分析一下 top 命令的統(tǒng)計(jì)信息的含義。 top - 15:13:50 up 25 days,?1:58,?1 user, load average: 0.11, 0.05, 0.08 先來(lái)分析 top 命令第 1 行信息,該行信息的具體含義如下。 15:13:50 表示系統(tǒng)運(yùn)行的當(dāng)前時(shí)間。

up 25 days 表示系統(tǒng)運(yùn)行時(shí)間。

1 user 表示登錄用戶的數(shù)量。

load average: 0.11, 0.05, 0.08 表示系統(tǒng)負(fù)載。即任務(wù)隊(duì)列的平均長(zhǎng)度三個(gè)數(shù)值分別為 1 分鐘、5 分鐘、15 分鐘到現(xiàn)在的平均值。(它們的數(shù)字是越小越好。數(shù)字越高,說(shuō)明服務(wù)器的負(fù)載越大)

接著分析 top 命令的第 2 行和第 3 行的具體含義,這兩行分別表示進(jìn)程和 CPU 的性能的一些信息。 Tasks: 116 total,?2 running, 113 sleeping,?0 stopped,?1 zombie %Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.3 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st 下面我們具體分析一下各個(gè)統(tǒng)計(jì)信息的含義,如下所示。 116 total 表示進(jìn)程的總數(shù)。

2 running 表示正在運(yùn)行的進(jìn)程數(shù)量。

113 sleeping 表示睡眠的進(jìn)程數(shù)量。

0 stopped 表示停止的進(jìn)程數(shù)量。

1 zombie 表示僵尸進(jìn)程數(shù)。

0.7 us 表示用戶空間占用 CPU 的百分比。

0.7 sy 表示內(nèi)核空間占用 CPU 的百分比。

0.0 ni 表示用戶進(jìn)程空間內(nèi)改變過(guò)優(yōu)先級(jí)的進(jìn)程占用 CPU 的百分比。

98.3 id 表示空閑 CPU 的百分比。

0.3 wa 表示等待輸入輸出的 CPU 的百分比。

接著分析 top 命令的第 4 行和第 5 行的具體含義,這兩行分別表示內(nèi)存的性能分析信息, 如下。 KiB Mem : 1881996 total,?80140 free,?502064 used, 1299792 buff/cache 1881996 total 表示物理內(nèi)存的總的大小。

502064 used 表示使用的物理內(nèi)存的大小。

80140 free 表示空閑的物理內(nèi)存的大小。

1299792 buff/cache 表示內(nèi)核緩存內(nèi)存空間的大小。

KiB Swap: 1049596 total,?957928 free,?91668 used. 1172928 avail Mem 下面具體分析一下 Swap 各個(gè)統(tǒng)計(jì)信息的含義,如下所示。 524280k total 表示交換區(qū)的總量。

91668 used 表示使用的交換區(qū)總量。

957928 free 表示空閑交換區(qū)總量。

1172928 avail Mem 表示可用內(nèi)存空間 。

2.2.4 vmstat 命令

vmstat 命令可以用來(lái)顯示 Linux 性能指標(biāo),該命令分別輸出進(jìn)程、內(nèi)存、交互區(qū)、IO、系統(tǒng)和 CPU 的情況。下面直接輸出該命令, 如下所示。 [root@VM-0-13-centos ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b?swpd?free?buff cache?si?so?bi?bo?in?cs us sy id wa st 5?0?91668?85520 148944 1130440??0??0??27??62?15?19?4?2 94?0?0 首先,分析下進(jìn)程 (procs) 的兩列信息,如下所示。 r 列表示可運(yùn)行進(jìn)程的數(shù)量。

b 列表示阻塞進(jìn)程的數(shù)量。

內(nèi)存性能有 4 個(gè)報(bào)告虛擬內(nèi)存如何使用的字段,具體意義如下。 swpd 表示已經(jīng)使用的交換空間的數(shù)量。

free 表示自由 RAM 數(shù)量。

buff 表示緩存使用的 RAM 的數(shù)量。

cache 表示文件系統(tǒng)緩存使用的 RAM 數(shù)量。

swap 交換字段進(jìn)行詳細(xì)說(shuō)明,如下所示。 si 表示從磁盤(pán)分頁(yè)到內(nèi)存的數(shù)量。

so 表示從內(nèi)存分頁(yè)到磁盤(pán)的數(shù)量。

io字段進(jìn)行詳細(xì)說(shuō)明,如下所示。 bi 表示從磁盤(pán)讀入的塊。

bo 表示寫(xiě)入磁盤(pán)的塊。

下面,對(duì)系統(tǒng)字段和 CPU 字段進(jìn)行說(shuō)明,CPU 狀態(tài)使用總 CPU 時(shí)間的百分比來(lái)表示,具體含義如下。 in 表示系統(tǒng)中斷。

cs 表示進(jìn)程上下文開(kāi)關(guān)。

us 表示用戶模式。

sy 表示內(nèi)核模式。

wa 表示等待 I/O。

id 表示空閑狀態(tài)。

例 : [root@VM-0-13-centos ~]# vmstat 3 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b?swpd?free?buff cache?si?so?bi?bo?in?cs us sy id wa st 5?0?91668?87496 149688 1134760??0??0??27??62?15?19?4?2 94?0?0 0?0?91668?87232 149696 1134760??0??0??0??35?450?973?1?1 98?0?0 0?0?91668?87072 149696 1134764??0??0??0??0?449?973?1?1 98?0?0 0?0?91668?87304 149700 1134584??0??0??0??19?446?987?1?1 98?0?0 0?0?91668?87304 149700 1134584??0??0??0??0?440?953?1?0 99?0?0 0?0?91668?87252 149700 1134584??0??0??0??17?464 1007?1?1 98?0?0 0?0?91668?87256 149700 1134592??0??0??0??24?461 1009?1?1 98?0?0 0?0?91668?87304 149700 1134592??0??0??0??7?432?934?1?0 99?0?0 0?0?91668?85256 149700 1134600??0??0??0??0?471 1011?1?1 97?0?0 0?0?91668?85424 149708 1134612??0??0??0?356?986 2108?2?2 96?0?0 ? 3 表示每個(gè)兩秒采集一次服務(wù)器狀態(tài),10 表示采集 10 次。

顯示從系統(tǒng)啟動(dòng)至今的 fork 數(shù)量

vmstat -f (linux 下創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用是 fork) [root@VM-0-13-centos ~]# vmstat -f ???9337640 forks

查看內(nèi)存使用的詳細(xì)信息

vmstat -s (顯示內(nèi)存相關(guān)統(tǒng)計(jì)信息及多種系統(tǒng)活動(dòng)數(shù)量) [root@VM-0-13-centos ~]# vmstat -s ???1881996 K total memory ???495924 K used memory ???731944 K active memory ???788832 K inactive memory ???119936 K free memory ???148936 K buffer memory ???1117200 K swap cache ???1049596 K total swap ????91668 K used swap ???957928 K free swap ???8981030 non-nice user cpu ticks ????1641 nice user cpu ticks ???3630611 system cpu ticks ??203464511 idle cpu ticks ???317867 IO-wait cpu ticks ??????0 IRQ cpu ticks ????23647 softirq cpu ticks ??????0 stolen cpu ticks ??57989204 pages paged in ??133580669 pages paged out ????33755 pages swapped in ???113806 pages swapped out ?1149638321 interrupts ?2319032091 CPU context switches ?1623993315 boot time ???9338328 forks

查看磁盤(pán)的讀/寫(xiě)

vmstat -d (查看磁盤(pán)的讀寫(xiě)) [root@VM-0-13-centos ~]# vmstat -d disk- ------------reads------------ ------------writes----------- -----IO------ ???total merged sectors??ms total merged sectors??ms?cur?sec vda?879001?32113 115977781 4230083 19061718 9521458 267278066 149614744???0?8955 sr0???88???0??628???57???0???0???0???0???0???0 2.3 定時(shí)監(jiān)控系統(tǒng)狀況 2.3.1 sysstat工具 sysstat 工具包含檢測(cè)系統(tǒng)性能及效率的一組工具。例如 CPU 的使用率、硬盤(pán)和網(wǎng)絡(luò)吞吐數(shù)據(jù),這些數(shù)據(jù)的收集和分析,有利于判斷系統(tǒng)是否正常運(yùn)行。源碼包 github 地址為https://github.com/sysstat/sysstat/。 Sysstat 軟件包集成如下工具 : iostat 工具: 提供 CPU 使用率及硬盤(pán)吞吐效率的數(shù)據(jù)。

mpstat 工具: 提供單個(gè)處理器或多個(gè)處理器相關(guān)數(shù)據(jù)。

sar 工具: 負(fù)責(zé)收集、報(bào)告并存儲(chǔ)系統(tǒng)活躍的信息。

sal 工具: 負(fù)責(zé)收集并存儲(chǔ)每天系統(tǒng)動(dòng)態(tài)信息到一個(gè)二進(jìn)制的文件中。

sa2 工具: 負(fù)責(zé)把每天的系統(tǒng)活躍信息寫(xiě)入總結(jié)性的報(bào)告中。

sadc 工具: 系統(tǒng)動(dòng)態(tài)數(shù)據(jù)收集工具,收集的數(shù)據(jù)被寫(xiě)進(jìn)一個(gè)二進(jìn)制的文件中。

sadf 工具: 顯示被 sar 工具通過(guò)多種格式收集的數(shù)據(jù)。

下面開(kāi)始安裝 sysstat 工具包, 如下所示。 # 一.源碼編譯安裝 [root@localhost ~]# tar zxvf sysstat-12.5.4.tar.gz [root@localhost sysstat-10.0.0]# ./configure [root@localhost sysstat-10.0.0]# make [root(localhost sysstat-10.0.0]# make install ? # 二.使用yum安裝 yum install sysstat -y

1. Iostat 工具

Iostat 工具用于輸出 CPU 和磁盤(pán) IO 相關(guān)的統(tǒng)計(jì)信息,具體的語(yǔ)法格式如下: iostat?[-c|-d]?[-k]?[-t]?[-V]?[-x]?[-p device|ALL]?[間隔描述]?[檢測(cè)次數(shù)] 上述參數(shù)的含義如下 : -c: 表示僅顯示CPU 的狀態(tài)。

-d: 僅顯示存儲(chǔ)設(shè)備的狀態(tài), 不可以和 -c 一起使用。

-k: 默認(rèn)顯示的是讀入讀出的塊信息。

-t: 顯示搜集數(shù)據(jù)的時(shí)間。

-V: 顯示版本號(hào)和幫助信息。

-x: 顯示擴(kuò)展信息。

-p dev-p device|ALL: device 為某個(gè)設(shè)備或者某個(gè)分區(qū),如果使用 ALL,就表示要顯示所有分區(qū)和設(shè)備的信息。

直接運(yùn)行 Iostat 命令,結(jié)果如下所示。 [root@VM-0-13-centos ~]# iostat Linux 3.10.0-1160.31.1.el7.x86_64 (VM-0-13-centos) 07/19/2021 _x86_64_ (1 CPU) ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????4.23??0.00??1.73??0.15??0.00?93.89 ? Device:?????tps?kB_read/s?kB_wrtn/s?kB_read?kB_wrtn vda???????9.14????23.74????61.46?63565898?164589173 scd0???????0.00????0.00????0.00????314?????0 結(jié)果中關(guān)于 CPU 性能參數(shù)的含義如下 : %user: 在用戶級(jí)別運(yùn)行所使用的 CPU 的百分比。

%nice: nice 操作所使用的 CPU 的百分比。

%system: 在系統(tǒng)級(jí)別 ( kernel) 運(yùn)行所使用 CPU 的百分比。

%iowait: CPU 等待硬件 IO時(shí),所占用 CPU 的百分比。

%idle: 表示 CPU 空閑時(shí)間所占比例。

結(jié)果中關(guān)于磁盤(pán) IO 性能參數(shù)的含義如下 : Device: 表示設(shè)備塊的名字。

tps: 表示每秒鐘發(fā)送到的 IO 請(qǐng)求數(shù)。

kB_read/s: 表示從該設(shè)備每秒讀取的數(shù)據(jù)塊數(shù)量。

kB_wrtn/s: 表示從該設(shè)備每秒寫(xiě)入的數(shù)據(jù)塊數(shù)量。

kB_read: 表示從該設(shè)備讀取的數(shù)據(jù)塊總數(shù)。

kB_wrtn: 表示從該設(shè)備寫(xiě)入的數(shù)據(jù)塊總數(shù)。

使用 -x 參數(shù)可以獲得更多的統(tǒng)計(jì)信息, 如下所示。 [root@VM-0-13-centos ~]# iostat -d -x -k 1 10 Linux 3.10.0-1160.31.1.el7.x86_64 (VM-0-13-centos) 07/19/2021 _x86_64_ (1 CPU) ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.01??4.40??0.38??8.76??23.75??61.47??18.64??0.07??7.77??4.54??7.91?0.45?0.41 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??7.14??0.00??0.65??0.65??0.00?0.65?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??3.96??0.00?24.75??0.00?142.57??11.52??0.11??4.36??0.00??4.36?0.52?1.29 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??25.25??0.00??3.03??0.00?113.13??74.67??0.01??2.33??0.00??2.33?2.00?0.61 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??0.00??0.00??1.01??0.00??4.04??8.00??0.00??2.00??0.00??2.00?3.00?0.30 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??0.00??0.00??1.01??0.00??4.04??8.00??0.00??1.00??0.00??1.00?2.00?0.20 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??1.00??0.00?176.00??0.00?828.00??9.41??1.21??6.85??0.00??6.85?0.07?1.30 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??18.00??0.00??3.00??0.00??84.00??56.00??0.01??3.00??0.00??3.00?3.67?1.10 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 ? Device:????rrqm/s?wrqm/s??r/s??w/s?rkB/s?wkB/s avgrq-sz avgqu-sz?await r_await w_await svctm %util vda???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 scd0???????0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00??0.00?0.00?0.00 結(jié)果中主要的參數(shù)的含義如下: rrqm/s:表示每秒這個(gè)設(shè)備相關(guān)的讀取請(qǐng)求有多少被合并。

wrqm/s:表示每秒這個(gè)設(shè)備相關(guān)的寫(xiě)入請(qǐng)求有多少被合并。

r/s:表示每秒請(qǐng)求讀該設(shè)備的數(shù)量。

w/s:表示每秒請(qǐng)求寫(xiě)該設(shè)備的數(shù)量。

rkB/s:每秒讀數(shù)據(jù)量 (單位:kB)。

wkB/s:每秒寫(xiě)數(shù)據(jù)量 (單位:kB)。

avgrq-sz:平均每次 IO 操作的數(shù)據(jù)量 (單位:扇區(qū)數(shù))。

avgqu-sz:平均等待處理的 IO 請(qǐng)求隊(duì)列長(zhǎng)度。

await:每一個(gè)IO請(qǐng)求的處理的平均時(shí)間(單位:毫秒)。這里可以理解為 IO 的響應(yīng)時(shí)間,一般地系統(tǒng)IO響應(yīng)時(shí)間, 應(yīng)該低于 5ms,如果大于 10ms 就比較大了。

r_await讀取請(qǐng)求的平均時(shí)間(單位:毫秒)。

w_await:寫(xiě)入請(qǐng)求的平均時(shí)間(單位:毫秒)。

svctm:平均每次IO請(qǐng)求的處理時(shí)間 (單位:毫秒)。

%util:在統(tǒng)計(jì)時(shí)間內(nèi)所有處理 IO 時(shí)間,除以總共統(tǒng)計(jì)時(shí)間。例如,如果統(tǒng)計(jì)間隔1秒,該設(shè)備有 0.8 秒在處理 IO ,而 0.2 秒閑置,那么該設(shè)備的 %util = 0.8/1 = 80%,所以該參數(shù)暗示了設(shè)備的繁忙程度。一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿負(fù)荷運(yùn)行了(當(dāng)然如果是多磁盤(pán),即使 %util 是 100%,因?yàn)榇疟P(pán)的并發(fā)能力,所以磁盤(pán)使用未必就到了瓶頸)。

此外可以通過(guò)如下命令查詢(xún) CPU 的部分信息,如下所示。 [root@VM-0-13-centos ~]# iostat -c 1 10 Linux 3.10.0-1160.31.1.el7.x86_64 (VM-0-13-centos) 07/19/2021 _x86_64_ (1 CPU) ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????4.23??0.00??1.73??0.15??0.00?93.89 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????2.00??0.00??1.00??1.00??0.00?96.00 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????11.22??0.00??3.06??0.00??0.00?85.71 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????2.02??0.00??1.01??0.00??0.00?96.97 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????8.00??0.00??2.00??0.00??0.00?90.00 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????2.02??0.00??1.01??0.00??0.00?96.97 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????1.00??0.00??1.00??1.00??0.00?97.00 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????7.07??0.00??2.02??0.00??0.00?90.91 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????1.01??0.00??0.00??0.00??0.00?98.99 ? avg-cpu: %user?%nice %system %iowait %steal?%idle ?????6.06??0.00??2.02??0.00??0.00?91.92 也可以通過(guò)以下命令查詢(xún)某個(gè)具體的設(shè)備塊的信息,如下所示。 [root@VM-0-13-centos ~]# iostat -d -k 1 | grep vda vda???????9.14????23.75????61.47?63565798?164537921 vda???????28.00???100.00???240.00????100????240 vda???????52.53????0.00???315.15?????0????312 vda???????1.00????0.00????4.00?????0?????4 vda???????0.00????0.00????0.00?????0?????0 vda???????1.01????0.00????4.04?????0?????4 vda???????0.00????0.00????0.00?????0?????0 vda??????219.00????0.00???1064.00?????0???1064 ?

2. Mpstat工具

Mpstat是系統(tǒng)實(shí)時(shí)監(jiān)控工具,主要報(bào)告 CPU 的一些信息,先了解下該命令的語(yǔ)法 : mpstat [-P {|ALL}] [internal {cpunt}] 下面分析具體參數(shù)的含義 : -P {ALL}: 表示需要監(jiān)控哪個(gè) CPU

Internal: 表示相鄰的兩次采樣的時(shí)間間隔。

Count: 表示采樣的次數(shù)。

下面通過(guò)案例來(lái)理解一下該命令的具體用法。 (1)顯示所有 CPU 的信息,每秒鐘執(zhí)行一次。 [root@VM-0-13-centos ~]# mpstat -P ALL 1 Linux 3.10.0-1160.31.1.el7.x86_64 (VM-0-13-centos) 07/19/2021 _x86_64_ (1 CPU) ? 06:46:21 PM CPU?%usr?%nice?%sys %iowait?%irq?%soft %steal %guest %gnice?%idle 06:46:22 PM all??7.00??0.00??2.00??0.00??0.00??0.00??0.00??0.00??0.00?91.00 06:46:22 PM??0??7.00??0.00??2.00??0.00??0.00??0.00??0.00??0.00??0.00?91.00 ? 06:46:22 PM CPU?%usr?%nice?%sys %iowait?%irq?%soft %steal %guest %gnice?%idle 06:46:23 PM all??2.04??0.00??1.02??0.00??0.00??0.00??0.00??0.00??0.00?96.94 06:46:23 PM??0??2.04??0.00??1.02??0.00??0.00??0.00??0.00??0.00??0.00?96.94 ? 06:46:23 PM CPU?%usr?%nice?%sys %iowait?%irq?%soft %steal %guest %gnice?%idle 06:46:24 PM all?10.00??0.00??3.00??0.00??0.00??0.00??0.00??0.00??0.00?87.00 06:46:24 PM??0?10.00??0.00??3.00??0.00??0.00??0.00??0.00??0.00??0.00?87.00 ? ... ? Average:??CPU?%usr?%nice?%sys %iowait?%irq?%soft %steal %guest %gnice?%idle Average:??all??4.50??0.00??1.61??0.07??0.00??0.00??0.00??0.00??0.00?93.82 Average:???0??4.50??0.00??1.61??0.07??0.00??0.00??0.00??0.00??0.00?93.82 ? (2)顯示 ID 為 0 的 CPU 的信息, 每秒鐘執(zhí)行一次。 [root@VM-0-13-centos ~]# mpstat -P 0 1 Linux 3.10.0-1160.31.1.el7.x86_64 (VM-0-13-centos) 07/19/2021 _x86_64_ (1 CPU) ? 05:19:29 PM CPU?%usr?%nice?%sys %iowait?%irq?%soft %steal %guest %gnice?%idle 05:19:30 PM??0??1.01??0.00??1.01??1.01??0.00??0.00??0.00??0.00??0.00?96.97 05:19:31 PM??0??8.00??0.00??3.00??0.00??0.00??0.00??0.00??0.00??0.00?89.00 05:19:32 PM??0??1.01??0.00??1.01??0.00??0.00??0.00??0.00??0.00??0.00?97.98 05:19:33 PM??0??8.16??0.00??3.06??0.00??0.00??0.00??0.00??0.00??0.00?88.78 05:19:34 PM??0??1.00??0.00??1.00??0.00??0.00??0.00??0.00??0.00??0.00?98.00 05:19:35 PM??0??7.07??0.00??2.02??0.00??0.00??0.00??0.00??0.00??0.00?90.91 ... Average:???0??5.05??0.00??2.02??0.14??0.00??0.00??0.00??0.00??0.00?92.79 ? 該結(jié)果的具體參數(shù)項(xiàng)的含義如下所示。 %usr: 表示處理用戶進(jìn)程所使用 CPU 的百分比。

%nice: 表示使用nice命令對(duì)進(jìn)程進(jìn)行降級(jí)時(shí) CPU 的百分比。

%sys: 表示內(nèi)核進(jìn)程使用的 CPU 百分比。

%iowait: 表示等待進(jìn)行IO所使用的 CPU 時(shí)間百分比。

%irq: 表示用于處理系統(tǒng)中斷的 CPU 百分比。

%soft: 表示用于軟件中斷的 CPU 百分比。

%idle: 顯示 CPU 的空閑時(shí)間。

%gues: 顯示運(yùn)行虛擬處理器時(shí)CPU花費(fèi)時(shí)間的百分比。

%steal: 顯示虛擬機(jī)管理器在服務(wù)另一個(gè)虛擬處理器時(shí)虛擬CPU處在非自愿等待下花費(fèi)時(shí)間的百分比。

3. sar 工具

sar 是目前 Linux 最為全面的系統(tǒng)性能分析工具之一,可以從多方面對(duì)系統(tǒng)的活動(dòng)進(jìn)行報(bào)告,包括: 文件的讀寫(xiě)情況、系統(tǒng)調(diào)用的使用情況、磁盤(pán) I/O、CPU 效率、內(nèi)存使用狀況、進(jìn)程活動(dòng)及IPC有關(guān)的活動(dòng)等。 sar 的語(yǔ)法格式如下: sar [options] [-A] [-o file] t [n] 其中: t 為采樣間隔,n 為采樣次數(shù),默認(rèn)值是 1; -o file 表示將命令結(jié)果以二進(jìn)制格式存放在文件中, file 是文件名。options 為命令行選項(xiàng),選項(xiàng)的含義如下 : -A: 所有報(bào)告的總和。

-u: 輸出 CPU 使用情況的統(tǒng)計(jì)信息。

-v: 輸出 inode、文件和其他內(nèi)核表的統(tǒng)計(jì)信息。

-d: 輸出每一個(gè)塊設(shè)備的活動(dòng)信息。

-r: 輸出內(nèi)存和交換空間的統(tǒng)計(jì)信息。

-b: 顯示 I/O 和傳送速率的統(tǒng)計(jì)信息。

-a: 文件讀寫(xiě)情況。

-c: 輸出進(jìn)程統(tǒng)計(jì)信息,每秒創(chuàng)建的進(jìn)程數(shù)。

-R: 輸出內(nèi)存頁(yè)面的統(tǒng)計(jì)信息。

-y: 終端設(shè)備活動(dòng)情況。

-w: 輸出系統(tǒng)交換活動(dòng)信息。

下面通過(guò)一個(gè)案例來(lái)理解 sar 工具的使用方法,如下所示。 [root@VM-0-13-centos ~]# sar -u 1 5 Linux 3.10.0-1160.31.1.el7.x86_64 (VM-0-13-centos) 07/19/2021 _x86_64_ (1 CPU) ? 05:14:57 PM??CPU??%user??%nice?%system?%iowait?%steal??%idle 05:14:58 PM??all???8.08???0.00???2.02???2.02???0.00??87.88 05:14:59 PM??all???0.00???0.00???1.01???0.00???0.00??98.99 05:15:00 PM??all???8.00???0.00???3.00???0.00???0.00??89.00 05:15:01 PM??all???4.04???0.00???4.04???0.00???0.00??91.92 05:15:02 PM??all??10.00???0.00???3.00???0.00???0.00??87.00 Average:???all???6.04???0.00???2.62???0.40???0.00??90.95 結(jié)果中具體參數(shù)的含義如下所示。 CPU: all 表示統(tǒng)計(jì)信息為所有CPU的平均值。

%user : 顯示在用戶級(jí)別 ( application) 運(yùn)行使用 CPU 總時(shí)間的百分比。

%nice: 顯示在用戶級(jí)別,用于 nice 操作所占用 CPU 總時(shí)間的百分比。

%system: 在核心級(jí)別 ( kernel) 運(yùn)行所使用 CPU 總時(shí)間的百分比。

%iowait: 顯示用于等待 IO 操作占用 CPU 總時(shí)間的百分比。

%steal: 管理程序( hypervisor)為另一個(gè)虛擬進(jìn)程提供服務(wù)而等待虛擬 CPU 的百分比。

%idle: 顯示 CPU 空閑時(shí)間占用 CPU 總時(shí)間的百分比。

注意 : 如果 %iowait 的值過(guò)高,表示硬盤(pán)存在 I/O 瓶頸;如果 %idle 的值高但系統(tǒng)響應(yīng)慢時(shí),有可能是 CPU 等待分配內(nèi)存,此時(shí)應(yīng)加大內(nèi)存容量; 若 %idle 的值持續(xù)低于 10,則系統(tǒng)的 CPU 處理能力相對(duì)較低,表明系統(tǒng)中最需要解決的資源是CPU。

第2章 程序性能分析的評(píng)論 (共 條)

使用qq登录你需要登录后才可以评论。
乃东县| 砚山县| 合作市| 怀仁县| 九龙坡区| 宜州市| 汾阳市| 当雄县| 阳谷县| 罗田县| 京山县| 桦甸市| 房产| 忻州市| 玛纳斯县| 白沙| 新邵县| 五河县| 卢湾区| 紫金县| 嘉峪关市| 芜湖市| 揭阳市| 安新县| 沙田区| 比如县| 聂荣县| 铁力市| 安丘市| 临澧县| 延长县| 廊坊市| 黄梅县| 荔波县| 克拉玛依市| 石景山区| 石城县| 屯昌县| 通化县| 蓝山县| 自贡市|