天天看點

linux調優

可以從哪些方面進行調優?

  CPU子系統

  記憶體子系統

  IO子系統

  網絡子系統

 調優的步驟:

  确定應用類型

   IO密集型:資料庫

   CPU密集型:動态頁面的web伺服器

  建立基準資料

  安裝監控工具

  發現問題,發掘原因,調整-->觀察--->調整

 調優的準則:

  有目的的去調優。

  一次隻對一個領域進行調整。

  每次隻改一個設定。

  建議采用兩種以上性能測試工具。

  經驗很重要。

CPU子系統

 檢視cpu資訊

 # cat /proc/cpuinfo

 # dmidecode --type processor

 # dmidecode --type cache

 中斷 裝置通知核心,完成了一次資料處理過程。也可以了解為:cpu停止下來去執行别的指令。例如:完成一次IO。或者完成一次網絡資料包的發送。

 核心處理過程 --- 控制優先級,進行任務排程。

 使用者程序

 上下文切換

 運作隊列

 常見cpu性能資料采集工具:

  vmstat,top,uptime

  mpstat

  sar <--systat 

# uptime

 11:02:04 up  1:21,  2 users,  load average: 2, 0.95, 0.97

1核心的cpu

 負載中的數字代表目前有多少個任務等待cpu的處理和正在處理

 2,代表目前cpu正在處理1個任務,還有3個任務在等待。

 4,代表目前cpu正在處理1個任務,還有3個任務在等待。

4核心的cpu

 2,其中兩個核心的cpu正在處理兩個任務,沒有任務在等待。

 8,四個任務正在被cpu處理,還有四個任務在等待。

 一般來說,一個核心的cpu,存在2-3個等待的任務是屬于正常。

# vmstat 2  每2秒鐘采集一下資料

# 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

 1  0      0  78112  63440 1519092    0    0     0    30 4284 1706 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 被硬體虛拟化的虛拟機所消耗掉的時間百分比

 us:sy ~= 7:3

# vmstat 3 5

# mpstat -P ALL 2

# sar -u  檢視cpu相關的曆史資料

# sar -u 2 3

# sar -q 2 3

 runq-sz 運作隊列

記憶體子系統

 虛拟記憶體

  把記憶體上暫時用不到的資料,但不能不用的資料,臨時儲存到磁盤(swap)或者磁盤檔案(虛拟記憶體檔案)中。但需要用到這些資料的時候,就重新從磁盤上讀取到記憶體中。 由核心kswapd程序完成

 記憶體頁(page) 預設是4K大小。這是操作記憶體資料的最小基本機關。

 記憶體分頁(paging) 核心經常掃描記憶體,如果發現記憶體的空閑空間低于某個值,那麼就會把記憶體上的資料同步到硬碟。這些一般都是曾經打開過的檔案,這些檔案資料加載到記憶體中,然後已經被修改過,現在檔案不再需要讀取,那麼就可以把他們同步到磁盤。由核心pdfulsh程序完成。

# free -m

             total       used       free     shared    buffers     cached

Mem:          2017       1937         79          0         72       1460

-/+ buffers/cache:        405       1612

Swap:         4094          0       4094

buffers

 緩沖區 ,用于緩存剛通路過,或者經常被通路的檔案的資料。用于提高系統通路檔案的效率,減少頻繁讀取磁盤檔案。

cached

 高速緩存,使用者緩存經常打開的檔案的檔案描述符号(指針)

# vmstat 2 3

 1  0      0  78060  75364 1496028    0    0    79    11  303 1178 31 15 53  0  0

 1  0      0  78308  75364 1496036    0    0     0     0 4331 1240 32 18 50  0  0

 1  0      0  78340  75364 1496036    0    0     0     0 4359 1252 33 19 49  0  0

si 有多少資料從swap讀取到記憶體中

so 有多少資料從記憶體寫到swap分區

bi 有多少資料從塊裝置讀取到記憶體中

