新聞中心
隨著互聯(lián)網(wǎng)的高速發(fā)展,計(jì)算機(jī)系統(tǒng)的并發(fā)性成為了一個(gè)關(guān)鍵問(wèn)題。Linux 系統(tǒng)作為一種穩(wěn)定而強(qiáng)大的操作系統(tǒng),能夠提供出色的支持來(lái)滿足這些需求。但是,對(duì)于高并發(fā)的應(yīng)用程序而言,CPU 使用率過(guò)高是一個(gè)常見的問(wèn)題。為了解決這一問(wèn)題,優(yōu)化線程 CPU 使用率就顯得非常重要。

創(chuàng)新互聯(lián)公司是專業(yè)的城東網(wǎng)站建設(shè)公司,城東接單;提供網(wǎng)站設(shè)計(jì)、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行城東網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
Linux 線程和進(jìn)程
在 Linux 系統(tǒng)上,進(jìn)程是計(jì)算機(jī)系統(tǒng)中正在進(jìn)行的活動(dòng)的實(shí)體。線程是進(jìn)程中的一個(gè)輕量級(jí)實(shí)體,開銷較小且速度更快。線程能夠在同一個(gè)進(jìn)程內(nèi)并發(fā)執(zhí)行,從而提高計(jì)算機(jī)系統(tǒng)的并發(fā)性能。當(dāng)應(yīng)用程序需要執(zhí)行多個(gè)獨(dú)立任務(wù)時(shí),線程就非常有用了。
線程 CPU 使用率的問(wèn)題
盡管線程在 Linux 系統(tǒng)上表現(xiàn)出色,但是在某些情況下會(huì)出現(xiàn) CPU 使用率過(guò)高的問(wèn)題。當(dāng)應(yīng)用程序中使用大量線程時(shí),它們可能會(huì)獨(dú)占 CPU,這會(huì)影響操作系統(tǒng)的并發(fā)性能。話說(shuō)回來(lái),線程 CPU 使用率過(guò)低也是個(gè)問(wèn)題,在這種情況下,系統(tǒng)利用率低且資源浪費(fèi)嚴(yán)重。因此,優(yōu)化線程 CPU 使用率非常必要。
線程 CPU 使用率優(yōu)化技巧
以下是一些線程 CPU 使用率優(yōu)化的技巧:
1. 禁用超線程:超線程是一種技術(shù),它允許 CPU 同時(shí)運(yùn)行多個(gè)線程。但是,在某些情況下,這會(huì)增加 CPU 使用率并導(dǎo)致額外的開銷。禁用超線程有助于減少線程之間的干擾。
2. 合并線程:應(yīng)用程序中的線程數(shù)量可能是隨機(jī)的,可能存在不必要的線程。合并線程有助于減少線程數(shù)量,從而降低 CPU 使用率。不過(guò),必須謹(jǐn)慎對(duì)待此項(xiàng)技術(shù)。
3. 限制線程數(shù):應(yīng)用程序可能創(chuàng)建大量線程,但是實(shí)際上,系統(tǒng)可能無(wú)法支持這些線程。限制線程數(shù)可以避免過(guò)多的線程導(dǎo)致 CPU 使用率過(guò)高。這個(gè)限制可以通過(guò)設(shè)置進(jìn)程的配置文件來(lái)實(shí)現(xiàn)。
4. 使用條件變量:條件變量是一種同步機(jī)制,可以讓多個(gè)線程等待某個(gè)條件的發(fā)生。與忙等待不同,使用條件變量可以大大減少 CPU 使用率,并減少線程間的競(jìng)爭(zhēng)。
5. 使用線程池:線程池可以避免不必要的線程創(chuàng)建,并可以更好地利用系統(tǒng)資源。線程池可以在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建,然后在需要時(shí)使用現(xiàn)有的線程。
6. 安排線程優(yōu)先級(jí):線程優(yōu)先級(jí)可以影響調(diào)度器如何分配 CPU 資源。設(shè)置線程優(yōu)先級(jí)有助于確保重要線程能夠優(yōu)先獲得 CPU 資源,從而增加系統(tǒng)的總體效率。
線程 CPU 使用率優(yōu)化是一項(xiàng)關(guān)鍵的任務(wù)。優(yōu)化線程的 CPU 使用率可以提高系統(tǒng)的并發(fā)能力和效率。此外,優(yōu)化線程也可以減少系統(tǒng)崩潰的概率。通過(guò)使用上述技巧,可以有效地解決線程 CPU 使用率過(guò)高或過(guò)低的問(wèn)題,從而提高系統(tǒng)的穩(wěn)定性和性能。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220linux 性能優(yōu)化– cpu 切換以及cpu過(guò)高
本文先介紹了cpu上下文切換的基礎(chǔ)知識(shí),以及上下文切換的類型(進(jìn)程,線程等切換)。然后介紹了如何查看cpu切換次數(shù)的工具和指標(biāo)的解釋。同時(shí)對(duì)日常分析種cpu過(guò)高的情況下如何分析和定位的方法做了一定的介紹,使用一個(gè)簡(jiǎn)單的案例進(jìn)行分析,先用top,pidstat等工具找出占用過(guò)高的進(jìn)程id,然后通過(guò)分析到底是用戶態(tài)cpu過(guò)高,還是內(nèi)核態(tài)cpu過(guò)高,并用perf 定位到具體的調(diào)用函數(shù)。(來(lái)自極客時(shí)間課程學(xué)習(xí)筆記)
1、多任務(wù)競(jìng)爭(zhēng)CPU,cpu變換任務(wù)的時(shí)候進(jìn)行CPU上下文切換(context switch)。CPU執(zhí)行任務(wù)有4種方式:進(jìn)程、線程、或者硬件通過(guò)觸發(fā)信號(hào)導(dǎo)致中斷的調(diào)用。
2、當(dāng)切換任務(wù)的時(shí)候,需要記錄任務(wù)當(dāng)前的狀態(tài)和獲取下一任務(wù)的信息和地址(指針),這就是上下文的內(nèi)容。因此,上下文是指某一時(shí)間點(diǎn)CPU寄存器(CPU register)和程序計(jì)數(shù)器(PC)的內(nèi)容, 廣義上還包括內(nèi)存中進(jìn)程的虛擬地址映射信息.
3、上下文切換的過(guò)程:
4、根據(jù)任務(wù)的執(zhí)行形式,相應(yīng)的下上文切換,有進(jìn)程上下文切換、線程上下文切換、以及中斷上下文切換三類。
5、進(jìn)程和線程的區(qū)別:
進(jìn)程是資源分配和執(zhí)行的基本單位;線程是任務(wù)調(diào)度和運(yùn)行的基本單位。線程沒有資源,進(jìn)程給指針提供虛擬內(nèi)存、棧、變量等共享資源,而線程可以共享進(jìn)程的資源。
6、進(jìn)程上下文切換:是指從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程。
(1)進(jìn)程運(yùn)行態(tài)為內(nèi)核運(yùn)行態(tài)和進(jìn)程運(yùn)行態(tài)。內(nèi)核空間態(tài)資源包括內(nèi)核的堆棧、寄存器等;用戶空間態(tài)資源掘晌核包括虛擬內(nèi)存、棧、變量、正文、數(shù)據(jù)等
(2)系統(tǒng)調(diào)用(軟中斷)在內(nèi)核態(tài)完成的,需要進(jìn)行2次CPU上下文切換(用戶空間–>內(nèi)核空間–>用戶空間),不涉及用戶態(tài)資源,也不會(huì)切換進(jìn)程。
(3)進(jìn)程是由內(nèi)核來(lái)管理和調(diào)度的,進(jìn)程的切換只能發(fā)生在內(nèi)核態(tài)。所以,進(jìn)程的上下文不僅包括了用戶空間的資源,也包括內(nèi)核空間資源。
(4)進(jìn)程的上下文切換過(guò)程:
(5)、下列將會(huì)觸發(fā)謹(jǐn)渣進(jìn)程上下文切換的場(chǎng)景:
7、線程上下文切換:
8、中斷上下文切換
快速響應(yīng)硬件的事件,中斷處理會(huì)打斷進(jìn)程的正常調(diào)度和執(zhí)行。同一CPU內(nèi),硬件中斷優(yōu)先級(jí)高于進(jìn)程。切換過(guò)程類似于系統(tǒng)調(diào)用的時(shí)候,不涉及到用戶運(yùn)行態(tài)資源。但大量的中斷上下文切換同樣可能引發(fā)性能問(wèn)題。
重點(diǎn)關(guān)注信息:
系統(tǒng)的就緒隊(duì)列過(guò)長(zhǎng),也就是正在運(yùn)行和等待 CPU 的進(jìn)程數(shù)過(guò)多,導(dǎo)致了大量的上下文切換,而上下文切換又導(dǎo)致了系統(tǒng) CPU 的占用率升高。
這個(gè)結(jié)果中有兩列內(nèi)容是我們的重點(diǎn)關(guān)注對(duì)象。一個(gè)是
cswch
,表示每秒自愿上下文切換(voluntary context switches)的次數(shù),另一個(gè)則是
nvcswch
,表示每秒非自愿上下文切換(non voluntary context switches)的次數(shù)。
linux的中斷使用情判掘況可以從 /proc/interrupts 這個(gè)只讀文件中讀取。/proc 實(shí)際上是 Linux 的一個(gè)虛擬文件系統(tǒng),用于內(nèi)核空間與用戶空間之間的通信。/proc/interrupts 就是這種通信機(jī)制的一部分,提供了一個(gè)只讀的中斷使用情況。
重調(diào)度中斷(RES),這個(gè)中斷類型表示,喚醒空閑狀態(tài)的 CPU 來(lái)調(diào)度新的任務(wù)運(yùn)行。這是多處理器系統(tǒng)(P)中,調(diào)度器用來(lái)分散任務(wù)到不同 CPU 的機(jī)制,通常也被稱為處理器間中斷(Inter-Processor Interrupts,IPI)。
這個(gè)數(shù)值其實(shí)取決于系統(tǒng)本身的 CPU 性能。如果系統(tǒng)的上下文切換次數(shù)比較穩(wěn)定,那么從數(shù)百到一萬(wàn)以內(nèi),都應(yīng)該算是正常的。但當(dāng)上下文切換次數(shù)超過(guò)一萬(wàn)次,或者切換次數(shù)出現(xiàn)數(shù)量級(jí)的增長(zhǎng)時(shí),就很可能已經(jīng)出現(xiàn)了性能問(wèn)題。這時(shí),需要根據(jù)上下文切換的類型,再做具體分析。
比方說(shuō):
首先通過(guò)uptime查看系統(tǒng)負(fù)載,然后使用mpstat結(jié)合pidstat來(lái)初步判斷到底是cpu計(jì)算量大還是進(jìn)程爭(zhēng)搶過(guò)大或者是io過(guò)多,接著使用vmstat分析切換次數(shù),以及切換類型,來(lái)進(jìn)一步判斷到底是io過(guò)多導(dǎo)致問(wèn)題還是進(jìn)程爭(zhēng)搶激烈導(dǎo)致問(wèn)題。
CPU 使用率相關(guān)的重要指標(biāo):
性能分析工具給出的都是間隔一段時(shí)間的平均 CPU 使用率,所以要注意間隔時(shí)間的設(shè)置,特別是用多個(gè)工具對(duì)比分析時(shí),你一定要保證它們用的是相同的間隔時(shí)間。比如,對(duì)比一下 top 和 ps 這兩個(gè)工具報(bào)告的 CPU 使用率,默認(rèn)的結(jié)果很可能不一樣,因?yàn)?top 默認(rèn)使用 3 秒時(shí)間間隔,而 ps 使用的卻是進(jìn)程的整個(gè)生命周期。
top 和 ps 是最常用的性能分析工具:
這個(gè)輸出結(jié)果中,第三行 %Cpu 就是系統(tǒng)的 CPU 使用率,top 默認(rèn)顯示的是所有 CPU 的平均值,這個(gè)時(shí)候你只需要按下數(shù)字 1 ,就可以切換到每個(gè) CPU 的使用率了。繼續(xù)往下看,空白行之后是進(jìn)程的實(shí)時(shí)信息,每個(gè)進(jìn)程都有一個(gè) %CPU 列,表示進(jìn)程的 CPU 使用率。它是用戶態(tài)和內(nèi)核態(tài) CPU 使用率的總和,包括進(jìn)程用戶空間使用的 CPU、通過(guò)系統(tǒng)調(diào)用執(zhí)行的內(nèi)核空間 CPU 、以及在就緒隊(duì)列等待運(yùn)行的 CPU。在虛擬化環(huán)境中,它還包括了運(yùn)行虛擬機(jī)占用的 CPU。
預(yù)先安裝 stress 和 sysstat 包,如 apt install stress sysstat。
stress 是一個(gè) Linux 系統(tǒng)壓力測(cè)試工具,這里我們用作異常進(jìn)程模擬平均負(fù)載升高的場(chǎng)景。而 sysstat 包含了常用的 Linux 性能工具,用來(lái)監(jiān)控和分析系統(tǒng)的性能。我們的案例會(huì)用到這個(gè)包的兩個(gè)命令 mpstat 和 pidstat。
下面的 pidstat 命令,就間隔 1 秒展示了進(jìn)程的 5 組 CPU 使用率,
包括:
perf 是 Linux 2.6.31 以后內(nèi)置的性能分析工具。它以性能事件采樣為基礎(chǔ),不僅可以分析系統(tǒng)的各種事件和內(nèi)核性能,還可以用來(lái)分析指定應(yīng)用程序的性能問(wèn)題。
之一種常見用法是 perf top,類似于 top,它能夠?qū)崟r(shí)顯示占用 CPU 時(shí)鐘最多的函數(shù)或者指令,因此可以用來(lái)查找熱點(diǎn)函數(shù),使用界面如下所示:
輸出結(jié)果中,之一行包含三個(gè)數(shù)據(jù),分別是采樣數(shù)(Samples)如2K、事件類型(event)如cpu-clock:pppH和事件總數(shù)量(Event count)如:。
第二種常見用法,也就是 perf record 和 perf report。 perf top 雖然實(shí)時(shí)展示了系統(tǒng)的性能信息,但它的缺點(diǎn)是并不保存數(shù)據(jù),也就無(wú)法用于離線或者后續(xù)的分析。而 perf record 則提供了保存數(shù)據(jù)的功能,保存后的數(shù)據(jù),需要你用 perf report 解析展示。
1.啟動(dòng)docker 運(yùn)行進(jìn)程:
2.ab工具測(cè)試服務(wù)器性能
ab(apache bench)是一個(gè)常用的 HTTP 服務(wù)性能測(cè)試工具,這里用來(lái)模擬 Ngnix 的客戶端。
3.分析過(guò)程
CPU 使用率是最直觀和最常用的系統(tǒng)性能指標(biāo),在排查性能問(wèn)題時(shí),通常會(huì)關(guān)注的之一個(gè)指標(biāo)。所以更要熟悉它的含義,尤其要弄清楚:
這幾種不同 CPU 的使用率。比如說(shuō):
碰到 CPU 使用率升高的問(wèn)題,你可以借助 top、pidstat 等工具,確認(rèn)引發(fā) CPU 性能問(wèn)題的來(lái)源;再使用 perf 等工具,排查出引起性能問(wèn)題的具體函數(shù).
linux c++ 多線程,某線程cpu占用率高,有哪些比較好的解決辦法
沒有什么通用的辦法,主要還是從自己算法上想優(yōu)化,1要確保能精簡(jiǎn)的計(jì)算就精簡(jiǎn)2要確保沒有無(wú)用的循環(huán)
關(guān)于linux 線程 cpu 使用率的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技公司主營(yíng):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊(cè)、網(wǎng)頁(yè)、VI設(shè)計(jì),網(wǎng)站、軟件、微信、小程序開發(fā)于一體。
新聞名稱:Linux線程CPU使用率優(yōu)化技巧(linux線程cpu使用率)
新聞來(lái)源:http://www.5511xx.com/article/cdohhcs.html


咨詢
建站咨詢
