成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊性能指標CPU利用率如何計算的?

開發 前端
CPU 負載統計了一段時間內所有正在使用電話的人以及等待分配電話的人數的平均值。為了得到平均負載情況,我們每 5 分鐘統計一次人數,并在第 1、5、15 分鐘時取平均值,從而得到 1、5、15 分鐘的平均負載。

CPU 利用率,又稱 CPU 使用率。顧名思義,CPU 利用率用于描述 CPU 的運行情況,反映了一段時間內 CPU 被程序占用的情況。使用率越高,表示計算機在該時間段內運行了更多的程序,反之則較少。CPU 的利用率與其性能直接相關。

現代操作系統如 Windows、Linux 和 MacOS 都是多用戶、多任務的分時操作系統。這意味著多個用戶可以在同一時間“同時”進行多項操作,這已經成為我們日常生活的一部分,顯得非常普遍。然而,在單個 CPU 計算機中,實際上同一時間只能處理一項任務。

為了實現看似“同時處理多項任務”的效果,分時操作系統將 CPU 時間劃分為長度基本相同的時間片段,也就是“時間片”。操作系統通過管理這些時間片,依次分配給各個用戶使用。

如果某個作業在其分配的時間片結束前沒有完成,該作業會被暫停,釋放 CPU,等待下一個時間片再繼續執行。此時 CPU 會被分配給另一個作業使用。由于計算機處理速度非常快,適當設置時間片的長度使得用戶在時間片間隙感知不到停頓,仿佛整個系統是在獨占 CPU 一樣。

因此,我們提到的 CPU 占用率通常指的就是 CPU 在時間片內被占用的情況。

查看 CPU 利用率

在 Linux 系統中,確實可以使用一些命令來查看系統的負載情況和 CPU 利用率。這些命令包括:

  1. uptime: 顯示系統的運行時間以及平均負載。
  2. top: 實時顯示系統中各個進程的資源占用情況,包括 CPU 利用率、內存占用等。
  3. w: 顯示當前登錄用戶和各用戶的活動信息,包括登錄時間、運行的命令等。
  4. vmstat: 報告系統的虛擬內存統計信息,包括 CPU 利用率、內存利用率、磁盤 I/O 等。

這些命令在終端中執行后,可以幫助管理員實時監控系統的性能和資源使用情況,從而及時進行調整和優化。

vmstat 命令

vmstat 命令是 Linux/Unix 系統中常見的監控工具,能夠展示在指定時間間隔內服務器的各種狀態值,包括 CPU 利用率、內存使用情況、虛擬內存交換情況以及 IO 讀寫情況。

~ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  1      0 2446260      0 3202312  0    0   201 16304    1    6  0  0 84  5 1

從上述結果中,我們可以獲取大量信息,但本文重點關注 CPU 部分的指標。

us sy id wa st
0  0  84  5 1

以上幾個指標是當前 CPU 的占用情況。

  • %us: 用戶進程執行時間百分比。
  • %sy: 內核系統進程執行時間百分比。
  • %id: 空閑時間百分比。
  • %wa: IO 等待時間百分比。
  • %st: 虛擬 CPU 等待實際 CPU 的時間百分比。

當%us 較高時,表示用戶進程占用了大量 CPU 時間。然而,如果長期超過 50%,則需要考慮優化程序算法或加速處理。

高%sy 表明系統內核消耗了大量 CPU 資源,這不利于系統正常運行,應當尋找問題根源。

%wa 的高值表示 IO 等待較為嚴重,可能是由于磁盤隨機訪問頻繁或磁盤性能瓶頸引起的塊操作問題。

通常使用 vmstat 工具時,需要指定兩個數值參數。第一個參數表示采樣的時間間隔,單位為秒;第二個參數表示采樣的次數。

~ vmstat 2 2
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      0 2479444    0 3165172    0    0   196 15905    2    8  0  0 84  5 11
 0  0      0 2479404    0 3165176

以上命令表示采集兩次數據,每隔 2 秒采集一次。

top 命令

top 命令是 Linux 系統下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用情況,類似于 Windows 中的任務管理器。

