1. 程式人生 > >CPU-內存-IO-網絡調優

CPU-內存-IO-網絡調優

進程id 之間 優先級 處理方式 雙核 gre 服務 class 永遠

一、關於CPU 中央處理器調優

1、 CPU處理方式:

  1. 批處理,順序處理請求。(切換次數少,吞吐量大)
  2. 分時處理。(如同"獨占",吞吐量小)(時間片,把請求分為一個一個的時間片,一片一片的分給CPU處理)我們現在使用x86就是這種架構
  3. 實時處理

例如:

  • 批處理——以前的大型機(Mainframe)上所采用的系統,需要把一批程序事先寫好(打孔紙帶),然後計算得出結果
  • 分時——現在流行的PC機和服務器都是采用這種運行模式,即把CPU的運行分成若幹時間片分別處理不同的運算請求
  • 實時——一般用於單片機上,比如電梯的上下控制,對於按鍵等動作要求進行實時處理

2、 查看CPU一分鐘有多個切換多少次

#查看內核一秒鐘中斷CPU次數
[root@xuegod70 ~]# grep HZ /boot/config-3.10.0-693.el7.x86_64 
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
# CONFIG_NO_HZ_IDLE is not set
CONFIG_NO_HZ_FULL=y
# CONFIG_NO_HZ_FULL_ALL is not set
CONFIG_NO_HZ=y
# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000         #1秒鐘有1000次中斷
CONFIG_MACHZ_WDT=m
註: 此文件/boot/config-3.10.0-693.el7.x86_64 是編譯內核的參數文件

3、調整進程優先級使用更多CPU  

調整進程nice值,讓進程使用更多的CPU
優先級控制:
  nice值 #範圍, -20 ~ 19 越小優先級越高 普通用戶0-19
  nice
作用:以什麽優先級運行進程 。默認優先級是0
語法: nice -n 優先級數字 命令
例:

[root@xuegod63 ~]# nice -n -5 vim a.txt   # vim進程以-5級別運行
查看:
[root@xuegod63 ~]# ps -axu | grep a.txt
[root@xuegod63 ~]# ps -axu | grep a.txt
Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ
root     24318  0.0  0.2 143624  3280 pts/4    S+   17:00   0:00 vim b.txt
[root@xuegod63 ~]# top -p   24318

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                        
24219 root      15  -5  140m 3336 2200 S  0.0  0.3   0:00.08 vim   
檢測一下範圍: -20 - 19
renice  #修改正在運行的進程的優先級
#renice -n 5 PID   #修改進程優先級

[root@xuegod63 ~]# renice -n -21 24219
24219: old priority -20, new priority -20

4 、CPU親和力  

taskset 作用:在多核的情況下,可以認為指定一個進程在哪顆CPU上執行程序,減少進程在不同CPU之前切換的開銷。

安裝:
[root@xuegod63 ~]# rpm -qf `which taskset `
util-linux-2.23.2-43.el7.x86_64

語法: taskset -c N 命令
例1:本機是4核CPU ,指定vim命令在第一個CPU上運行

[root@xuegod63 ~]# taskset -c 0 vim a.txt    #1號CPU ID是0
[root@xuegod63 ~]# ps -axu | grep vim
Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ
root      2614  1.3  0.2 143696  3332 pts/0    S+   18:39   0:00 vim a.txt
[root@xuegod63 ~]# taskset -p  2614    #  -p 要查看的進程ID
pid 2614‘s current affinity mask: 1    #CPU親和力掩碼,1代表第一個CPU核心

例2:查sshd進程運行在哪幾個CPU上  

[root@xuegod63 ~]# ps -axu | grep sshd
Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ
root      2030  0.0  0.0  64068  1140 ?        Ss   18:26   0:00 /usr/sbin/sshd
 [root@xuegod63 ~]# taskset -p 2030
pid 2030‘s current affinity mask: f   #說明sshd在4顆CPU上隨機進行切換。

說明: 
	Cpu ID 號碼,對應的16進制數為: 
	CPU ID:               7      6      5      4      3      2      1      0
	對應的10數為:          128    64     32     16      8      4      2      1
	當前, 我的系統中cpu ID 的為(0,1,2,3) 
	pid 2030‘s current affinity mask: f 的值為cpu ID 16進制的值的和(1+2+4+8=f),轉換成二進制為:1111 
	這個說明了(pid=2030)的這個sshd進程工作在cpu ID 分別為0,1,2,3這個四個cpu上面的切換。
註: 我們的CPU是4核心,所以taskset -c後可以跟: 0,1,2,3

例:指定vim c.txt  程序運行在第2和第4個CPU上
[root@xuegod63 ~]#  taskset -c 1,3 vim b.txt
[root@xuegod63 ~]#  ps -axu | grep vim
Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ
root      6314  1.5  0.2 143612  3280 pts/1    S+   14:41   0:00 vim b.txt
root      6317  0.0  0.0 103300   848 pts/2    S+   14:41   0:00 grep vim
[root@xuegod63 ~]# taskset -p    6314 
pid 6314‘s current affinity mask: a   
# a為十進制的10=2+8   
註:在哪個CPU上運行,那一位就賦為1 。 

5、CPU 性能監控  

  理解運行隊列,利用率,上下文切換對怎樣CPU 性能最優化之間的關系,早期提及到性能是相對於基準線數據的,在一些系統中,通常預期所達到的性能包括:
  Run Queues ­ 每個處理器應該運行隊列不超過1­3 個線程.
例如: 一個雙核處理器應該運行隊列不要超過6 個
註:有兩個特殊的進程永遠在運行隊列中待著:當前進程和空進程idle。

  

  

CPU-內存-IO-網絡調優