日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

分析linux系统的运行性能,Linux系统如何分析CPU的性能瓶颈

發(fā)布時(shí)間:2025/4/5 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分析linux系统的运行性能,Linux系统如何分析CPU的性能瓶颈 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下內(nèi)容來(lái)自轉(zhuǎn)載和自己的初用體驗(yàn)。

vmstat

[root@master ~]# vmstat -n 3

procs? ?---memory--?? ?--swap--?? ?--io--??--system--????--cpu---

r? b??swpd?? free?? buff? cache???si??so???bi???bo????in

cs??????us sy id wa st

0? 0????? 115516 6043024? 430340??8691840????0??0

2???22????1???1???1? 0 99? 0? 0? 0? 0????115516 6043024

430340??8691840????0???0????0???0???1124??751

0? 0 100? 0? 0 ?0? 0????? 115516 6043148

430344???8691840????0???0????0???25???1070?762

0? 0 100? 0? 0

PROC

如果在processes中運(yùn)行的序列是連續(xù)的大于在系統(tǒng)中的CPU的個(gè)數(shù)表示系統(tǒng)現(xiàn)在運(yùn)行比較慢,有多數(shù)的進(jìn)程等待CPU。

如果r的輸出數(shù)大于系統(tǒng)中可用CPU個(gè)數(shù)的4倍的話(huà),則系統(tǒng)面臨著CPU短缺的問(wèn)題,或者是CPU的速率過(guò)低,系統(tǒng)中有多數(shù)的進(jìn)程在等待CPU,造成系統(tǒng)中進(jìn)程運(yùn)行過(guò)慢。

SYSTEM

in: 每秒產(chǎn)生的中斷次數(shù)

cs: 每秒產(chǎn)生的上下文切換次數(shù)

上面2個(gè)值越大,會(huì)看到由內(nèi)核消耗的CPU時(shí)間會(huì)越大

CPU

us:用戶(hù)進(jìn)程消耗的CPU時(shí)間百分比,其中us值比較高時(shí),說(shuō)明用戶(hù)進(jìn)程消耗的CPU時(shí)間多;如果長(zhǎng)期超50%的使用,那么我們?cè)摽紤]優(yōu)化程序算法或者進(jìn)行加速

sy: 內(nèi)核進(jìn)程消耗的CPU時(shí)間百分比(sy的值高時(shí),說(shuō)明系統(tǒng)內(nèi)核消耗的CPU資源多,并不是良性表現(xiàn),我們應(yīng)該檢查原因)

wa:IO等待消耗的CPU時(shí)間百分比(值高時(shí),說(shuō)明IO等待比較嚴(yán)重,這可能由于磁盤(pán)大量作隨機(jī)訪問(wèn)造成,也可能磁盤(pán)出現(xiàn)瓶頸,如塊操作)

id: CPU處于空閑狀態(tài)的百分比,如果空閑時(shí)間持續(xù)為0并且系統(tǒng)時(shí)間是用戶(hù)時(shí)間的兩倍,那么系統(tǒng)則面臨CPU資源的短缺

解決方法:

當(dāng)發(fā)生以上問(wèn)題的時(shí)候請(qǐng)先調(diào)整應(yīng)用程序?qū)PU的占用情況,使得應(yīng)用程序能夠更有效的使用CPU,同時(shí)可以考慮增加更多的CPU,關(guān)于CPU的使用情況還可以結(jié)合mpstat、ps

aux 、top、mpstat

-a等等一些相應(yīng)的命令來(lái)綜合考慮關(guān)于具體的CPU的使用情況,和那些進(jìn)程在占用大量的CPU時(shí)間,一般情況下,應(yīng)用程序的問(wèn)題會(huì)比較大一些。

sar

Usage: sar [ options... ] [ [ ]

]

Options are:

[ -A ] [ -b ] [ -B ] [ -c ] [ -d ] [ -i ] [ -p ] [

-q ]

[ -r ] [ -R ] [ -t ] [ -u ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]

[ -I { | SUM | ALL | XALL } ] [ -P { | ALL

} ]

[ -n { DEV | EDEV | NFS | NFSD | SOCK | ALL } ]

[ -x { | SELF | ALL } ] [ -X { | SELF | ALL

} ]

[ -o [ ] | -f [ ] ]

[ -s [ ] ] [ -e [ ] ]

在命令行中,n和t兩個(gè)參數(shù)組合起來(lái)定義采樣間隔和次數(shù),t為采樣間隔,是必須有的參數(shù),n為采樣次數(shù),是可選的,默認(rèn)值為1, -o

