CPU子系統
想到的辦法:
結束某些沒有進程和服務
超頻、超線程
升級cpu
dmidecode -t processor | grep Socket (物理cpu個數)
dmidecode | grep Size | grep MB (物理內存大小)
dmidecode | grep Size | grep MB | wc -l (物理內存個數)
中斷 ---- cpu停止當前運行的指令,停下去執行更緊急的指令,一般都是IO產生中斷,也可以網絡IO導致網卡接受和發送數據。
上下文 --- 指令執行過程,需要的一些變量環境(cpu寄存器的一些數據)
上下文切換 ---- 一般由於內核進行調度或中斷的產生,都會引起上下文切換。
內核調度 ---- 控制各個進程甚至是各個指令指令的優先級別
用戶空間程序(普通應用程序)
運行隊列
工具:
vmstat,mpstat,sar(sysstat),top,ps,uptime
# cat /proc/cpuinfo
# dmidecode -t processor
# dmidecode -t cache
# uptime
14:57:12 up 1:16, 3 users, load average: 2.82, 5.43, 3.85
系統負載: 在指定單位之間(1,5,15分鐘)系統平均運行隊列。數字越大,隊列越長,系統就越忙。這裏還與cpu物理核心(不算超線程)相關。
以15分鐘平均負載作爲例子:
單核cpu:
過去15分鐘,cpu的運行隊列平均爲3.85(1進程正在被執行,2.85個在排隊)
雙核cpu:
過去15分鐘,單個cpu核心的運行隊列平均爲(3.85/2~=1.9,1個正在被cpu執行,0.9在排隊)
經驗:如果單核cpu的運行隊列超過3,一般說明cpu的運行能力力不從心,有點忙。
# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 120 55156 23864 1581996 0 0 700 25 1103 1221 13 7 77 3 0
procs
r b
0 0
r ,一分鐘去平均值就是代表uptime的系統負載一分鐘的平均值
b ,一般只要出現超過3,就非常值得注意。
--system-- -----cpu------
in cs us sy id wa st
1103 1221 13 7 77 3 0
in 中斷次數
cs 上下文切換的次數,次數越多,說明內核進行的任務調度就越多。
us 用戶空間使用的cpu時間片的百分比,cpu的大部分時間應該消耗在這裏
sy 系統(內核完成任務:中斷處理,上下文切換,任務調度)使用的cpu時間百分比
id 空閒
wa cpu花了多少百分比的時間在等待IO(硬盤IO),數字越大,一般說明是存在IO瓶頸
st 被虛擬化裏的客戶機“偷”掉的cpu時間百分比
經驗:
us:sy ~= 7:3
wa 不能太大
id 非常小,不能說明cpu就不夠,或者出現瓶頸,只能說明cpu被充分利用,最嚴重就只能說明一種趨勢---系統再忙一點,cpu可能就不夠用了
# vmstat 2
# vmstat 2 5
# mpstat 2 5
# mpstat 2 5 -P ALL
# sar -u 2 5
計劃任務
# vim /etc/cron.d/sysstat