bo 有多少資料從記憶體中寫到記憶體中

# /usr/bin/time -v date

 ...

        Major (requiring I/O) page faults: 0 主要頁面故障

        Minor (reclaiming a frame) page faults: 204 次要頁面故障

        Page size (bytes): 4096 《--記憶體頁為4K

主要頁面故障:

 當執行某個程序的時候,程序需要讀取某些資料,而這些資料在cache,buffer(在記憶體中)找不到,就會産生一次主要頁面故障。

次要頁面故障

 程序在執行的時候,需要的資料在記憶體中可以找到,就叫做次要頁面故障。

系統為了提高通路效率,總是把資料緩沖起來,以便在記憶體中直接操作資料,減少磁盤的讀寫。其實就是一個盡可能減少主要頁面故障,增加次要頁面故障的過程

# /usr/bin/time -v command ...

 對比主,次頁面故障的數值,如果發現首頁面故障在第二次之後會減少,說明系統緩存了相關資料。

# sar -B 2 3

14時34分52秒  pgpgin/s pgpgout/s   fault/s  majflt/s

14時34分54秒      0.00     21.89     25.87      0.00

14時34分56秒      0.00      0.00     12.50      0.00

14時34分58秒      0.00      0.00    229.70      0.00

Average:         0.00      7.30     89.72      0.00

模拟實驗:

 工具: mem.php

 原理:大量讀取檔案,把檔案資料儲存在記憶體。

# ab -c 30 -n 2000 http://10.1.1.22:8080/test/mem.php

IO子系統調優

 vmstat,iostat,sar

 IO,輸出輸入。

 一個IO,指的是從磁盤把資料讀出來或者把資料寫磁盤上,就稱之為一個IO。

 IOPS 每秒鐘完成多少個IO

  10k RPM <--每分鐘一萬轉,120 IOPS

  15  RPM <--每分鐘15000轉, 150-200 IOPS

# iostat 2 

# iostat -x -d sda2 2 3

Linux 2.6.18-164.el5 (dev.upl.com)      2011年09月01日

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

sda2             18.33     9.57 12.16  5.83   891.33   123.20    56.38     0.26   14.26   2.81   5.05

sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

r/s 每秒完成多少個讀IO

w/s 每秒完成多少個寫IO

rsec/s 每秒讀取了多少扇區的資料。 一個扇區=512位元組資料

wsec/s 每秒寫了多少扇區的資料。

avgrq-sz 跟upload中負載一樣的概念

await

 平均完成IO需要等待多少時間, 包含服務時間,還有在隊列中等待的時間。

svctm

 服務時間,從IO請求産生到,完成IO的時間。

%util

 磁盤帶寬使用百分比。如果一直都是100%,說明磁盤很忙。

# iostat

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

          23.93    0.00   12.12    1.33    0.00   62.62

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda              10.15       445.94        84.03     646864     121890

sda1              0.06         1.01         0.02       1468         26

sda2              9.88       438.18        83.59     635602     121248

sda3              0.02         0.75         0.00       1086          0

tps 每秒傳輸量(包括讀IO和寫IO)

Blk_read/s = rsec/s   Blk=1扇區

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

sdb1              0.96    75.75   87.42   36.08  1624.72   894.63    20.40     1.50   12.18   3.98  49.15

如何計算每秒鐘讀寫多少KB資料?

 1624.72  x  512  / 1024 = 812KB資料

如何計算每個IO能夠讀寫多少KB資料?

 每秒讀取的資料/每秒的IO數量 = 812 / 87 = 9.33

IO的類型:

 随機IO

  一般的硬碟處理效率最慢的就是随機IO。每個IO完成的資料量非常低。

 順序IO

  這些IO涉及資料都是連續存放在磁盤上。

基本的IO優化:

 1、優化分區

  把頻繁讀取的資料應該放在最外層的分區。

 2、檔案系統的優化

  取消通路時間更新的功能

   mount -o noatime /dev/sda3   /web

繼續閱讀