file表示將命令的結(jié)果以二進(jìn)制格式存放

在文件中,options為命令可選項(xiàng):

-A:所有報(bào)告的總和。

-u:CPU利用率

-v:進(jìn)程、I節(jié)點(diǎn)、文件和鎖表狀態(tài)。

-d:硬盤(pán)使用報(bào)告。

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

-g:串口I/O的情況。

-b:緩沖區(qū)使用情況。

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

-c:系統(tǒng)調(diào)用情況。

-q:報(bào)告隊(duì)列長(zhǎng)度和系統(tǒng)平均負(fù)載

-R:進(jìn)程的活動(dòng)情況。

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

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

-x { pid | SELF | ALL

}:報(bào)告指定進(jìn)程ID的統(tǒng)計(jì)信息,SELF關(guān)鍵字是sar進(jìn)程本身的統(tǒng)計(jì),ALL關(guān)鍵字是所有系統(tǒng)進(jìn)程的統(tǒng)計(jì)。

用sar進(jìn)行CPU利用率的分析

[root@master ~]# sar -u 2 10

Linux 2.6.18-194.el5 (master)?? 12/13/2012

06:50:01 PM

CPU???? %user

%nice?? %system?? %iowait

%steal???? %idle

06:50:03 PM

all

1.50

0.08

0.58

7.24????? 0.00

90.60

06:50:05 PM

all

3.25

0.17

0.58

6.74????? 0.00

89.26

06:50:07 PM

all

1.33

0.08

0.67

8.01????? 0.00

89.91

06:50:09 PM

all

1.25

0.00

0.67

7.35????? 0.00

90.73

06:50:11 PM

all

1.08

0.25

0.42

7.75????? 0.00

90.50

06:50:13 PM

all

1.33

0.08

0.58

8.00????? 0.00

90.00

06:50:15 PM

all

1.42

0.08

0.42

7.18????? 0.00

90.90

06:50:17 PM

all

1.25

0.08

0.42

8.01????? 0.00

90.24

06:50:19 PM

all

1.33

0.08

0.50

8.17????? 0.00

89.92

06:50:21 PM

all

1.25

0.25

0.42

7.17????? 0.00

90.92

Average:

all

1.50

0.12

0.53

7.56????? 0.00

90.30

在顯示內(nèi)容包括:

%user:CPU處在用戶(hù)模式下的時(shí)間百分比

%nice:CPU處在帶NICE值的用戶(hù)模式下的時(shí)間百分比

%system:CPU處在系統(tǒng)模式下的時(shí)間百分比

%iowait:CPU等待輸入輸出完成時(shí)間的百分比

%steal:管理程序維護(hù)另一個(gè)虛擬處理器時(shí),虛擬CPU的無(wú)意識(shí)等待時(shí)間百分比

%idle:CPU空閑時(shí)間百分比

在所有的顯示中,我們應(yīng)該主要注意%iowait和%idle,

%iowait的值過(guò)高,表示硬盤(pán)存在I/O瓶頸,%idle值高,表示CPU較空閑。

如果%idle值高但系統(tǒng)響應(yīng)慢時(shí),有可能是CPU等待分配內(nèi)存,此時(shí)應(yīng)加大內(nèi)存容量。反之如果持續(xù)低于10,那么系統(tǒng)的CPU處理能力相對(duì)較低,表明系統(tǒng)中最需要解決的資源是CPU。

用sar進(jìn)行運(yùn)行進(jìn)程隊(duì)列長(zhǎng)度分析:

[root@master ~]# sar -q 2 10

Linux 2.6.18-194.el5 (master)?? 12/13/2012

06:57:55 PM?? runq-sz? plist-sz

ldavg-1?? ldavg-5? ldavg-15

06:57:57 PM

0????? 1196

0.63

0.48????? 0.30

06:57:59 PM

0????? 1196

0.63

0.48????? 0.30

06:58:01 PM

0????? 1196

0.58

0.47????? 0.30

06:58:03 PM

0????? 1198

0.58

0.47????? 0.30

06:58:05 PM

0????? 1198

0.61

0.48????? 0.30

runq-sz:準(zhǔn)備運(yùn)行的進(jìn)程運(yùn)行隊(duì)列

plist-sz:進(jìn)程隊(duì)列里的進(jìn)程和線程的數(shù)量

ldavg-1:前一分鐘的系統(tǒng)平均負(fù)載(load average)

