優化-cpu

優化
橫向:加新的設備,架構擴展
縱向:替換新的更好的設備,使設備負載能力更高
下面咱們討論的是不加設備也不換設備的基礎上進行系統微調
前面討論的是系統安裝到業務上線以前的一些基本優化,若是業務已經在線上,你要優化,第一步如何作?
好比一個web服務器慢,能夠會有哪些問題?
cpu->mem->io->file system->network->os參數->服務自己配置-》開發代碼
首先要進行服務器數據採集,和性能監測分析
方法有
一:使用cacti,nagios,zabbix等監控工具
二:使用linux自帶的一些監控指令:如vmstat,iostat,mpstat,sar等等
硬件問題
CPU子系統
內存子系統
IO子系統
網絡子系統
文件系統
運行的服務等
一,
cpu(Central Processing Unit)子系統
CPU 的佔用主要取決於什麼樣的資源正在 CPU 上面運行,
好比拷貝一個文件一般佔用較少CPU,只是在完成拷貝之後給一箇中斷讓CPU知道拷貝已經完成
科學計算一般佔用較多的CPU,大部分計算工做都須要在CPU上完成,內存、硬盤等子系統只作暫時的數據存儲工做
要想監測和理解CPU的性能須要知道一些的操做系統的基本知識,好比:中斷,進程調度,進程上下文切換,可運行隊列等
cpu單核在同一個時間點只能幹一件事,但單核CPU同樣能夠跑多任務操做系統,其實就是分CPU資源(時間片)
CPU很無辜,是個不辭辛苦的打工仔,每時每刻都有工做在作(進程、線程)而且本身有一張工做清單(可運行隊列),
由老闆(進程調度)來決定他該幹什麼,他須要和老闆溝通以便獲得老闆的想法並及時調整本身的工做  (上下文切換),
部分工做作完之後還須要及時向老闆彙報(中斷),
因此打工仔(CPU)除了作本身該作的工做之外,還有大量時間和精力花在溝通和彙報上。
中斷 設備通知內核,完成了一次數據處理過程。也能夠理解爲:cpu中止下來去執行別的指令。例如:完成一次IO。或者完成一次網絡數據包的發送。
內核處理過程 --- 控制優先級,進行任務調度。
用戶進程
上下文切換 --- 把正在佔用cpu的進程放回隊列中(每次內核的上下文切換,資源被用於關閉在CPU寄存器中的線程和放置在隊列中)
運行隊列
那麼監測CPU性能的底線是什麼呢?一般咱們指望咱們的系統能到達如下目標:
  CPU利用率,若是CPU有100%利用率,那麼應該到達這樣一個平衡:65%-70% User Time,30%-35% System Time,0%-5% Idle Time;
  上下文切換,上下文切換應該和 CPU 利用率聯繫起來看,若是能保持上面的 CPU 利用率平衡,大量的上下文切換是能夠接受的;
