linux的cpu和磁盤io優先級設置

Original url:

https://www.52os.net/articles/reduce-cpu-io-priority.html


在服務器上常常會運行一些備份腳本,當備份的文件比較多時,會佔用大量的cpu和磁盤io。爲了不影響生產業務,應儘量減少這些腳本運行時使用的cpu和磁盤io。通常linux下限制cpu使用有三種方法:

  1. nice/renice : 調整進程使用cpu的優先級
  2. cpulimit :不修改進程的nice值,通過暫停進程一段時間,來限制cpu使用
  3. cgroups :內核提供的機制,可以限制、記錄、隔離一組進程所使用的cpu、內存、磁盤、網絡等資源,是docker等容器的基礎技術之一

限制磁盤io :

  1. ionice : 調整io調度的優先級
  2. cgroups

這裏只說nice和ionice,實際上nice和ionice只是改變優先級,並沒有真正的限制

一、nice

1.1 進程優先級

要理解nice值,首先要說明一下優先級的概念,先來看一下進程的信息:

[[email protected] ~]# ps -efl
F S UID         PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
5 S asterisk  5319  1607  -5  80   0 - 119325 ep_pol Mar23 ?       00:03:55 /usr/sbin/httpd
  • PRI 指進程優先級,優先級小的進程會獲得比較多的CPU時間,程序就會被優先處理
  • NI 即爲nice值
  • 兩者關係爲 :PRI(new)=PRI(default)+nice

其中nice值可以用戶指定,nice的默認值爲0,root可用範圍從-20到19,普通用戶只能用0到19,值越小PRI(new)越小,CPU執行優先級越高。同時可以知道:只有root能提高優先級,普通用戶只能降低優先級。

1.2 設置程序啓動時的優先級

nice 只有一個參數 : -n,啓動程序時指定優先級:

nice -n -20  /opt/backup.sh  #優先級最高
nice -n 19  /opt/backup.sh   #優先級最低

1.3 設置程序運行時的優先級

對於已經在運行的程序,如果需要調整優先級,需要用renice命令,設置正在運行程序nice的值爲15:

[[email protected] ~]# renice -n +15 5319 

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
5 S asterisk  5319  1607  -5  95  15  - 119325 ep_pol Mar23 ?       00:03:55 /usr/sbin/httpd

root用戶可以爲其它用戶或組設置nice值:

[[email protected] ~]# renice -n +15 -u zabbix   #設置zabbix用戶的所有進程nice值爲15
[[email protected] ~]# renice -n +15 -u zabbix   #設置zabbix用戶的所有進程nice值爲15

還可以爲進程組設置nice值,查看進程組:


[[email protected] ~]# ps -efj 
UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD
asterisk  5296  1607  1607  1607  0 Mar23 ?        00:03:54 /usr/sbin/httpd
asterisk  5319  1607  1607  1607  0 Mar23 ?        00:03:55 /usr/sbin/httpd
asterisk  5394  1607  1607  1607  0 Mar23 ?        00:03:55 /usr/sbin/httpd

apache的進程組(PGID)爲:1607,設置nice值爲-8:

[[email protected] ~]# renice  -n -8 -g 1607

二、ionice

linux默認IO調度器使用CFQ調度算法,支持用ionice命令爲程序指定io調度策略和優先級,IO調度策略分爲三種:

  • Idle :其他進程沒有磁盤IO時,才進行磁盤IO
  • Best Effort:缺省調度策略,可以設置0-7的優先級,數值越小優先級越高,同優先級的進程採用round-robin算法調度;
  • Real Time :立即訪問磁盤,無視其它進程IO
  • None 即Best Effort,進程未指定策略和優先級時顯示爲none,會使用依據cpu nice設置計算出優先級

策略 :0 - none, 1 - Real Time, 2 - Best Effort, 3 - idle

使用idle策略:

ionice -c 3 -p 進程id

使用Real Time策略:

ionice -c 1  -p 進程id

使用Best Effort策略,並指定優先級最低:

ionice -c 2 -n 7 -p 進程id

三、同時限制cpu和磁盤io的優先級
爲了對生產環境造成影響最小,設置備份腳本運行時,cpu和磁盤io的優先級都最低:

nice -n 19 ionice -c2 -n7  /bin/sh /opt/backup.sh

參考文章:
https://linux.cn/article-4742-1.html
http://www.linuxde.net/2013/06/13933.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章