ldavg-5:前五分鐘的系統(tǒng)平均負(fù)載

ldavg-15:前15分鐘的系統(tǒng)平均負(fù)載

順便說(shuō)一下load average的含義

load avarage可以理解為每秒鐘CPU等待運(yùn)行的進(jìn)程個(gè)數(shù)。

在liunx系統(tǒng)中,有很多命令都會(huì)有系統(tǒng)平均負(fù)載load average的輸出,那么什么是系統(tǒng)負(fù)載呢?

定義:在特定時(shí)間間隔內(nèi)運(yùn)行隊(duì)列中的平均任務(wù)數(shù)。如果一個(gè)進(jìn)程滿(mǎn)足以下條件則其就會(huì)位于運(yùn)行隊(duì)列中:

1、它沒(méi)有在等待I/O操作的結(jié)果

2、它沒(méi)有主動(dòng)進(jìn)入等待狀態(tài)(也就是wait)

3、沒(méi)有被停止

例如:

[root@master ~]# uptime

09:34:05 up 69 days,? 4:00,? 1 user,? load

average: 0.08, 0.02, 0.01

命令輸出的最后內(nèi)容表示在過(guò)去的1、5、15分鐘內(nèi)運(yùn)行隊(duì)列中的平均進(jìn)程數(shù)量。

一般來(lái)說(shuō)只要每個(gè)CPU的當(dāng)前活動(dòng)進(jìn)程數(shù)不大于3那么系統(tǒng)的性能就是良好的,如果每個(gè)CPU的任務(wù)數(shù)大于5,那么就表示這臺(tái)機(jī)器的性能有嚴(yán)重問(wèn)題。

對(duì)于上面的例子來(lái)說(shuō),假設(shè)系統(tǒng)有兩個(gè)CPU,那么其每個(gè)CPU的當(dāng)前任務(wù)數(shù)為:0.08/2=0.04,這表示該系統(tǒng)的性能是可以接受的。

這里有個(gè)思考問(wèn)題,就是當(dāng)CPU是支持超線程的時(shí)候,那么這時(shí)候是除以物理個(gè)數(shù),還是邏輯個(gè)數(shù)?????

iostat

[root@master ~]# iostat -c 2 10

Linux 2.6.18-194.el5 (master)?? 12/14/2012

avg-cpu:? %user?? %nice %system %iowait

%steal?? %idle

1.08??? 0.15

0.14??? 0.05??? 0.00

98.58

avg-cpu:? %user?? %nice %system %iowait

%steal?? %idle

0.00??? 0.00

0.00??? 0.00??? 0.00? 100.00

avg-cpu:? %user?? %nice %system %iowait

%steal?? %idle

0.42??? 0.25

0.00??? 0.00??? 0.00

99.33

avg-cpu:? %user?? %nice %system %iowait

%steal?? %idle

0.00??? 0.08

0.08??? 0.00??? 0.00

99.83

avg-cpu:? %user?? %nice %system %iowait

%steal?? %idle

0.00??? 0.00

0.00??? 0.00??? 0.00? 100.00

mpstat

是Multiprocessor

Statistics的縮寫(xiě),是實(shí)時(shí)系統(tǒng)監(jiān)控工具。其報(bào)告與CPU的一些統(tǒng)計(jì)信息,這些信息存放在/proc/stat文件中。

在多CPU系統(tǒng)里,其不但能查看看到所有CPU的平均狀況信息,而且能夠查看特定的CPU的信息。

mpstat語(yǔ)法如下:

Usage: mpstat [ options... ] [ [ ]

]

Options are:

[ -P { | ALL } ] [ -V ]

參數(shù)含義如下:

-P {| ALL} 表示監(jiān)控哪個(gè)CPU,cpu在[0,cpu個(gè)數(shù)-1]中取值

internal 相鄰的兩次采樣的間隔時(shí)間

count 采樣的次數(shù),count只能和delay一起使用

當(dāng)沒(méi)有參數(shù)時(shí),則顯示系統(tǒng)啟動(dòng)以后所有信息的平均值。(參數(shù)解釋從/proc/stat獲得數(shù)據(jù))

[root@master ~]# mpstat -P 1 2 3

Linux 2.6.18-194.el5 (master)?? 12/14/2012

09:56:35 AM? CPU?? %user

%nice??? %sys %iowait

%irq?? %soft? %steal

%idle??? intr/s

09:56:37 AM??? 1

0.00??? 0.50

0.00??? 0.00

