性能分析之構(gòu)建 Linux 操作系統(tǒng)分析決策樹

      網(wǎng)友投稿 835 2025-04-01

      前言


      構(gòu)建決策樹的關(guān)鍵

      構(gòu)建 CPU 分析決策樹

      構(gòu)建 I/O 分析決策樹

      構(gòu)建內(nèi)存分析決策樹

      構(gòu)建網(wǎng)絡(luò)分析決策樹

      總結(jié)

      前言

      構(gòu)建決策樹的關(guān)鍵

      構(gòu)建 CPU 分析決策樹

      構(gòu)建 I/O 分析決策樹

      構(gòu)建內(nèi)存分析決策樹

      構(gòu)建網(wǎng)絡(luò)分析決策樹

      總結(jié)

      前言

      初學(xué)者對性能分析的感受是:橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同。那么應(yīng)該怎么學(xué)習(xí)才能建立起自己的性能分析體系,才能做到千山同一月,萬戶盡皆春。千江有水千江月,萬里無云萬里天呢?

      這時(shí)候分析決策樹,對性能分析人員就體現(xiàn)價(jià)值了,是性能分析中不可或缺的一環(huán)。它是對架構(gòu)的梳理,是對系統(tǒng)的梳理,是對問題的梳理,是對查找證據(jù)鏈過程的梳理,是對分析思路的梳理。它起的是縱觀全局,高屋建瓴的指導(dǎo)作用。性能做到了藝術(shù)的層級之后,分析決策樹就是提煉出來的,可以觸類旁通的方法論。而我要在這里跟你講的,就是這樣的方法論。

      構(gòu)建決策樹的關(guān)鍵

      決策樹基本上就是把我們以前的分析經(jīng)驗(yàn)總結(jié)出來,在做決策樹的時(shí)候,一般會經(jīng)歷兩個(gè)階段:構(gòu)造和剪枝。

      概念簡單來說:

      構(gòu)造的過程就是選擇什么屬性作為節(jié)點(diǎn)的過程構(gòu)造的過程就是選擇什么屬性作為節(jié)點(diǎn)的過程;

      剪枝就是給決策樹瘦身,這一步想實(shí)現(xiàn)的目標(biāo)就是,不需要太多的判斷,同樣可以得到不錯(cuò)的結(jié)果。之所以這么做,是為了防止“過擬合”現(xiàn)象的發(fā)生。

      從性能分析角度來理解:

      構(gòu)造:需要根據(jù)經(jīng)驗(yàn)是對架構(gòu)的梳理,是對系統(tǒng)的梳理,是對問題的梳理,是對查找證據(jù)鏈過程的梳理,是對分析思路的梳理;

      剪枝:需要對對不同時(shí)間序列性能數(shù)據(jù)的相關(guān)性分析,其核心就是要理解各個(gè)性能指標(biāo)的關(guān)系,同時(shí)進(jìn)行證據(jù)鏈查找,根據(jù)數(shù)據(jù)的變化來推斷得出各種結(jié)論,比如故障判別、根因分析等。

      構(gòu)建 CPU 分析決策樹

      第一層是業(yè)務(wù)指標(biāo):

      響應(yīng)時(shí)間

      TPS

      錯(cuò)誤率

      第二層是資源指標(biāo):

      CPU

      IO

      MEM

      NET

      分析方法(Java應(yīng)用):

      使用 TOP 命令找到誰在消耗 CPU 比較高的進(jìn)程,例如 pid=1232

      使用 top -p 1232 單獨(dú)監(jiān)控該進(jìn)程

      輸入大寫的 H 列出當(dāng)前進(jìn)程下的所有線程

      查看消耗 CPU 比較高的線程,并看線程編號,例如:12399

      使用 jstack 1232>pagainfo.dump 獲取當(dāng)前進(jìn)程下的 dump 線程信息

      將第四步獲取的線程編號 12399 轉(zhuǎn)換成 16 進(jìn)制 306f (printf "%x\n" 12399)

      根據(jù) 306f 在第 5 步獲取的棧信息中查找 tid=0x306 的線程

      定位代碼位置(根據(jù)打印出來的堆棧信息查看代碼所在位置)

      以上過程簡單的辦法是借助一些開源的 shell 工具,如:

      用于快速排查Java的CPU性能問題(top us值過高),自動(dòng)查出運(yùn)行的Java進(jìn)程中消耗CPU多的線程,并打印出其線程棧,從而確定導(dǎo)致性能問題的方法調(diào)用。

      https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads

      構(gòu)建 I/O 分析決策樹

      先聊下磁盤系統(tǒng)結(jié)構(gòu):

      如果是IDE驅(qū)動(dòng)器,磁盤命名為:hda、hdb、hdc等;

      如果是SCSI驅(qū)動(dòng)器,磁盤命名為:sda、sdb、sdc等

      磁盤通常被分成多個(gè)分區(qū),分區(qū)設(shè)備的名稱是通過將分區(qū)號添加到基本設(shè)備名稱的末尾來創(chuàng)建的,每個(gè)單獨(dú)的分區(qū)通常包含一個(gè)文件系統(tǒng)或一個(gè)交換分區(qū),按照/etc/fstab中的指定,這些分區(qū)被裝載到 Linux 根文件系統(tǒng)中。這些掛載的文件系統(tǒng)包含應(yīng)用程序讀寫的文件。

      當(dāng)應(yīng)用程序執(zhí)行讀或?qū)懖僮鲿r(shí),Linux 內(nèi)核可能會將文件的副本存儲在其緩存或緩沖區(qū)中,并在不訪問磁盤的情況下返回所請求的信息。但是,如果 Linux 內(nèi)核沒有存儲在內(nèi)存中的數(shù)據(jù)副本,它會向磁盤的 I/O 隊(duì)列添加一個(gè)請求。如果 Linux 內(nèi)核注意到多個(gè)請求請求磁盤上的連續(xù)位置,它會將它們合并為一個(gè)大請求。這種合并消除了第二個(gè)請求的尋道時(shí)間,從而提高了總體磁盤性能。當(dāng)請求被放入磁盤隊(duì)列時(shí),如果磁盤當(dāng)前不忙,它將開始為 I/O 請求提供服務(wù)。如果磁盤正忙,請求將在隊(duì)列中等待,直到驅(qū)動(dòng)器可用,然后對其進(jìn)行服務(wù)。

      在這一層咱們主要關(guān)注 I/O ,既然是關(guān)注 I/O ,如果 I/O 高應(yīng)該怎么去分析?怎么定位?

      vmstat [-D] [-d] [-p 分區(qū)]

      參數(shù)說明:

      d:顯示磁盤相關(guān)統(tǒng)計(jì)信息。

      D: 顯示 Linux I/O 子系統(tǒng)的總統(tǒng)計(jì)信息,統(tǒng)計(jì)數(shù)據(jù)是自系統(tǒng)啟動(dòng)以來的總數(shù)

      p: 統(tǒng)計(jì)數(shù)據(jù)是自系統(tǒng)啟動(dòng)以來的總數(shù),而不僅僅是此示例和上一個(gè)示例之間發(fā)生的總數(shù)。

      使用 vmstat 中關(guān)于磁盤也就是 bo/bi/wa

      使用 vmstat 中關(guān)于磁盤也就是 bo/bi/wa:

      bo 這表示在前一間隔內(nèi)寫入磁盤的塊總數(shù)。(在vmstat中,磁盤的塊大小通常為1024字節(jié)。)

      bi 顯示在上一間隔中從磁盤讀取的塊數(shù)。(在vmstat中,磁盤的塊大小通常為1024字節(jié)。)

      wa 表示等待I/O完成所花費(fèi)的CPU時(shí)間。每秒寫入磁盤塊的速率

      在 linux 操作系統(tǒng)中 I/O 分析最常見的命令是 iostat

      iostat -d -x -k 1 10

      計(jì)數(shù)器信息的含義:

      rsec/s:每秒讀取的扇區(qū)數(shù);

      wsec/:每秒寫入的扇區(qū)數(shù)。

      性能分析之構(gòu)建 Linux 操作系統(tǒng)分析決策樹

      avgrq-sz:平均請求扇區(qū)的大小

      avgqu-sz:是平均請求隊(duì)列的長度。毫無疑問,隊(duì)列長度越短越好。

      await:每一個(gè) I/O 請求的處理的平均時(shí)間(單位是微秒毫秒)。這里可以理解為 I/O 的響應(yīng)時(shí)間,一般系統(tǒng) I/O 響應(yīng)時(shí)間應(yīng)該低于 5ms,如果大于 10ms就比較大了。這個(gè)時(shí)間包括了隊(duì)列時(shí)間和服務(wù)時(shí)間,也就是說,一般情況下,await 大于 svctm,它們的差值越小,則說明隊(duì)列時(shí)間越短,反之差值越大,隊(duì)列時(shí)間越長,說明系統(tǒng)出了問題。

      svctm:表示平均每次設(shè)備 I/O 操作的服務(wù)時(shí)間(以毫秒為單位)。如果 svctm 的值與 await 很接近,表示幾乎沒有 I/O 等待,磁盤性能很好,如果 await 的值遠(yuǎn)高于 svctm 的值,則表示 I/O 隊(duì)列等待太長,系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?/p>

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

      主要關(guān)注計(jì)數(shù)器:

      util

      avgqu-sz

      await:

      svtm

      util

      出現(xiàn)瓶頸的計(jì)數(shù)器:

      %util 很高

      await 遠(yuǎn)大于 svctm

      avgqu-sz 比較大

      cpu > wa 過大 (參考值超過 20)

      system > bi&bo 過大(參考值超過 2000)

      構(gòu)建內(nèi)存分析決策樹

      在這一層咱們主要關(guān)注 mem ,既然是關(guān)注 mem,如果 mem 高應(yīng)該怎么去分析?怎么定位?

      常用命令 free:

      計(jì)數(shù)器說明:

      total:總計(jì)物理內(nèi)存的大小

      used:已使用多大

      free:可用有多少

      Shared:多個(gè)進(jìn)程共享的內(nèi)存總額

      Buffers/cached:磁盤緩存的大小

      vmstat 可以提供的 CPU 計(jì)數(shù)器外,還可以在內(nèi)存統(tǒng)計(jì)時(shí)使用:

      vmstat [-a] [-s] [-m] [-d] [-p] [n] [-f] [-v]

      參數(shù)說明:

      -a:顯示活躍和非活躍內(nèi)存

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

      -m:顯示 slabinfo

      -n:只在開始時(shí)顯示一次各字段名稱。

      -s:顯示內(nèi)存相關(guān)統(tǒng)計(jì)信息及多種系統(tǒng)活動(dòng)數(shù)量。

      delay:刷新時(shí)間間隔。如果不指定,只顯示一條結(jié)果。

      count:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時(shí)間間隔,這時(shí)刷新次數(shù)為無窮。

      -d:顯示磁盤相關(guān)統(tǒng)計(jì)信息。

      -p:顯示指定磁盤分區(qū)統(tǒng)計(jì)信息

      -S:使用指定單位顯示。參數(shù)有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(jié)(byte)。默認(rèn)單位為K(1024 bytes)

      -V:顯示 vmstat 版本信息。

      以上計(jì)數(shù)器具體每個(gè)信息代表什么,大家自行搜索一下,網(wǎng)上資料多如牛毛。

      vmstat -m顯示的信息與 cat /proc/slabinfo 顯示的信息相同:

      這詳細(xì)描述了內(nèi)核的內(nèi)存是如何分配的,并且有助于確定內(nèi)核的哪個(gè)區(qū)域消耗的內(nèi)存最多(通過這個(gè)命令就能知道內(nèi)存在那個(gè)區(qū)域消耗最多)

      vmstat -s

      其準(zhǔn)確跟蹤內(nèi)核如何使用其內(nèi)存時(shí)非常有用。

      我們可以使用 vmstat 命令,監(jiān)控包括 Linux 的CPU使用率,內(nèi)存使用,虛擬內(nèi)存交換情況,IO 讀寫情況,用于分析磁盤的壓力在哪里,在 swap,還是在 load 文件等;

      構(gòu)建網(wǎng)絡(luò)分析決策樹

      在學(xué)習(xí)網(wǎng)絡(luò)這一層需要了解下網(wǎng)絡(luò)的七層協(xié)議:

      常用命令:

      hostname

      ping

      ifconfig

      wconfig

      netstat

      nslookup

      traceroute

      finger

      telnet

      ethtool

      ip -s [-s] 鏈接

      計(jì)數(shù)器解釋:

      bytes:發(fā)送或接收的字節(jié)總數(shù)。

      packets:發(fā)送或接收的數(shù)據(jù)包總數(shù)。

      errors:發(fā)送或接收時(shí)發(fā)生的錯(cuò)誤數(shù)。

      dropped:由于網(wǎng)卡資源不足而未發(fā)送或接收的數(shù)據(jù)包數(shù)。

      overruns:網(wǎng)絡(luò)沒有足夠緩沖空間發(fā)送或接收更多數(shù)據(jù)包的次數(shù)。

      mcast:已接收的多播數(shù)據(jù)包數(shù)。

      carrier:由于鏈路媒體故障(如電纜故障)而丟棄的數(shù)據(jù)包數(shù)。

      collsns:這是設(shè)備在傳輸時(shí)遇到的沖突數(shù)。當(dāng)兩臺設(shè)備試圖同時(shí)使用網(wǎng)絡(luò)時(shí),就會發(fā)生這種情況。

      sar [-n DEV | EDEV | 襪子 | FULL ] [DEVICE] [間隔] [計(jì)數(shù)]

      也可使用命令:

      yum install iptraf iptraf-ng -d eth0 -t 1

      查看哪個(gè)端口進(jìn)出流量是多少?

      iptraf-ng -s eth0 -t 10

      網(wǎng)絡(luò)統(tǒng)計(jì):

      [-p] [-c] [–interfaces=<名稱>] [-s] [-t] [-u] [-w]

      netstat -t -c

      netstat -t -p

      netstat -s -u

      總結(jié)

      如果你看到 Linux 操作系統(tǒng)架構(gòu)圖就頭大,那么這時(shí)候應(yīng)該覺得有了希望。我覺得操作系統(tǒng)上的問題判斷是比較清晰的,所以基于決策樹,每個(gè)人都可以做到對操作系統(tǒng)中性能問題的證據(jù)鏈查找。

      Linux 云性能測試服務(wù) CPTS 決策樹

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:鏈接怎么改回來(怎么改鏈接里面的內(nèi)容)
      下一篇:工藝部策劃流程圖制作模板(工藝部策劃流程圖制作模板下載)
      相關(guān)文章
      亚洲日韩aⅴ在线视频| 亚洲精品tv久久久久| 亚洲中文字幕无码一区二区三区| 精品亚洲国产成人av| 亚洲日韩国产二区无码| 亚洲人成网站看在线播放| 亚洲不卡在线观看| 亚洲视频免费在线播放| 1区1区3区4区产品亚洲| 亚洲精品午夜在线观看| 亚洲国产成人精品无码一区二区| 久久精品国产亚洲AV电影 | 亚洲色偷偷偷网站色偷一区| 亚洲最大的成网4438| 亚洲综合色丁香麻豆| 亚洲图片中文字幕| 亚洲人成电影在线观看网| 亚洲videos| 亚洲国产精品无码久久久秋霞1| 亚洲精品乱码久久久久久V | 亚洲成AV人片在线观看无| 国产成A人亚洲精V品无码| 亚洲国产精品SSS在线观看AV| 亚洲人成人77777网站| 国产成人亚洲综合无码精品 | 亚洲色大成网站www永久男同| 亚洲av无码一区二区三区天堂 | 一区二区三区亚洲视频| 亚洲一区二区三区国产精品| 亚洲人成网77777色在线播放| 亚洲国产精品高清久久久| 亚洲黄色片在线观看| 亚洲成人免费电影| 中文字幕精品三区无码亚洲| 国产精品亚洲小说专区| 国产亚洲AV手机在线观看 | 亚洲精品乱码久久久久蜜桃| 亚洲精品在线视频| 久久被窝电影亚洲爽爽爽 | 亚洲无人区视频大全| 亚洲一区二区无码偷拍|