自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊Top命令使用技巧,拿捏住~

開發(fā) 后端
今天給大家分享一個(gè)知識(shí)點(diǎn),就是平時(shí)我們線上服務(wù)器部署的 Java 系統(tǒng)如果發(fā)現(xiàn)要是性能不太好,此時(shí)應(yīng)該如何登錄到線上服務(wù)器,接著用 top 命令去分析線上系統(tǒng)的性能呢?下面我們就來一步一步給大家講解一下 top 命令的使用技巧。

目錄

  • 線上系統(tǒng)是如何運(yùn)行的?
  • CPU 是如何并發(fā)運(yùn)行多個(gè)線程的?
  • 線程太多會(huì)導(dǎo)致什么樣的后果?
  • 經(jīng)常聽說的 CPU 使用率和負(fù)載到底是什么?
  • 如何通過 top 命令來查看 CPU 使用率和負(fù)載?

今天給大家分享一個(gè)知識(shí)點(diǎn),就是平時(shí)我們線上服務(wù)器部署的 Java 系統(tǒng)如果發(fā)現(xiàn)要是性能不太好,此時(shí)應(yīng)該如何登錄到線上服務(wù)器,接著用 top 命令去分析線上系統(tǒng)的性能呢?下面我們就來一步一步給大家講解一下 top 命令的使用技巧。

線上系統(tǒng)是如何運(yùn)行的?

首先,在講解 top 命令的使用技巧之前,我們先得給大家鋪墊一些基礎(chǔ)的知識(shí),就是關(guān)于線上系統(tǒng)在服務(wù)器上運(yùn)行的時(shí)候,他會(huì)需要使用哪些資源,或者換句話說,他會(huì)需要使用到服務(wù)器的哪些硬件呢?

首當(dāng)其中的,大家必須知道一個(gè)事兒,就是我們線上運(yùn)行的系統(tǒng),他的本質(zhì)其實(shí)就是一個(gè) Linux 進(jìn)程,也就就是 JVM 進(jìn)程,這個(gè) JVM 進(jìn)程實(shí)際上會(huì)開啟多個(gè)線程,每個(gè)線程都會(huì)交給 CPU 來運(yùn)行。

這個(gè) CPU 就是我們很關(guān)鍵的一個(gè)硬件,CPU 在運(yùn)行我們的線程的同時(shí),當(dāng)然也會(huì)運(yùn)行線程負(fù)責(zé)執(zhí)行的那部分代碼了。

如下圖:

CPU 是如何并發(fā)運(yùn)行多個(gè)線程的?

但是單單是這個(gè) CPU 運(yùn)行多個(gè)線程的事兒就有的一說,可能很多人不知道的是,現(xiàn)代服務(wù)器都是有多個(gè) CPU 的,或者說一個(gè) CPU 是有多個(gè)核的。

所以說,我們要搞清楚,一個(gè) CPU 是有多個(gè) cores 的,所以你的一個(gè) cpu core 并發(fā)運(yùn)行多個(gè)線程,以及多個(gè) cpu core 同時(shí)運(yùn)行多個(gè)線程,是不太一樣的。

這個(gè)一個(gè) cpu core 并發(fā)運(yùn)行多個(gè)線程,實(shí)際上他不是說同時(shí)運(yùn)行多個(gè)線程,而是快速的切換運(yùn)行每一個(gè)線程,什么意思呢?

就是說,你這個(gè) cpu core 會(huì)先運(yùn)行一下線程 A,執(zhí)行一小會(huì)兒他的代碼,再立刻切換去運(yùn)行線程 B,運(yùn)行一小會(huì)兒他的代碼再快速的切換過去運(yùn)行線程 C。

他只不過是切換的速度非常快,讓你有一種錯(cuò)覺,一個(gè) cpu core 可以同時(shí)運(yùn)行多個(gè)線程一樣,其實(shí)并不是。

如下圖:

那如果是有多個(gè) cpu core 呢?這個(gè)時(shí)候其實(shí)每個(gè) cpu core 都可以運(yùn)行一個(gè)線程了,如果你有多個(gè) cpu core 同時(shí)運(yùn)行多個(gè)線程,那就是真正的同時(shí)了,因?yàn)槊總€(gè) cpu core 都可以自己獨(dú)立運(yùn)行一個(gè)線程的代碼。

如下圖:

線程太多會(huì)導(dǎo)致什么樣的后果?

所以說,很多時(shí)候,其實(shí)并不是說線程越多越好的,很多兄弟往往對(duì)線上系統(tǒng)會(huì)犯一個(gè)錯(cuò)誤,那就是以為讓系統(tǒng)同時(shí)運(yùn)行幾百幾千個(gè)線程,就可以高并發(fā)的處理請(qǐng)求了。

其實(shí)根本不是,如果你要是線程太多了,會(huì)導(dǎo)致每個(gè) cpu core 要頻繁的切換來切換去的運(yùn)行 n 多線程。

每次線程切換都是有時(shí)間開銷的,如果線程太多了,反而會(huì)導(dǎo)致每個(gè)線程被運(yùn)行了一小會(huì)兒以后,接著要過一段時(shí)間才能被再次運(yùn)行,為什么?因?yàn)榫€程太多了啊,cpu core 要給每個(gè)線程都運(yùn)行一下,雨露均沾。

如下圖:

上面這個(gè)圖就很明顯,你一個(gè)請(qǐng)求來了,是交給一個(gè)線程來處理的,這個(gè)線程剛得到 cpu 運(yùn)行機(jī)會(huì),跑了一小會(huì)兒沒處理完請(qǐng)求呢,人家切換去執(zhí)行別的線程了,而且還得運(yùn)行很多別的線程,最后才能切換回來運(yùn)行你這個(gè)線程,那你一個(gè)請(qǐng)求運(yùn)行是不是要等挺久才能跑完的?

