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

使用 nice、cpulimit 和cgroups 獲取進(jìn)程的 CPU 使用率

云計算
Linux內(nèi)核是一個令人難以置信的馬戲團(tuán)的表演者,可以很小心的玩弄許多進(jìn)程和它們的資源需求,來保證你的服務(wù)器一直嗡嗡作響。內(nèi)核也是關(guān)于公平的一切:當(dāng)有資源競爭時,內(nèi)核試圖公平的分發(fā)這些資源。 然而,如果你有一個需要優(yōu)先級的重要進(jìn)程怎么辦?一個低優(yōu)先級的進(jìn)程呢?或者,限制一組進(jìn)程的資源呢?

Linux內(nèi)核是一個令人難以置信的馬戲團(tuán)的表演者,可以很小心的玩弄許多進(jìn)程和它們的資源需求,來保證你的服務(wù)器一直嗡嗡作響。內(nèi)核也是關(guān)于公平的一切:當(dāng)有資源競爭時,內(nèi)核試圖公平的分發(fā)這些資源。

然而,如果你有一個需要優(yōu)先級的重要進(jìn)程怎么辦?一個低優(yōu)先級的進(jìn)程呢?或者,限制一組進(jìn)程的資源呢?

這需要你的幫助,因為沒有你的幫助,內(nèi)核是無法知道哪些是CPU的關(guān)鍵進(jìn)程。

所有進(jìn)程最開始都擁有相同的優(yōu)先級,Linux內(nèi)核會為每個任務(wù)分配均勻的CPU調(diào)度時間??偛荒茏屢粋€CPU密集型的進(jìn)程只運行在低優(yōu)先級吧?所以,你需要告訴調(diào)度器你需要怎么樣的優(yōu)先級。

最少可以有三種方法來控制我們可以為進(jìn)程獲得多少CPU時間:

  • 使用 nice 命令手動降低任務(wù)的優(yōu)先級。

  • 使用 cpulimit 命令來反復(fù)掛起進(jìn)程,使進(jìn)程不超過一定的時間限制。

  • 使用 Linux's 內(nèi)置的 control groups, control groups是一種告訴調(diào)度器去限制進(jìn)程能獲取的資源數(shù)量的機(jī)制。

下面我們來看一下這些方法如何工作,還有它們的優(yōu)缺點。

模擬CPU高使用率

在看這幾個方法前,我們需要找一個工具來模擬系統(tǒng)上CPU負(fù)載的情況。我們將使用CentOS作為測試操作系統(tǒng),然后,為了能人為地加大處理器的負(fù)荷,我們可以使用來自Mathomatic toolkit 質(zhì)數(shù)生成器。

因為在CentOS上并沒有現(xiàn)成的質(zhì)數(shù)生成器的包,所以我們需要手工編譯一下。從http://mathomatic.orgserve.de /mathomatic-16.0.5.tar.bz2 下載源碼,然后解壓。切換目錄到 mathomatic-16.0.5/primes. 運行  make && sudo make install進(jìn)行編譯和安裝.完成后,可執(zhí)行文件就會在 /usr/local/bin 目錄下。

運行下面的命令:

  1. /usr/local/bin/matho-primes 0 9999999999 > /dev/null &  

這個命令會生成一個從0到999999999的質(zhì)數(shù)列表。這個列表我們并不需要保存,所以結(jié)果輸出到 /dev/null。

現(xiàn)在運行一個top命令,可以看到 matho-primes 進(jìn)程正在使用所有可用的CPU資源。

退出 top (按 q 鍵) ,然后kill掉matho-primes進(jìn)程 (使用 fg命令把進(jìn)程推到前臺,然后按 CTRL+C )。

nice