~ top
top - 10:58:07 up 18:13,  1 user,  load average: 0.32, 0.24, 0.19
Tasks:  64 total,   1 running,  63 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 92.8%id,  0.1%wa,  0.0%hi,  0.0%si,  6.8%st
Mem:   8388608k total,  5928076k used,  2460532k free,        0k buffers
Swap: 16777216k total,        0k used, 16777216k free,  3181996k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  2393 admin     20   0 5056m 2.2g  56m S  4.3 27.6  79:06.21 java
  1054 root      20   0  338m 9760 5112 S  0.3  0.1   2:37.30 logagent

從上述打印信息中,我們可以看到第三行反映了當前 CPU 的整體情況。

此外,我們還能觀察到 ID 為 2393 的 Java 進程當前內存使用率最高,約占 4.3%。

由于 Java 是多線程的,有時候我們希望能夠查看一個 Java 進程中所有線程的 CPU 使用情況,這也可以通過 top 命令來實現。

~ top -Hp 1893
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
19163 admin     20   0 5056m 2.2g  56m S  1.7 27.6  17:39.97 java
10649 admin     20   0 5056m 2.2g  56m S  0.7 27.6   4:07.64 java
5884 admin     20   0 5056m 2.2g  56m S  0.3 27.6   2:18.19 java
10650 admin     20   0 5056m 2.2g  56m S  0.3 27.6   1:24.77 java

通過執行top -Hp 1893命令,我們可以發現,當前進程 ID 為 1893 的 Java 進程中,線程 ID 為 19163 的線程占用 CPU 最高,大約達到 1.7%。

PS:top 命令的輸出結果是動態變化的,會隨著系統情況的變化實時更新。

CPU 使用率的計算邏輯

描述系統 CPU 使用情況主要包括以下幾個方面:

  • user: 自系統啟動以來,CPU 處于用戶態運行的時間,不包括 nice 值為負的進程。
  • nice: 自系統啟動以來,CPU 中 nice 值為負的進程占用的時間。
  • system: 自系統啟動以來,CPU 處于內核態運行的時間。
  • idle: 自系統啟動以來,CPU 除了 iowait 以外的空閑等待時間。
  • iowait: 自系統啟動以來,CPU 等待 IO 操作完成的時間。
  • irq: 自系統啟動以來,CPU 處理硬中斷花費的時間。
  • softirq: 自系統啟動以來,CPU 處理軟中斷花費的時間。
  • steal: 自系統啟動以來,CPU 被其他虛擬環境中的操作系統“偷走”的時間。
  • guest: 自系統啟動以來,CPU 運行在通過 Linux 內核控制的客戶操作系統上的虛擬 CPU 的時間。
  • guest_nice: 自系統啟動以來,CPU 運行在通過 Linux 內核控制的客戶操作系統上的 nice 值為負的虛擬 CPU 的時間。

理解了以上參數的含義,計算某段時間內的 CPU 使用率并不復雜。假設我們有兩個時間點,t1 和 t2,可以通過以下公式來計算 CPU 在這段時間內的總使用時間:

( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2 + steal2 + guest2 + guest_nice2 ) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1 + steal1 + guest1 + guest_nice1)

CPU 的空閑時間:

(idle2 -idle1)

CPU 在 t1 和 t2 時間內的使用率:

CPU非空閑時間/CPU總時間*100%=(1-CPU的空閑時間/CPU總時間)*100%

則:

CPU(t1,t2)使用率:1-(idle2-idle1)/(( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2 + steal2 + guest2 + guest_nice2 ) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1 + steal1 + guest1 + guest_nice1))

CPU 利用率和負載

很多朋友常常分不清楚 CPU 利用率和負載之間的區別與聯系。

CPU 利用率是對某一時間段內 CPU 使用情況的統計,通過這個指標可以了解 CPU 在特定時間段內被使用的情況。

而 CPU 負載(Load)則是對某一時間段內 CPU 正在處理和等待處理的進程數之和的統計信息,也可以理解為 CPU 使用隊列的長度統計。

可以用一個比喻來解釋,將 CPU 的使用比作排隊打電話:

我們可以將 CPU 比喻為一個電話亭,每一個進程就像是需要打電話的人。假設有一個單核計算機,現在有 10 個人需要使用電話(代表 10 個進程)。電話使用規則是管理員按順序給每個人分配 1 分鐘的通話時間。如果一個人在 1 分鐘內完成通話,他可以將電話交還給管理員。但如果在 1 分鐘內沒有完成通話,他需要重新排隊等待再次分配。在電話亭使用過程中,會有人打完電話離開,有人沒打完電話選擇重新排隊,也會有新人來排隊,這種人數的變化就相當于任務數的增減。

