程序的執行可以透過手動調整來提高或是降低其程序使用 CPU 與 I/O 的資源.
- CPU 排程,請參考 – https://access.redhat.com/documentation/zh-tw/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-cpu-scheduler
- I/O 使用 Completely Fair Queuing (CFQ) 排程,請參考 – https://access.redhat.com/documentation/zh-tw/red_hat_enterprise_linux/6/html/performance_tuning_guide/ch06s04
測試環境為 CentOS7 x86_64 (虛擬機)
nice / renice
[root@localhost ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1739 1735 0 80 0 - 29179 do_wai pts/0 00:00:00 bash 0 R 0 1929 1739 0 80 0 - 37235 - pts/0 00:00:00 ps
其中的 PRI (Priority) 與 NI(Nice) ,所代表是該程序使用 CPU 的優先順序,PRI 由核心動自行調整 (數值越小代表該程序可以使用更多的 CPU 資源),我們可以調整的只有 NI值,範圍從 -20 ~ 19 (數值越小代表該程序可以使用更多的 CPU 資源),設定調整方式有兩種.
- #nice 指令可以在執行程式時就給予特定的 nice 值.
# nice [-n, --adjustment=N (niceness ,default 10)] command
- #renice 指令可以調整現行程序的 nice 值 (透過 PID- Process ID 來指定) .
[root@localhost ~]# renice -1 1739 1739 (process ID) old priority 0, new priority -1 [root@localhost ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1739 1735 0 79 -1 - 29179 do_wai pts/0 00:00:00 bash 0 R 0 2058 1739 0 79 -1 - 37235 - pts/0 00:00:00 ps
ionice
#ionice 指令可以調整程序使用 I/O 的優先順序,可調整的部分為 class 與 priority .
- -c class
Class – 0 為 none, 1 為 real time, 2 為 best-effort, 3 為 idle. - -n classdata
Real time 與 best-effort,設定可從 0-7 (數值越小代表該程序有較高的 I/O 優先順序) . - -p pid
Process ID.
[root@localhost ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1739 1735 0 79 -1 - 29179 do_wai pts/0 00:00:00 bash 0 R 0 2059 1739 0 79 -1 - 37235 - pts/0 00:00:00 ps [root@localhost ~]# ionice -p 1739 unknown: prio 0 [root@localhost ~]# ionice -c 2 -n 0 -p 1739 [root@localhost ~]# ionice -p 1739 best-effort: prio 0
更多關於限制 CPU 資源使用,請參考.
- CPU Affinity taskset (cpuset) – https://benjr.tw/99353
- NUMA (Non-uniform memory access) – https://benjr.tw/96788
- Linux daemon – irqbalance – https://benjr.tw/93539
- cpulimit – https://benjr.tw/14273
沒有解決問題,試試搜尋本站其他內容