雲(虛擬化)  提升資源利用率
查看cpu信息
# cat /proc/cpuinfo --能看到指令集,CPU核數,頻率,緩存等相關信息
要採集CPU當前正在運行的信息數據,要用到下面的命令或者監控軟件(nagios,zabbix等)
top
uptime
vmstat
mpstat --須要yum install sysstat
sar --須要yum install sysstat
# vmstat 2 每2秒鐘採集一下數據
# vmstat 2 3 每2秒鐘採集一次,一共採集3次
# vmstat 2
procs -----------memory---------- -swap- ----io-- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 78112 63432 1519100 0 0 233 18 1906 1190 26 13 59 1 0
1 0 0 78112 63432 1519100 0 0 0 0 4180 1378 33 17 50 0 0
r 可運行隊列。單核cpu,不該該超過3(經驗獲得的數據,只是代表大於這個值代表運行隊列有點長)
b 當前被阻塞的進程,通常這些進程都是在等待某些外部資源而被阻塞。>3須要注意,並且一直出現或者常常出現,就更值得注意
in 中斷數。通常表明大量設備操做成功通知內核。
cs 上下文切換。通常表明任務須要緊急被cpu處理。數字高,只能說明內核在充分發揮它的任務調度做用。不能簡單經過該數字判斷cpu就出現瓶頸。
us 用戶進程所佔用的cpu時間的百分比
sy 內核在進行任務調度所佔用的cpu時間的百分比
id cpu空閒所佔用的時間百分比.僅僅0不能簡單判斷cpu出現瓶頸,只能說它被充分被留用。
wa 等待IO所消耗時間百分比
st 被硬件虛擬化的虛擬機所消耗掉的時間百分比
mpstat 和 vmstat 相似,不一樣的是 mpstat 能夠輸出多個處理器的數據
# mpstat -P ALL 1 ---P ALL表示查看全部CPU核, 1表示每一秒顯示一次
10:46:35 AM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:46:36 AM all 26.13 0.00 6.53 0.00 3.52 9.05 0.00 54.77 19478.22
10:46:36 AM 0 25.74 0.00 6.93 0.00 2.97 7.92 0.00 56.44 9740.59
10:46:36 AM 1 26.73 0.00 6.93 0.00 3.96 10.89 0.00 51.49 9739.60
# sar -u 查看cpu相關的歷史數據 --這是歷史數據,是每十分鐘會去採集一次系統相關的數據
# sar -u 2 3 --兩秒一次,顯示三次(不是歷史數據,是當前動態數據)
sysstat --> 提供 sar 命令 (system activity reporter)
sar的特色:能夠對過去時間的系統狀態進行分析,但不能對某個進程進行深刻分析,只能對系統的總體狀況進行分析。
yum install sysstat -y
# service sysstat start
# chkconfig sysstat on
安裝systat包後,就會自動在 /var/log/sa/saxx 產生數據 xx表明日期
可使用sar -f /var/log/sa/saxx 去訪問 加參數就能夠訪問不一樣類型的性能數據
指定查詢以前的日期與固定時間點的方法
sar -u -f /var/log/sa/sa18 --查看這個月已通過的18號的cpu歷史數據
sar -u -f /var/log/sa/sa18 -s 09:00:00 -e 10:00:00 --指定只看18號9點到10點的cpu歷史數據
保存性能數據
sar支持保存成兩種格式的文件,一種是文本文件,一種是二進制文件 (只有經過sar本身的命令 -f 參數 才能看)
保存爲文本文件,能夠直接cat命令查看
sar -p 1 5 > /tmp/test/sar1.txt
保存爲二進制文件
sar -p 1 5 -o /tmp/test/sar2.txt 1>/dev/null --會顯示到屏幕,能夠用1>/dev/null
file /tmp/test/sar2.txt --是data類型文件
sar -f /tmp/test/sar2.txt --使用-f參數讀取
能夠經過作實驗,再來用vmstat,mpstat,sar來看cpu的變化
如:執行下面的sh /tmp/2.sh腳本,產生一百個運算的進程
[root@li ~]# cat /tmp/1.sh
#!/bin/bash
a=1
sum=0
while true
do
sum=$[$sum+$a]
let a++
done
[root@li ~]# cat /tmp/2.sh
#!/bin/bash
for i in `seq 100`
do
sh /tmp/1.sh &
done
===========================================================
總結:如今的架構cpu極少會成爲瓶頸.就算是真的cpu成爲了瓶頸,對cpu能作的優化太少了(要麼就換硬件,要麼經過擴展架構來分擔壓力,殺掉無用而且佔用資源的進程)
系統管理員能改的也就只有進程優先級了
nice 優先級 能調的範圍是 -20到19 -20表示優先級最高,19最低
用戶運行一個程序默認給的優先級爲0
renice 對一個已經運行的進程進行nice值的調整
renice 19 pid
[root@li ~]# vim /tmp/test.sh
a=1
while [ $a -lt 1000000 ]
do
let a++
done
nice 優先級高的可以優先分配資源,跑得快,花費的時間少,負載越高,效果越明顯
實驗
在一個負載高的狀況下作效果更好,好比一個大文件的cp
第一個終端:
[root@li ~]# time sh /tmp/test.sh
real 0m39.363s
user 0m26.338s
sys 0m0.900s
第二個終端:
[root@li ~]# time nice --19 sh /tmp/test.sh --19 第一個是參數的橫槓,第二個是負號
real 0m26.881s
user 0m26.008s
sys 0m0.871s
--對比上面的時間,能夠看到 高優先級的花費的時間少
能夠把上面的實驗再作一次,立刻用top查出-19的pid值,並使用renice修改
renice 19 9683
[root@li ~]# time sh /tmp/test.sh
real 0m34.665s
user 0m26.277s
sys 0m0.896s
[root@li ~]# time nice --19 sh /tmp/test.sh
real 0m37.231s
user 0m26.094s
sys 0m0.905s
--從上面的時間能夠看出,-19優先級的半路被改成19後,所花費的時間反而多了
注意:只有管理員才能把優先級往高調,普通用戶只能調本身的,而且只能往低調,調低後還不能再調高
相關文章
相關標籤/搜索