CPU 負載統計了一段時間內所有正在使用電話的人以及等待分配電話的人數的平均值。為了得到平均負載情況,我們每 5 分鐘統計一次人數,并在第 1、5、15 分鐘時取平均值,從而得到 1、5、15 分鐘的平均負載。

而 CPU 利用率則統計了進程實際使用電話的時間與在電話亭內停留的總時間的比率。例如,一個用戶獲得了 1 分鐘的使用權,在 10 秒內打了電話,接著花了 20 秒查電話簿,剩下的 30 秒又打了一個電話。那么他的利用率就是(10+30)/60。

Java Web 應用 CPU 使用率飆高排查思路

當發現系統的 CPU 使用率突然升高,首先需要確定是哪個進程造成了 CPU 負載的增加。在 Java 代碼中,導致 CPU 占用高的原因可能包括以下幾點:

  1. 內存泄漏導致大量 Full GC:例如典型的 Java 1.7 之前的 String.subString 方法可能會導致內存泄漏問題,進而引發頻繁的 Full GC 操作。
  2. 代碼中存在死循環:特別是在多線程場景下,使用不當的數據結構如 HashMap 可能導致死循環,使得某些線程消耗大量 CPU 資源。

解決這些問題的基本步驟是首先定位占用 CPU 較多的進程和線程,然后通過相應的命令查看這些線程的執行情況,并分析代碼以定位問題。關鍵在于熟練使用 jstack、jstat 以及 jmap 等工具來定位和解決 Java 進程中的問題。

那么如何在真實環境中排查 CPU 飆高的問題呢?由于本篇幅過長,感興趣的小伙伴可以關注,下期出。

責任編輯:武曉燕 來源: 碼上遇見你
相關推薦

2024-06-28 11:54:20

2010-09-08 11:38:27

2023-11-20 09:48:13

Linux性能指標命令

2023-04-04 09:22:50

LinuxCPU命令

2017-08-25 15:56:54

Linuxproc文件系統CPU利用率

2010-03-11 16:49:55

Linux CPU利用

2013-06-17 10:19:30

交換機性能交換機參數交換機

2022-05-02 08:56:04

前端性能指標

2011-05-04 13:53:08

jQuery

2024-09-20 08:32:21

2019-03-05 15:53:40

Linux服務器CPU

2011-06-07 14:16:38

雙絞線

2011-07-28 14:58:49

HP ProLiant服務器

2023-11-25 20:16:22

前端

2023-12-17 14:49:20

前端首屏時間

2023-12-29 15:30:41

內存存儲

2023-09-08 15:37:29

軟件開發性能

2018-11-20 10:09:42

磁盤IO性能

2019-05-21 15:42:08

磁盤IO指標

2024-10-14 13:01:33

AOTcpu符號
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 白浆在线 | 成人综合在线视频 | 国产一区二区三区视频在线观看 | 久久成人av电影 | 精品九九在线 | 91精品久久久久久久久 | 国产精品精品久久久久久 | 国产精品久久久久久久久婷婷 | 国产精品自拍av | 99免费在线观看视频 | 九九导航 | 欧美日一区 | 国产一区在线免费 | 在线亚洲免费视频 | 久久久久黄色 | 亚洲综合无码一区二区 | 精品在线| 国产在线精品一区二区 | 久久91精品久久久久久9鸭 | 可以看黄的视频 | 中文字幕一区二区三区在线乱码 | 亚洲欧美一区二区三区情侣bbw | 欧美freesex黑人又粗又大 | 欧美黄在线观看 | 久久久精品在线 | 国产精品久久精品 | 欧州一区二区三区 | 韩日一区 | 亚洲三区在线 | 天天综合久久 | 国产日韩一区二区 | 国产精品久久久久久久久大全 | 激情小视频 | 国产在线精品一区二区 | 天天射网站 | 在线欧美一区 | 国产无人区一区二区三区 | 久久精品亚洲欧美日韩精品中文字幕 | 91在线电影 | 日韩国产一区二区三区 | 国产乱码精品一区二区三区中文 |