nice 命令會調(diào)整進(jìn)程的優(yōu)先級,這樣這個進(jìn)程就不會經(jīng)常運行。當(dāng)你需要運行一個CPU密集型的后臺任務(wù)或者批處理任務(wù)的時候,這是非常有用的。niceness 值(注:調(diào)度優(yōu)先級)范圍從-20 (優(yōu)先級最高) 到 19 (優(yōu)先級最低)。 Linux上,進(jìn)程的優(yōu)先級默認(rèn)是0。nice命令(沒有額外參數(shù)) 會以10的優(yōu)先級來啟動進(jìn)程。這個優(yōu)先級下,調(diào)度器會把這個任務(wù)看作一個低優(yōu)先級的任務(wù)并且分配較少的CPU資源。

啟動兩個matho-primes任務(wù), 一個使用nice,一個不使用nice:

  1. nice matho-primes 0 9999999999 > /dev/null & 
  2. matho-primes 0 9999999999 > /dev/null & 

現(xiàn)在看一下 top 。

注意觀察沒有使用nice啟動的進(jìn)程(優(yōu)先級為0的進(jìn)程)獲得了更多的處理器時間,相反,使用nice啟動,優(yōu)先級為10的進(jìn)程則獲得了很少處理器時間。

這有什么實際意義呢?如果你要運行一個CPU密集型任務(wù),你可以使用nice啟動它,接下來,調(diào)度器就總會讓其他任務(wù)的優(yōu)先級比它高。這意味著,即使服務(wù)器(或者桌面系統(tǒng))在高負(fù)荷下仍然能夠保持響應(yīng)。

Nice有一個相關(guān)的命令叫 renice。 這個命令可以重新改變一個正在運行中的進(jìn)程的優(yōu)先級。使用方法,找出占用CPU時間的進(jìn)程的PID(使用ps命令),然后運行 renice:

  1. renice +10 1234 

這里, 1234 就是進(jìn)程的PID.

在完成實驗后,不要忘了使用niceand renice 把matho-primes都kill掉。

cpulimit

cpulimit工具通過在不同的時間間隔掛起進(jìn)程來限制進(jìn)程的CPU使用率,讓進(jìn)程在指定的上限中運行。cpulimit程序通過發(fā)送 SIGSTOP 和 SIGCONT 信號給進(jìn)程來。這不會改變進(jìn)程的優(yōu)先級,相反,它會監(jiān)控CPU的真實使用率。

當(dāng)你想保證進(jìn)程的CPU使用率在一定限度下的時候,cpulimit是很有用的。nice的缺點就是,當(dāng)系統(tǒng)空閑時,進(jìn)程也不會使用所有可用的CPU時間。

在CentOS上安裝cpulimit的方法:

  1. wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip 
  2. unzip cpulimit.zip 
  3. cd cpulimit-master 
  4. make 
  5. sudo cp src/cpulimit /usr/bin 

這個命令會從GitHub下載源碼,解壓,然后編譯,拷貝文件到/usr/bin目錄下。

cgroups

控制組(cgroups)是一個Linux內(nèi)核特性,它允許你指定內(nèi)核應(yīng)該如何給一個進(jìn)程組分配特定的資源。你可以用cgroups指定在某一個組中的進(jìn)程使用多少cpu時間、系統(tǒng)內(nèi)存、網(wǎng)絡(luò)帶寬,或者這些組合資源。

控制組相對于nice或cpulimit的優(yōu)勢在于,限制是針對一個進(jìn)程集合,而不只是一個進(jìn)程。還有,nice或cpulimit僅僅限制進(jìn)程的CPU使用率,而cgroups可以限制其他進(jìn)程資源。

審慎地使用cgroups使得一個服務(wù)器的完整子系統(tǒng)的資源可控。 例如在CoreOS中,為大規(guī)模服務(wù)器部署設(shè)計的Linux最小化發(fā)行,升級進(jìn)程是由一個cgroup控制。這意味著系統(tǒng)的下載和安裝不影響系統(tǒng)性能。

為了演示cgroups,我們將創(chuàng)建兩個擁有不同CPU資源分配的組,分別叫做‘cpulimited’和‘lesscpulimited’;

用cgcreate創(chuàng)建組的命令如下:

  1. sudo cgcreate -g cpu:/cpulimited 
  2. sudo cgcreate -g cpu:/lesscpulimited 

