掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Linux操作系統(tǒng)是一種開(kāi)源免費(fèi)的操作系統(tǒng),它被廣泛應(yīng)用于服務(wù)器、嵌入式設(shè)備和移動(dòng)設(shè)備等領(lǐng)域。在使用Linux系統(tǒng)的過(guò)程中,很多用戶可能會(huì)遇到一些性能問(wèn)題,其中一個(gè)重要的問(wèn)題就是CPU的使用率過(guò)高。在一些服務(wù)器環(huán)境下,如果CPU使用率過(guò)高,會(huì)導(dǎo)致服務(wù)器變得緩慢,甚至癱瘓,對(duì)業(yè)務(wù)造成極大的影響。在這種情況下,用戶需要采取措施降低CPU的使用率。本文將介紹一些Linux操作系統(tǒng)下降低CPU核數(shù)的方法,以便用戶能夠更好地管理系統(tǒng)資源,提升系統(tǒng)性能。

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、滴道ssl等。為超過(guò)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的滴道網(wǎng)站制作公司
一、Linux操作系統(tǒng)的調(diào)度策略
Linux操作系統(tǒng)的調(diào)度是指讓系統(tǒng)中各個(gè)進(jìn)程或線程按照一定的優(yōu)先級(jí)進(jìn)行時(shí)間分配的過(guò)程。在Linux內(nèi)核中,有多種調(diào)度策略可供選擇。其中,最常用的調(diào)度策略是完全預(yù)防式調(diào)度(CFS)和實(shí)時(shí)調(diào)度。CFS是一種基于紅黑樹(shù)的完全預(yù)防式調(diào)度算法,它的核心是基于虛擬運(yùn)行時(shí)間(Vruntime)的進(jìn)程優(yōu)先級(jí)計(jì)算規(guī)則,可以較好地平衡系統(tǒng)各進(jìn)程的運(yùn)行時(shí)間。而實(shí)時(shí)調(diào)度則是為了滿足對(duì)實(shí)時(shí)性要求比較高的應(yīng)用需求而設(shè)計(jì)的。
如果系統(tǒng)中有多個(gè)CPU核心,那么在Linux中,它們將在調(diào)度器中排隊(duì),并按照一定的規(guī)則以時(shí)間片的形式交替執(zhí)行運(yùn)行。在一些情況下,用戶需要限制某些應(yīng)用程序使用的CPU核數(shù),以降低系統(tǒng)的CPU使用率,這時(shí)可以使用Linux系統(tǒng)提供的CPU降頻驅(qū)動(dòng)cpufreq,也可以使用一些第三方的工具來(lái)管理系統(tǒng)CPU使用率。
二、CPU降頻
CPU降頻是一種降低CPU運(yùn)行速度的技術(shù),其本質(zhì)是通過(guò)減少CPU利用率的方法來(lái)實(shí)現(xiàn)節(jié)能。如果系統(tǒng)中有多個(gè)CPU核心,那么降頻一般會(huì)考慮到每個(gè)核心的運(yùn)行情況,以便盡可能地平衡系統(tǒng)各核心的壓力,避免某個(gè)核心過(guò)載而導(dǎo)致整個(gè)系統(tǒng)負(fù)載過(guò)高。
在Linux系統(tǒng)中,CPU降頻的方法主要是通過(guò)配置CPU負(fù)載平衡策略來(lái)實(shí)現(xiàn)。可以通過(guò)設(shè)置/sys/devices/system/cpu/cpufreq目錄下各個(gè)CPU核心對(duì)應(yīng)的scaling_*文件來(lái)修改各個(gè)CPU核心的運(yùn)行狀態(tài)。scaling_max_freq以及scaling_min_freq文件可以分別用來(lái)限定CPU核心更高和更低操作頻率,scaling_governor文件則用來(lái)設(shè)置系統(tǒng)的負(fù)載均衡策略??梢赃x擇性能模式、節(jié)能模式、調(diào)節(jié)模式等不同的模式以適應(yīng)不同的環(huán)境。
三、使用cgroups
cgroups是Linux內(nèi)核的一種控制組(Control Group)機(jī)制,它可以對(duì)進(jìn)程進(jìn)行分組,實(shí)現(xiàn)對(duì)進(jìn)程資源使用的限制和管理。cgroups可以實(shí)現(xiàn)對(duì)CPU、內(nèi)存、磁盤(pán)IO等資源的限制,可以幫助我們更好地管理系統(tǒng)資源,降低CPU使用率。
在Linux中,新版本的系統(tǒng)已經(jīng)預(yù)裝了cgroups的核心支持庫(kù)和工具,因此可以很方便地開(kāi)始使用cgroups。要限制某個(gè)進(jìn)程組的CPU使用率,可以通過(guò)cgroups的cpuset子系統(tǒng)來(lái)實(shí)現(xiàn)。cpuset子系統(tǒng)中的cgroup文件可以限制某個(gè)進(jìn)程組的CPU核數(shù)以及運(yùn)行時(shí)的優(yōu)先級(jí)。我們可以用cset命令來(lái)創(chuàng)建和修改這些cgroup文件。
四、修改系統(tǒng)配置
除了使用上述方法來(lái)降低CPU使用率外,我們還可以通過(guò)修改系統(tǒng)的配置文件來(lái)實(shí)現(xiàn)。Linux系統(tǒng)的配置文件通常存儲(chǔ)在/etc目錄下。我們可以打開(kāi)/etc/sysctl.conf配置文件,并修改vm.swappiness參數(shù)的值。vm.swappiness參數(shù)控制了Linux系統(tǒng)在內(nèi)存不足時(shí),使用交換分區(qū)的比例。將vm.swappiness的值調(diào)整為0,可以讓Linux系統(tǒng)在內(nèi)存不足時(shí)不使用交換分區(qū),從而減少CPU的使用率。
通過(guò)上述方法,我們可以在Linux系統(tǒng)中降低CPU核數(shù),從而降低CPU使用率,提升系統(tǒng)的性能。在實(shí)際應(yīng)用中,具體采取哪種方法,要根據(jù)需要來(lái)選擇??梢愿鶕?jù)系統(tǒng)的狀況,結(jié)合實(shí)際的業(yè)務(wù)需要,選擇最合適的方法來(lái)管理系統(tǒng)資源。
相關(guān)問(wèn)題拓展閱讀:
1、物理CPU數(shù):機(jī)器主板上實(shí)際插入的cpu數(shù)量,比如說(shuō)你的主板上安裝了一塊8核CPU,那么物理CPU個(gè)數(shù)就是1個(gè),所以物理CPU個(gè)數(shù)就是主板上安裝的CPU個(gè)數(shù)。
2、物理CPU核數(shù):?jiǎn)蝹€(gè)物理CPU上面有多個(gè)核,物理CPU核數(shù)=物理CPU數(shù)?單個(gè)物理CPU的核
3、邏輯CPU核數(shù):一般情況,我們認(rèn)為一顆CPU可以有多個(gè)核,加上intel的超線程技術(shù)(HT), 可以在邏輯上再分一倍數(shù)量的CPU core出來(lái)。邏輯CPU核數(shù)=物理CPU數(shù)?單個(gè)物理CPU的核*2
4、超線程技術(shù)(Hyper-Threading):就是利用特殊的硬件指令,把兩個(gè)邏輯CPU模擬成兩個(gè)物理CPU,實(shí)現(xiàn)多核
多線程
。我們常聽(tīng)到的雙核四線程/四核八線程指的就是支持超線程技術(shù)的CPU。
1、并行:兩件(多件)事情在同一時(shí)刻一起發(fā)生。
2、并發(fā):兩件(多件)事情在同一時(shí)刻只能有一個(gè)發(fā)生,由于CPU快速切換,從而給人的感覺(jué)是同時(shí)進(jìn)行。
3、進(jìn)程和線程
進(jìn)程是資源分配的
最小單位
,一個(gè)程序有至少一個(gè)進(jìn)程。線程是程序執(zhí)行的最小單位。一個(gè)進(jìn)程有至少一個(gè)線程。
線程之間的通信更方便,同一進(jìn)程下的線程共享
全局變量
、靜態(tài)變量等數(shù)據(jù),而進(jìn)程之間的通信需要以通信的方式(IPC)進(jìn)行。多進(jìn)程程序更健壯,多線程程序只要有一個(gè)線程死掉,整個(gè)進(jìn)程也死掉了,而一個(gè)進(jìn)程死掉并不會(huì)對(duì)另外一個(gè)進(jìn)程造成影響,因?yàn)檫M(jìn)程有自己獨(dú)立的地址空間。
4、單核多線程:?jiǎn)魏薈PU上運(yùn)行多線程, 同一時(shí)刻只有一個(gè)線程在跑,系統(tǒng)進(jìn)行線程切換,系統(tǒng)給每個(gè)線程分配時(shí)間片來(lái)執(zhí)行,看起來(lái)就像是同時(shí)在跑, 但實(shí)際上是每個(gè)線程跑一點(diǎn)點(diǎn)就換到其它線程繼續(xù)跑。
5、多核多線程:每個(gè)核上各自運(yùn)行線程,同一時(shí)刻可以有多個(gè)線程同時(shí)在跑。
1、對(duì)于單核:多線程和多進(jìn)程的多任務(wù)是在單cpu交替執(zhí)行(時(shí)間片輪轉(zhuǎn)調(diào)度,優(yōu)先級(jí)調(diào)度等),屬于并發(fā)
2、對(duì)于多核:同一個(gè)時(shí)間多個(gè)進(jìn)程運(yùn)行在不同的CPU核上,或者是同一個(gè)時(shí)間多個(gè)線程能分布在不同的CPU核上(線程數(shù)小于內(nèi)核數(shù)),屬于并行。
3、
上下文切換
:上下文切換指的是內(nèi)核(操作系統(tǒng)的核心)在CPU上對(duì)進(jìn)程或者線程進(jìn)行切換。上下文切換過(guò)程中的信息被保存在進(jìn)程控制塊(PCB-Process Control Block)中。PCB又被稱作切換幀(SwitchFrame)。上下文切換的信息會(huì)一直被保存在CPU的內(nèi)存中,直到被再次使用。
CPU 親和性(affinity)就是進(jìn)程要在某個(gè)給定的 CPU 上盡量長(zhǎng)時(shí)間地運(yùn)行而不被遷移到其他處理器的傾向性。這樣可以減少上下文切換的次數(shù),提高程序運(yùn)行性能??煞譃椋鹤匀挥H和性和硬親和性
1、自然親和性:就是進(jìn)程要在指定的 CPU 上盡量長(zhǎng)時(shí)間地運(yùn)行而不被遷移到其他處理器,Linux 內(nèi)核進(jìn)程調(diào)度器天生就具有被稱為 軟 CPU 親和性(affinity) 的特性,這意味著進(jìn)程通常不會(huì)在處理器之間頻繁遷移。這種狀態(tài)正是我們希望的,因?yàn)檫M(jìn)程遷移的頻率小就意味著產(chǎn)生的負(fù)載小。Linux調(diào)度器缺省就支持自然CPU親和性(natural CPU affinity): 調(diào)度器會(huì)試圖保持進(jìn)程在相同的CPU上運(yùn)行。
2、硬親和性:簡(jiǎn)單來(lái)說(shuō)就是利用linux內(nèi)核提供給用戶的API,強(qiáng)行將進(jìn)程或者線程綁定到某一個(gè)指定的cpu核運(yùn)行。Linux硬親和性指定API:taskset .
taskset mask command …
taskset -p pid
taskset 命令用于設(shè)置或者獲取一直指定的 PID 對(duì)于 CPU 核的運(yùn)行依賴關(guān)系。也可以用 taskset 啟動(dòng)一個(gè)命令,直接設(shè)置它的 CPU 核的運(yùn)行依賴關(guān)系。
CPU 核依賴關(guān)系是指,命令會(huì)被在指定的 CPU 核中運(yùn)行,而不會(huì)再其他 CPU 核中運(yùn)行的一種調(diào)度關(guān)系。需要說(shuō)明的是,在正常情況下,為了系統(tǒng)性能的原因,調(diào)度器會(huì)盡可能的在一個(gè) CPU 核中維持一個(gè)進(jìn)程的執(zhí)行。強(qiáng)制指定特殊的 CPU 核依賴關(guān)系對(duì)于特殊的應(yīng)用是有意義的
CPU 核的定義采用位定義的方式進(jìn)行,更低位代表 CPU0,然后依次排序。這種位定義可以超過(guò)系統(tǒng)實(shí)際的 CPU 總數(shù),并不會(huì)存在問(wèn)題。通過(guò)命令獲得的這種 CPU 位標(biāo)記,只會(huì)包含系統(tǒng)實(shí)際 CPU 的數(shù)目。如果設(shè)定的位標(biāo)記少于系統(tǒng) CPU 的實(shí)際數(shù)目,那么命令會(huì)產(chǎn)生一個(gè)錯(cuò)誤。當(dāng)然這種給定的和獲取的位標(biāo)記采用 16 進(jìn)制標(biāo)識(shí)。
0x
代表 #0 CPU
0x
代表 #0 和 #1 CPU
0xFFFFFFFF
代表 #0 到 #31 CPU
-p, –pid
對(duì)一個(gè)現(xiàn)有的進(jìn)程進(jìn)行操作,而不是啟動(dòng)一個(gè)新的進(jìn)程
-c, –cpu-list
使用 CPU 編號(hào)替代位標(biāo)記,這可以是一個(gè)列表,列表中可以使用逗號(hào)分隔,或者使用 “-” 進(jìn)行范圍標(biāo)記,例如:0,5,7,9
-h, –help
打印幫助信息
-V, –version
打印版本信息
如果需要設(shè)定,那么需要擁有 CAP_SYS_NICE 的權(quán)限;如果要獲取設(shè)定信息,沒(méi)有任何權(quán)限要求。
linux系統(tǒng)性能怎么優(yōu)化
一、前提
我們可以在文章的開(kāi)始就列出一個(gè)列表,列出可能影響Linux操作系統(tǒng)性能的一些調(diào)優(yōu)參數(shù),但這樣做其實(shí)并沒(méi)有什么價(jià)值。因?yàn)樾阅苷{(diào)優(yōu)是一個(gè)非常困難的任務(wù),它要求對(duì)硬件、操作系統(tǒng)、和應(yīng)用都有著相當(dāng)深入的了解。如果性能調(diào)優(yōu)非常簡(jiǎn)單的話,那些我們要列出的調(diào)優(yōu)參數(shù)早就寫(xiě)入硬件的微碼或者操作系統(tǒng)中了,我們就沒(méi)有必要再繼續(xù)讀這篇文章了。正如下圖所示,服務(wù)器的性能受到很多因素的影響。
當(dāng)面對(duì)一個(gè)使用單獨(dú)IDE硬盤(pán)的,有20230用戶的數(shù)據(jù)庫(kù)服務(wù)器時(shí),即使我們使用數(shù)周時(shí)間去調(diào)整I/O子系統(tǒng)也是徒勞無(wú)功的,通常一個(gè)新的驅(qū)動(dòng)或者應(yīng)用程序的一個(gè)更新(如SQL優(yōu)化)卻可以使這個(gè)服務(wù)器的性能得到明顯的提升。正如我們前面提到的,不要忘記系統(tǒng)的性能是受多方面因素影響的。理解操作系統(tǒng)管理系統(tǒng)資源的方法將幫助我們?cè)诿鎸?duì)問(wèn)題時(shí)更好的判斷應(yīng)該對(duì)哪個(gè)子系統(tǒng)進(jìn)行調(diào)整。
二、Linux的CPU調(diào)度
任何計(jì)算機(jī)的基本功能都十分簡(jiǎn)單,那就是計(jì)算。為了實(shí)現(xiàn)計(jì)算的功能就必須有一個(gè)方法去管理計(jì)算資源、處理器和計(jì)算任務(wù)(也被叫做線程或者進(jìn)程)。非常感謝Ingo Molnar,他為L(zhǎng)inux內(nèi)核帶來(lái)了O(1)CPU調(diào)度器,區(qū)別于舊有的O(n)調(diào)度器,新的調(diào)度器是動(dòng)態(tài)的,可以支持負(fù)載均衡,并以恒定的速度進(jìn)行操作。
新調(diào)度器的可擴(kuò)展性非常好,無(wú)論進(jìn)程數(shù)量或者處理器數(shù)量,并且調(diào)度器本身的系統(tǒng)開(kāi)銷(xiāo)更少。新調(diào)取器的算法使用兩個(gè)優(yōu)先級(jí)隊(duì)列。
安裝后用lscpu可以很方便的得到:
$ lscpu | grep -E ‘ Thread| Core| Socket| CPU(‘
CPU(s): 56
Thread(s) per core: 2
Core(s) per socket: 14
Socket(s):
其中socket代表物理cpu個(gè)數(shù), Core(s) per socket就是每個(gè)cpu多少核,Thread(s) per core就是每個(gè)核幾個(gè)超線程
CPUs = Threads per core X cores per socket X sockets
引用:
關(guān)于linux 減少cpu 核數(shù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專(zhuān)注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流