調節CPU對應某個程式的使用:
一、使用taskset充分利用多核cpu,讓cpu的使用率均衡到每個cpu上
#taskset
-p, 設定一個已存在的pid,而不是重新開啟一個新任務
-c, 指定一個處理,可以指定多個,以逗號分隔,也可指定範圍,如:2,4,5,6-8。
1,切換某個進程到指定的cpu上
taskset -cp 3 13290
2,讓某程式運行在指定的cpu上
taskset -c 1,2,4-7 tar jcf test.tar.gz test
需要注意的是,taskset -cp 3 13290在設定一個已經存在的pid時,子進程並不會繼承父進程的,
因此像tar zcf xxx.tar.gz xxx這樣的命令,最好在啟動時指定cpu,如果在已經啟動的情況下,則需要指定tar調用的gzip進程。
二,使用nice和renice設定程式執行的優先順序
格式:nice [-n 數值] 命令
nice 指令可以改變程式執行的優先權等級。指令讓使用者在執行程式時,指定一個優先等級,稱之為 nice 值。
這個數值從最高優先順序的-20到最低優先順序的19。負數值只有 root 才有權力使。
一般使用者,也可使用 nice 指令?磣鮒蔥諧絛虻撓畔燃豆芾恚??荒芙?ice值越調越高。
可以通過二種方式來給某個程式設定nice值:
1,開始執行程式時給定一個nice值,用nice命令
2,調整某個運行中程式的PID的nice值,用renice命令
通常通過調高nice值來備份,為的是不佔用非常多的系統資源。
例:
nice -n 10 tar zcf test.tar.gz test
由nice啟動的程式,其子進程會繼承父進程的nice值。
查看nice值
# nice -n -6 vim test.txt &
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 19427 2637 0 75 0 – 16551 wait pts/6 00:00:00 bash
4 T 0 21654 19427 0 71 -6 – 23464 finish pts/6 00:00:00 vim
renice調整運行中程式的nice值
格式:renice [nice值] PID
三,使用ulimit限制cpu佔用時間
注意,ulimit 限制的是當前shell進程以及其派生的子進程。因此可以在指令碼中調用ulimit來限制cpu使用時間。
例如,限制tar的cpu佔用時間,單位秒。
# cat limit_cpu.sh
ulimit -SHt 100
tar test.tar.gz test
如果tar佔用時間超過了100秒,tar將會退出,這可能會導致打包不完全,因此不推薦使用ulimit對cpu佔用時間進行限制。
另外,通過修改系統的/etc/security/limits設定檔,可以針對使用者進行限制。
四,使用程式內建的對cpu使用調整的功能
某些程式內建了對cpu使用調整的功能,比如nginx伺服器,通過其設定檔,可以為背景工作處理序指定cpu,如下:
worker_processes 3;
worker_cpu_affinity 0001 0010 0100 1000;
這裡0001 0010 0100 1000是掩碼,分別代表第1、2、3、4顆cpu核心,這就使得cpu的使用比較平均到每個核心上。
尋找某個CPU運行在某個進程:
ps命令的輸出格式可以通過-o參數定製,可以使用如下命令顯示進程所對應的執行CPU:
# ps -eo pid,args,psr
參數的含義:
pid – 進程ID
args – 該進程執行時傳入的命令列參數
psr – 分配給進程的CPU
有關ps命令的其它資訊請查閱ps手冊:
# man ps
樣本:
[root@www ~]# ps -eo pid,args,psr
………….
20965 /usr/local/php-fcgi/bin/php 1
21683 /bin/sh /usr/local/ddos/ddo 1
21684 sleep 600 3
21746 /sbin/udevd -d 2
21832 /bin/sh /usr/local/ddos/ddo 1
21833 sleep 600 0
21865 sshd: root@pts/0 3
21873 -bash 1
21927 ps -eo pid,args,psr 1
23520 [pdflush] 3
23744 nginx: master process /usr/ 1
23745 nginx: worker process 3
23749 nginx: worker process 3
23753 nginx: worker process 3
23755 nginx: worker process 3