0.00??? 0.00??? 0.00

99.50????? 0.00

09:56:39 AM??? 1

0.00??? 0.00

0.00??? 0.00

0.00??? 0.00??? 0.00

100.00????? 0.00

09:56:41 AM??? 1

0.00??? 0.50

0.00??? 0.00

0.00??? 0.00??? 0.00

99.50????? 0.00

Average:?????? 1

0.00??? 0.33

0.00??? 0.00

0.00??? 0.00??? 0.00

99.67????? 0.00

補(bǔ)充說(shuō)明下,nice值的含義

[root@master ~]# ps -l

F S

UID?????PID

PPID? C?? PRI

NI??ADDR???????SZ

WCHAN

TTY????????? TIME

CMD

4 S???????0 29493

29491?? 0

75

0?????????? -

16559

wait?? pts/1??? 00:00:00 bash

4 R?????? 0 29871

29493?? 0

77

0?????????? -

15887??????????????-????pts/1

00:00:00 ps

UID : 代表執(zhí)行者的身份

PID : 代表這個(gè)進(jìn)程的代號(hào)

PPID :代表這個(gè)進(jìn)程是由哪個(gè)進(jìn)程發(fā)展衍生而來(lái)的,亦即父進(jìn)程的代號(hào)

PRI :代表這個(gè)進(jìn)程可被執(zhí)行的優(yōu)先級(jí),其值越小越早被執(zhí)行

NI :代表這個(gè)進(jìn)程的nice值

這里的前面的三個(gè)信息,我們都是比較好容易理解的,但是后面的兩個(gè)奇怪的信息,一個(gè)是PRI,一個(gè)是NI,這到底是什么東西?相對(duì)而言,PRI也還是比較好理解的,即進(jìn)程的優(yōu)先級(jí),或者通俗點(diǎn)說(shuō)就是程序被CPU執(zhí)行的先后順序,此值越小進(jìn)程的優(yōu)先級(jí)別越高。那NI呢?就是我們所要說(shuō)的nice值了,其表示進(jìn)程可被執(zhí)行的優(yōu)先級(jí)的修正數(shù)值。如前面所說(shuō),PRI值越小越快被執(zhí)行,那么加入nice值后,將會(huì)使得PRI變?yōu)?#xff1a;PRI(new)=PRI(old)+nice。這樣,當(dāng)nice值為負(fù)值的時(shí)候,那么該程序?qū)?huì)優(yōu)先級(jí)值將變小,即其優(yōu)先級(jí)會(huì)變高,則其越快被執(zhí)行。

進(jìn)程在創(chuàng)建時(shí)并不是平等的,他們被賦予不同的優(yōu)先級(jí)值,例如有些對(duì)計(jì)算機(jī)本身的操作至關(guān)重要的程序必須比其他次要的程序具有更高的優(yōu)先級(jí)(則其有更小的優(yōu)先級(jí)值)。而如前面所說(shuō),nice的值是表示進(jìn)程優(yōu)先級(jí)值可被修正數(shù)據(jù)值,因此,每個(gè)進(jìn)程都在其計(jì)劃執(zhí)行時(shí)被賦予一個(gè)系統(tǒng)nice值,這樣系統(tǒng)就可以根據(jù)系統(tǒng)的資源以及具體進(jìn)程的各類(lèi)資源消耗情況,主動(dòng)干預(yù)進(jìn)程的優(yōu)先級(jí)值。這個(gè)過(guò)程,用戶(hù)也可手工干預(yù)其中,但是要被賦予相應(yīng)的權(quán)限。

在UNIX系統(tǒng)或者LINUX系統(tǒng)中,使用從-20到+19的一個(gè)可變數(shù)值來(lái)表示這個(gè)nice值(LINUX和AIX是這種情況,HP-UX系統(tǒng)的值范圍是從0到39),并且在通常情況下,子進(jìn)程會(huì)繼承父進(jìn)程的系統(tǒng)nice值。具有最高優(yōu)先級(jí)的程序,其nice值最低,所以在UNIX和LINUX系統(tǒng)中,值-20使得一項(xiàng)任務(wù)變得非常重要(HP-UX為0);與之相反,如果任務(wù)的

nice 為+19(HP-UX為39),則表示它是一個(gè)高尚的、無(wú)私的任務(wù),允許所有其他任務(wù)比自己享有寶貴的 CPU

時(shí)間的更大使用份額,這也就是nice的名稱(chēng)的意會(huì)來(lái)意。

[root@master ~]# nice

0

root用戶(hù)把nice加3.

[root@master ~]# nice -n 3 ls

123.txt

Desktop

install.log

jrockit-jdk1.6.0_29-R28.1.5-4.0.1

MySQL-python-1.2.3.tar.gz? Python-2.7.3.tgz

setuptools-0.6c8.tar.gz? vmtouch.c

anaconda-ks.cfg???? file1

install.log.syslog

jrockit-jdk1.6.0_29.tar.gz

part-00000.bz2

root

soft

yum_r.txt

cmake-2.8.7.tar.gz? file2

integer.sh

MySQL-python-1.2.3

Python-2.7.3

setuptools-0.6c8? vmtouch

而root用戶(hù)就可以給其子進(jìn)程賦予更小的nice值,如下:

[root@dbbak root]# nice

0

[root@dbbak root]# nice -n -3 ls

123.txt

Desktop

install.log

jrockit-jdk1.6.0_29-R28.1.5-4.0.1

MySQL-python-1.2.3.tar.gz? Python-2.7.3.tgz

setuptools-0.6c8.tar.gz? vmtouch.c

anaconda-ks.cfg???? file1

install.log.syslog

jrockit-jdk1.6.0_29.tar.gz

part-00000.bz2

root

soft

yum_r.txt

cmake-2.8.7.tar.gz? file2

integer.sh

MySQL-python-1.2.3

Python-2.7.3

setuptools-0.6c8? vmtouch

對(duì)于后臺(tái)進(jìn)程,其nice會(huì)在其被顯示賦予的值過(guò)后再加上4。如“nice 12 command

&”命令執(zhí)行時(shí),則其會(huì)以nice=36值來(lái)運(yùn)行程序(HP-UX系統(tǒng))。這里有個(gè)問(wèn)題,即如果用戶(hù)設(shè)置的nice值超過(guò)了nice的邊界值(LINUX和AIX為-20到19,HP-UX為0到39)會(huì)怎樣,則系統(tǒng)就取nice的邊界值作為進(jìn)程的nice值。

與進(jìn)程的nice相關(guān)的命令有2個(gè),分別是nice和renice。

nice命令就是設(shè)置一個(gè)要執(zhí)行command進(jìn)程的nice值,其命令格式是 nice –n adjustment command

command_option,這里就設(shè)置要執(zhí)行的command的nice,如果這里不指定adjustment,則默認(rèn)為10。

renice命令就是設(shè)置一個(gè)已經(jīng)在運(yùn)行的進(jìn)程的nice值,如假設(shè)一運(yùn)行進(jìn)程本來(lái)nice值為0,renice為3后,則這個(gè)運(yùn)行進(jìn)程的nice值就為3了。renice的執(zhí)行必須要有相應(yīng)的權(quán)限方可執(zhí)行。它可以根據(jù)用戶(hù)、進(jìn)程ID、進(jìn)程組來(lái)設(shè)置進(jìn)程的nice值。

對(duì)nice值一個(gè)形象比喻,假設(shè)在一個(gè)CPU輪轉(zhuǎn)中,有2個(gè)runnable的進(jìn)程A和B,如果他們的nice值都為0(如果是HP-UX則為20),加上內(nèi)核會(huì)給他們每人分配1k個(gè)cpu時(shí)間片。但是假設(shè)進(jìn)程A的為0,但是B的值為-10,那么此時(shí)CPU則會(huì)可能分別給A和B分配1k和1.5k的時(shí)間片。故可以形象的理解為,nice的值影響了內(nèi)核分配給進(jìn)程的cpu時(shí)間片的多少,時(shí)間片越多的進(jìn)程,其優(yōu)先級(jí)越高,其優(yōu)先級(jí)值越低。

從使用top、ps等命令看到的nice值,就是進(jìn)程所擁有的nice值,使用iostat等看到的%nice,就是用戶(hù)進(jìn)程空間中改變過(guò)優(yōu)先級(jí)的進(jìn)程的占用CPU的百分比,如上例中就說(shuō)0.5k/2.5k=1/5=20%。

到目前為止,更需要強(qiáng)調(diào)一點(diǎn)的是,進(jìn)程的nice值不是進(jìn)程的優(yōu)先級(jí),他們不是一個(gè)概念,但是進(jìn)程nice值會(huì)影響到進(jìn)程的優(yōu)先級(jí)變化。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的分析linux系统的运行性能,Linux系统如何分析CPU的性能瓶颈的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。