所以說,一般我們的經(jīng)驗(yàn)是,線上業(yè)務(wù)系統(tǒng)連接 MySQL 數(shù)據(jù)庫的這種情況,往往 4 個(gè) cpu core 的機(jī)器,開啟 200 個(gè)業(yè)務(wù)線程處理請(qǐng)求,大概每秒處理 1000 左右的線程,就差不多了,因?yàn)槟阋钦?qǐng)求再多,線程再多,4 個(gè) cpu core 就忙不過來了。

經(jīng)常聽說的 CPU 使用率和負(fù)載到底是什么?

所以這里給大家再引入一個(gè)概念,就是 CPU 使用率和負(fù)載,CPU 使用率這個(gè)大家很好理解,CPU 使用率越高,就說明 CPU 幾乎沒閑著,一直在拼命的運(yùn)轉(zhuǎn)。

負(fù)載也是同理,負(fù)載越高,說明 CPU 越是繁忙,如果要是 CPU 使用率和負(fù)載過于高,尤其是使用率,超過 90% 的時(shí)候,往往說明你的系統(tǒng)負(fù)載壓力就太大了,這個(gè)時(shí)候你的性能是會(huì)下降的。

因?yàn)槟闳魏我粋€(gè)請(qǐng)求過來,繁忙的 CPU 要干好多好多事情,他可能留給你這個(gè)請(qǐng)求的處理機(jī)會(huì)就比較少,導(dǎo)致你這個(gè)請(qǐng)求就得等待一段時(shí)間才能處理完畢,所以系統(tǒng)性能也就必然會(huì)下降了。

如下圖:

如何通過 top 命令來查看 CPU 使用率和負(fù)載?

因此如果線上服務(wù)器運(yùn)行的系統(tǒng)性能不好的時(shí)候,往往我們第一步就是可以登錄到線上服務(wù)器去通過 top 命令看一看當(dāng)前服務(wù)器的 CPU 使用率和負(fù)載是不是過高了。

如果過高了,那么說明你當(dāng)前系統(tǒng)壓力過大,CPU 過于繁忙,導(dǎo)致請(qǐng)求過來以后運(yùn)行的比較慢,性能自然就下來了。

當(dāng)然,如果你們公司要是有可視化監(jiān)控系統(tǒng),直接就可以看到線上服務(wù)器的 CPU 負(fù)載和使用率,那也是沒問題的,接著一起來看看 top 命令吧。

這里我用自己的 mac 電腦執(zhí)行了 top 命令,會(huì)得到如下的截圖:

咱們一起來看一看這個(gè) top 命令的輸出結(jié)果里都有什么,東西很多,但是我們挑選重要的東西來看就行了,剛開始他輸出的 Processes 是說當(dāng)前機(jī)器上的進(jìn)程情況。

這里會(huì)有在運(yùn)行中的進(jìn)程數(shù)量,以及在休眠中的進(jìn)程,還有你的進(jìn)程開啟的線程總數(shù)量,比如我的電腦里有 387 個(gè)進(jìn)程,就 2 個(gè)在運(yùn)行,385 個(gè)都是在休眠,一共有 3834 個(gè)線程。

接著 Load Avg 和 CPU Usage 是比較重要的,我們可以重點(diǎn)看 CPU Usage 就可以了。

他意思就是說我們的 CPU 使用率,這個(gè)使用率一般是應(yīng)該在最高在 80% 左右,如果到 90% 以上,甚至超過 100%,那就很危險(xiǎn)了,像我的電腦負(fù)載很低,使用率就 1%~2%,空閑率在 90% 多。

接著 PhysMem 說的是服務(wù)器的內(nèi)存被使用了多少 GB,NetWorks 說的是通過網(wǎng)絡(luò)輸入和輸出的數(shù)據(jù)量,Disks 說的是對(duì)磁盤文件寫入和讀取的數(shù)據(jù)量有多少,然后下面還有當(dāng)前運(yùn)行的主要進(jìn)程列表,每個(gè)進(jìn)程對(duì) CPU 等資源的消耗都有顯示。

好了,今天的知識(shí)點(diǎn)就到這里了,重點(diǎn)是給大家講解了 CPU 對(duì)系統(tǒng)性能的影響,以及如何通過 top 命令查看服務(wù)器的 CPU 使用率和負(fù)載情況。

責(zé)任編輯:姜華 來源: 石杉的架構(gòu)筆記
相關(guān)推薦

2023-12-27 14:08:00

LinuxTop命令工具

2019-12-04 12:28:24

TOP命令Linux

2021-08-10 11:45:57

topCPULinux

2021-05-31 15:53:57

CPU Top命令

2021-06-07 08:04:39

Restorecon命令安全

2024-04-11 13:27:19

Linuxtop命令

2021-10-12 23:10:58

UnsafeJavaJDK

2012-05-09 10:52:37

Linux監(jiān)控命令

2013-11-25 15:43:14

Linux命令top命令

2012-05-07 08:23:02

top監(jiān)控命令FreeBSD

2013-04-24 15:25:05

CentOStop命令CPU負(fù)載

2018-08-21 09:00:30

Linuxtop命令

2010-03-11 13:52:02

Linux MAN

2014-07-24 11:37:54

LinuxTop命令

2023-02-02 14:06:00

history命令技巧

2009-12-03 10:07:55

Linuxman命令使用技巧

2024-03-18 11:24:54

2015-12-23 10:47:04

混合云云計(jì)算

2010-03-11 09:50:46

Linux VI命令

2017-03-06 20:39:41

整潔代碼Clean Code
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)