命令的"-g cpu'部分告訴cgroups,可以對該組中的進(jìn)程設(shè)置CPU資源分配限制,其他控制包括cpuset,memory和blkio。cpuset控制在允許一個組中進(jìn)程綁定到一個指定的CPU或CPU核集中和cpu控制相關(guān)。

cpu控制有一個屬性是cpu.shares。內(nèi)核用它決定cgroups中進(jìn)程間可用的CPU共享資源,默認(rèn)值是1024。一個組(lesscpulimited)使用默認(rèn)值1024,另一個組(cpulimited)設(shè)置成512,內(nèi)核按2:1比例劃分CPU資源。

在cpulimted組中將cpu.shares設(shè)置成512:

  1. sudo cgset -r cpu.shares=512 cpulimited 

使用cgexec命令啟動一個cgroup任務(wù)。 為了測試這兩個組,在cpulimited組中啟動matho-primes:

  1. sudo cgexec -g cpu:lesscpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null 

top命令顯示了cgroup中有更大cpu.shares值的進(jìn)程得到更多的CPU時間。

現(xiàn)在在cpulimited組中啟動另一個matho-primes進(jìn)程:

  1. sudo cgexec -g cpu:cpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null

觀察CPU是如何仍舊按2:1比例分配?,F(xiàn)在cpulimited組中的兩個matho-primes任務(wù)在均勻地共享CPU,而另一個組中的進(jìn)程仍然獲得了更多的處理器時間。

使用 Scout 監(jiān)控CPU使用率

監(jiān)控CPU使用率是簡單的方法是什么? 在服務(wù)器上安裝了監(jiān)控agent后, Scout 會自動跟蹤C(jī)PU和內(nèi)存使用的軌跡。

[[123497]]

你還可以創(chuàng)建觸發(fā)器,當(dāng)進(jìn)程超過指定的CPU和內(nèi)存使用率上限的時候提醒你。

TL;DR

[[123499]]

任務(wù)服務(wù)器或者桌面系統(tǒng)的有限資源都是寶貴的。上面說的這些工具可以幫你有效地管理這些資源,特別是CPU資源:

  • nice ,一個很好的工具來“一次性”調(diào)整系統(tǒng)。

  • cpulimit ,當(dāng)你需要運行CPU密集型任務(wù),但是CPU空閑時間對系統(tǒng)的快速響應(yīng)又很重要的時候,cpulimit非常有用。

  • cgroups 是限制進(jìn)程的瑞士軍刀,它為系統(tǒng)提供了極大的靈活性。

原文出自:http://www.oschina.net/translate/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups

責(zé)任編輯:Ophira 來源: 開源中國社區(qū)
相關(guān)推薦

2024-04-11 13:27:19

Linuxtop命令

2019-01-15 15:04:54

CPU電腦使用率

2021-11-11 16:46:02

CPU使用率 .NET

2009-11-16 17:03:20

Oracle優(yōu)化CPU

2009-12-15 15:12:05

Linux限制進(jìn)程cp

2019-09-10 08:13:33

LinuxCPU內(nèi)存

2017-05-03 11:10:14

Linux進(jìn)程監(jiān)控cpustat

2021-06-21 06:16:50

cpulimitCPULinux

2021-05-31 15:53:57

CPU Top命令

2021-08-10 11:45:57

topCPULinux

2010-01-18 10:13:08

VB.NET獲取CPU

2022-07-23 21:31:24

KubernetesLinux開源

2009-12-22 09:23:59

Linux Sysst

2022-04-06 06:35:58

進(jìn)程命令CPU

2010-04-27 10:32:54

Oracle優(yōu)化CPU

2019-01-28 10:23:58

CPU使用率Linux

2020-07-08 07:00:00

LinuxCPU應(yīng)用程序

2019-09-24 14:52:35

CPU負(fù)載Linux

2023-03-06 08:41:32

CPU使用率排查

2010-04-12 11:21:35

Oracle優(yōu)化CPU
點贊
收藏

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