計算機的四個子系統:
cpu子系統
記憶體子系統
IO子系統(儲存設備)
網絡子系統
調整的方向:
縱向調整:
在單機的基礎上進行調整:
調整軟體,調整軟體配置參數,改變運作參數
調整硬體:更換硬體
橫向調整
使用更多的機器完成同一個任務---叢集
CPU
# cat /proc/cpuinfo
# dmidecode --type processor
# dmidecode --type cache
中斷 --- 裝置通知核心,完成一次資料處理過程。
往往是IO裝置産生的,網絡裝置産生。
核心處理過程---控制優先級、任務(程序)排程
使用者程序
上下文切換
核心在做任務排程的時候,調整了任務優先級,這意味着cpu會平凡中斷去執行其他優先級更高的程式。
運作隊列(系統負載)uptime
平均負載:
背景1:單核心的cpu
load average: 1.43, 3.43, 5.43
過去的1分鐘、5分鐘、15分鐘平均負載分别是1.43,3.43,5.43.
以過去的15分鐘為例子,表明,在過去的15分鐘裡,cpu的運作隊列平均長度為5.43,也就意味這,平均有5.43個程序在隊列中排隊等待cpu處理,在5.43個程序中,有一個程序是正在被處理,4.43個程序在等候處理。
背景2:雙核心的cpu
load average: 1.43, 3.43, 5.42
以過去的15分鐘為例子,表明,在過去的15分鐘裡,cpu的運作隊列平均長度為5.43,但是由于有兩個核心,也就意味着,平均每個核心的cpu有2.71個程序在隊列中排隊等待cpu處理,在5.43個程序中,有2個程序是正在被處理,3.42個程序在等候處理,平均每個核心有(2.71-1)=1.71個程序在等候處理。
經驗:
每個核心平均負載如果大于等于3(1+2)就應該注意。如果再大的話,說明cpu很忙,有很多程序在排隊。
cpu使用率
使用者程序us , 使用者執行的程式
核心排程sy , 核心進行排程(進行中斷,進行上下文切換)
空閑 id
等待io wa
top - 11:30:05 up 1:19, 5 users, load average: 0.77, 0.88, 0.70
Tasks: 154 total, 1 running, 152 sleeping, 0 stopped, 1 zombie
Cpu(s): 20.6%us, 0.2%sy, 0.0%ni, 78.9%id, 0.0%wa, 0.2%hi, 0.2%si, 0.0%
vmstat,top,uptime,mpstat,dstat,sar -u / -q
# vmstat 2 3
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 0 1122176 81516 413056 0 0 47 13 573 288 21 1 76 1 0
0 0 0 1122052 81516 413056 0 0 0 0 1051 399 20 0 81 0 0
0 0 0 1122300 81516 413088 0 0 0 0 1127 504 19 0 80
與cpu相關的參數輸出
procs --system-- -----cpu------
r b in cs us sy id wa st
0 0 573 288 21 1 76 1 0
0 0 1051 399 20 0 81 0 0
0 0 1127 504 19 0 80 0 0
r ---> running ,就是相當于uptime的負載(運作隊列)
如果是單核心,數字超過3,就應該注意。
b ---> block ,被阻塞的程序。往往由于程序在等待外部資源。
一般不應該>0,有的話,一般都說明某個程序由于某種原因被阻塞。就應該去關心一下原因。
in ---> 中斷數,中斷數越高,一般說明核心在頻繁地進行任務排程,但更着重與IO裝置産生的中斷。
cs ---> 上下文切換 ,數字越高,說明很多個不同的程序之間在競争cpu資源。
us:sy的百分比應該是 7:3 <---應該花更多cpu資源在使用者程序上。
wa 如果數字比較大,一般說明由程序在讀寫磁盤資料,或者接受網絡資料,程序被阻塞
跟蹤活躍程序
# strace -F -p 3265
跟蹤某個準備執行的程序
# strace -F ping -c 1 www.upl.com
# mpstat -P ALL 2
# sar -u
# sar -q 2 5
=============================================================
@記憶體子系統調優
虛拟記憶體
記憶體頁
記憶體分頁(paging)--核心就必須經常掃描記憶體空間并且收回其中未被使用的記憶體頁,把資料同步到硬碟
kswapd
pdflush 程序負責将記憶體中的内容和檔案系統進行同步操
# free -m
total used free shared buffers cached
Mem: 2001 926 1074 0 86 411
-/+ buffers/cache: 428 1572
Swap: 2047 0 2047
buffers
主要是緩存磁盤塊的資料,檔案描述符
cached
主要是檔案系統緩存。
vmstat , time , sar -B ,free
-----------memory---------- ---swap-- -----io----
swpd free buff cache si so bi bo
0 1099740 89324 420868 0 0 13 5
0 1099368 89324 420868 0 0 0 0
0 1099400 89324 420868 0 0 0 0
si <--- 從swap讀取資料加載到記憶體(in到記憶體)
so <--- 從記憶體中把資料寫到swap(從記憶體中out出去)
判斷記憶體是否足夠,隻需要簡單地判斷是否使用了交換分區,是否頻繁使用交換分區。
首頁面故障
程式在執行的時候需要的資料在記憶體中沒有直接得到,需要從外設中讀取,就算發生首頁面故障。
次頁面故障
程式在執行的時候需要的資料在記憶體中直接得到,不需要從外設中讀取,就算發生次頁面故障。
系統總是使用各種緩存,緩沖的技術來減少首頁面故障,增加次頁面故障。
Major (requiring I/O) page faults: 0 首頁面故障
Minor (reclaiming a frame) page faults: 222 次頁面故障
# procinfo -n 2 可以檢視頁面調進和調出
如果大量的page in 和page out 隻能說明目前記憶體使用比較活躍
如果有大量swap in 和 swap out 說明記憶體不足
# sar -B 2 3
Linux 2.6.18-274.el5 (www.upl.com) 2012年07月02日
16時03分17秒 pgpgin/s pgpgout/s fault/s majflt/s
16時03分19秒 0.00 52.00 25.00 0.00
16時03分21秒 0.00 0.00 13.50 0.00
16時03分23秒 0.00 21.89 183.58 0.00
Average: 0.00 24.63 74.21 0.00
案例資料分析
=====================================
@IO子系統調優
IOPS計算
每秒完成的IO數量
IO吞吐量計算
機關時間内,平均每個IO完成的資料量
IO分類
随機IO
連續IO
磁盤的轉速
scsi 硬碟 320M/s
10K IOPS:120-150
15K IOPS:150-200
ssd 固态硬碟
iostat指令
# iostat -k -d sda 2
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 2.40 22.11 9.09 492465 202455
tps 過去的時間内平均每秒完成了多少個IO
kB_read/s 平均每秒讀取多少KB的資料
kB_read 過去的時間内讀取了多少資料
測試某個裝置的寫入速度:
# mount -o sync /dev/sda8 /mnt
# dd if=/dev/zero of=/mnt/1G bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 18.8142 seconds, 57.1 MB/s
# iostat -m -d sda8 2
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda8 94.50 0.01 45.02 0 90
sda8 125.50 0.00 62.00 0 124
sda8 133.00 0.00 66.00 0 132
# iostat -x -k -d sda 2
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.66 25.91 1.68 1.06 21.71 107.89 94.70 0.13 46.32 2.73 0.75
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
rrqm/s 平均每秒合并的讀請求
r/s 平均每秒讀IO的數量
avgrq-sz 平均每個請求涉及到多少扇區的資料《--IO吞吐量
avgqu-sz 平均IO隊列的長度
%util 裝置的帶寬的使用百分比。數字越高,說明磁盤越盡力去讀寫資料。
優化手段:分區、塊大小,進階檔案系統e4fsprogs,檔案系統挂載,IO算法
# yum install e4fsprogs.x86_64
# mkfs.ext4 /dev/sda8
# mkfs.ext4 -b 4096 /dev/sda8