[Linux運維]常用場景模擬 -- cpu使用率模擬


[Linux運維]常用場景模擬 -- cpu使用率模擬

from http://www.cnblogs.com/zk47/p/4771105.html

1 單個核 100%:

  • 代碼 kill_cpu.c
#include <stdlib.h> int main() { while(1); return 0; }
  • 運行
$ gcc -o out kill_cpu.c $ ./out
  • 看top的結果:
$ top
top - 15:44:08 up 207 days, 21:29, 2 users, load average: 0.08, 0.13, 0.10 Tasks: 231 total, 2 running, 229 sleeping, 0 stopped, 0 zombie Cpu0 : 1.0%us, 1.0%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 1.0%us, 1.0%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

看到某一個核的cpu已經達到了100%。這是由於這個進程被調度到了一個核上,沒有使用多線程,所以自然就是一個核的cpu是100%。那么如何讓所有的cpu都是100%呢。

2 讓所有的核都是100%

$ for i in `seq 1 $(cat /proc/cpuinfo | grep "physical id" | wc -l)`; do ./out & done [1] 5992 [2] 5993 [3] 5994 [4] 5995 $ top top - 15:56:54 up 207 days, 21:42, 2 users, load average: 1.03, 0.35, 0.17 Tasks: 234 total, 5 running, 229 sleeping, 0 stopped, 0 zombie Cpu0 : 98.0%us, 1.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 1.0%si, 0.0%st Cpu1 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 99.0%us, 1.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

我們看到所有的核都是100%,cat /proc/cpuinfo | grep "physical id" | wc -l是獲取到CPU的核數,邏輯核數。這樣每一個cpu上都會調度到一個死循環的進程。

  • 批量kill進程
$ ps aux | grep [.]/out | awk '{print $2}' | xargs sudo kill -9

3 讓某個核 100%

$ top
top - 16:11:03 up 207 days, 21:56, 2 users, load average: 0.81, 0.47, 0.27 Tasks: 232 total, 2 running, 230 sleeping, 0 stopped, 0 zombie Cpu0 : 1.0%us, 2.0%sy, 0.0%ni, 94.1%id, 0.0%wa, 2.0%hi, 1.0%si, 0.0%st Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

我們看到當前的進程在cpu2上,可以通過taskset 命令綁定cpu

# taskset -cp 0 7368 pid 7368's current affinity list: 0-3 pid 7368's new affinity list: 0

進程實際上四個核都是可以使用的,當時由於沒有使用多線程,所以只調度到了一個核上。現在經過taskset設置后,現在我們再來看看top的輸出:

$ top
top - 16:14:09 up 207 days, 21:59, 2 users, load average: 0.99, 0.71, 0.39 Tasks: 230 total, 3 running, 227 sleeping, 0 stopped, 0 zombie Cpu0 : 98.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 1.0%hi, 1.0%si, 0.0%st Cpu1 : 0.0%us, 1.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 1.0%us, 1.0%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

現在跑到了cpu0上了。

4 lookbusy

$ lookbusy -c 30

讓所有的cpu使用率都是30%

$ lookbusy -c 75 -n 2

讓兩個cpu的使用率為30%

$ lookbusy --cpu-mode curve --cpu-curve-peak 14h -c 20-80

讓cpu在20%-%80之間,周期為24H,在14點,即下午2點達到峰值

$ lookbusy -c 20-30 --cpu-mode curve --cpu-curve-period 60m --cpu-curve-peak 30m

讓cpu以60分鍾為周期,30分鍾是峰值,使用率在20% - 30%之間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM