自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux系統(tǒng)監(jiān)控之磁盤I/O篇

運維 系統(tǒng)運維
本文節(jié)選編譯自Darren Hoch的Linux System and Performance Monitoring一書,詳細介紹了在Linux系統(tǒng)下如何對磁盤I/O進行監(jiān)測以及磁盤I/O產(chǎn)生的細節(jié)。當覺得系統(tǒng)中出現(xiàn)了I/O 瓶頸時,可以使用標準的監(jiān)控軟件來查找原因。

磁盤I/O 子系統(tǒng)是Linux 系統(tǒng)中最慢的部分.這個主要是歸于CPU到物理操作磁盤之間距離(譯注:盤片旋轉(zhuǎn)以及尋道).如果拿讀取磁盤和內(nèi)存的時間作比較就是分鐘級到秒級,這就像7天和7分鐘的區(qū)別.因此本質(zhì)上,Linux 內(nèi)核就是要***程度的降低I/O 數(shù).本章將訴述內(nèi)核在磁盤和內(nèi)存之間處理數(shù)據(jù)的這個過程中,哪些地方會產(chǎn)生I/O.

6.1 讀和寫數(shù)據(jù) - 內(nèi)存頁

Linux 內(nèi)核將硬盤I/O 進行分頁,多數(shù)Linux 系統(tǒng)的默認頁大小為4K.讀和寫磁盤塊進出到內(nèi)存都為4K 頁大小.你可以使用time 這個命令加-v 參數(shù),來檢查你系統(tǒng)中設(shè)置的頁大小:

# /usr/bin/time -v date

Page size (bytes): 4096

6.2 Major and Minor Page Faults(譯注:主要頁錯誤和次要頁錯誤)

Linux,類似多數(shù)的UNIX 系統(tǒng),使用一個虛擬內(nèi)存層來映射硬件地址空間.當一個進程被啟動,內(nèi)核先掃描CPU caches和物理內(nèi)存.如果進程需要的數(shù)據(jù)在這2個地方都沒找到,就需要從磁盤上讀取,此時內(nèi)核過程就是major page fault(MPF).MPF 要求磁盤子系統(tǒng)檢索頁并緩存進RAM.

一旦內(nèi)存頁被映射進內(nèi)存的buffer cache(buff)中,內(nèi)核將嘗試從內(nèi)存中讀取或?qū)懭?,此時內(nèi)核過程就是minor page fault(MnPF).與在磁盤上操作相比,MnPF 通過反復使用內(nèi)存中的內(nèi)存頁就大大的縮短了內(nèi)核時間.

以下的例子,使用time 命令驗證了,當進程啟動后,MPF 和 MnPF 的變化情況.***次運行進程,MPF 會更多:

# /usr/bin/time -v evolution

Major (requiring I/O) page faults: 163

Minor (reclaiming a frame) page faults: 5918

第二次再運行時,內(nèi)核已經(jīng)不需要進行MPF了,因為進程所需的數(shù)據(jù)已經(jīng)在內(nèi)存中:

# /usr/bin/time -v evolution

Major (requiring I/O) page faults: 0

Minor (reclaiming a frame) page faults: 5581

6.3 The File Buffer Cache(譯注:文件緩存區(qū))

文件緩存區(qū)就是指,內(nèi)核將MPF 過程最小化,MnPF 過程***化.隨著系統(tǒng)不斷的產(chǎn)生I/O,buffer cache也將不斷的增加.直到內(nèi)存不夠,以及系統(tǒng)需要釋放老的內(nèi)存頁去給其他用戶進程使用時,系統(tǒng)就會丟棄這些內(nèi)存頁.結(jié)果是,很多sa(譯注:系統(tǒng)管理員)對系統(tǒng)中過少的free memory(譯注:空閑內(nèi)存)表示擔心,實際上這是系統(tǒng)更高效的在使用caches.

以下例子,是查看/proc/meminfo 文件:

# cat /proc/meminfo

MemTotal: 2075672 kB

MemFree: 52528 kB

Buffers: 24596 kB

Cached: 1766844 kB

可以看出,這個系統(tǒng)總計有2GB (Memtotal)的可用內(nèi)存.當前的空閑內(nèi)存為52MB (MemFree),有24 MB內(nèi)存被分配磁盤寫操作(Buffers),還有1.7 GB頁用于讀磁盤(Cached).

內(nèi)核這樣是通過MnPF機制,而不代表所有的頁都是來自磁盤.通過以上部分,我們不可能確認系統(tǒng)是否處于瓶頸中.

6.4 Type of Memory Pages

在Linux 內(nèi)核中,memory pages有3種,分別是:

1,Read Pages - 這些頁通過MPF 從磁盤中讀入,而且是只讀.這些頁存在于Buffer Cache中以及包括不能夠修改的靜態(tài)文件,二進制文件,還有庫文件.當內(nèi)核需要它們時,將讀取到內(nèi)存中.如果內(nèi)存不足,內(nèi)核將釋放它們回空閑列表中.程序再次請求時,則通過MPF 再次讀回內(nèi)存.

2,Dirty Pages - 這些頁是內(nèi)核在內(nèi)存中已經(jīng)被修改過的數(shù)據(jù)頁.當這些頁需要同步回磁盤上,由pdflush 負責寫回磁盤.如果內(nèi)存不足,kswapd (與pdflush 一起)將這些頁寫回到磁盤上并釋放更多的內(nèi)存.

3,Anonymous Pages - 這些頁屬于某個進程,但是沒有任何磁盤文件和它們有關(guān).他們不能和同步回磁盤.如果內(nèi)存不足,kswapd 將他們寫入swap 分區(qū)上并釋放更多的內(nèi)存("swapping" pages).

6.5 將數(shù)據(jù)頁寫回磁盤

應(yīng)用程序有很多選擇可以寫臟頁回磁盤上,可通過I/O 調(diào)度器使用 fsync() 或 sync() 這樣的系統(tǒng)函數(shù)來實現(xiàn)立即寫回.如果應(yīng)用程序沒有調(diào)用以上函數(shù),pdflush 進程會定期與磁盤進行同步.

# ps -ef | grep pdflush

root 186 6 0 18:04 ? 00:00:00 [pdflush]

#p#

7.0 監(jiān)控 I/O

當覺得系統(tǒng)中出現(xiàn)了I/O 瓶頸時,可以使用標準的監(jiān)控軟件來查找原因.這些工具包括了top,vmstat,iostat,sar.它們的輸出結(jié)果一小部分是很相似,不過每個也都提供了各自對于性能不同方面的解釋.以下章節(jié)就將討論哪些情況會導致I/O 瓶頸的出現(xiàn).

7.1 Calculating IO's Per Second(譯注:IOPS 的計算)

每個I/O 請求到磁盤都需要若干時間.主要是因為磁盤的盤邊必須旋轉(zhuǎn),機頭必須尋道.磁盤的旋轉(zhuǎn)常常被稱為"rotational delay"(RD),機頭的移動稱為"disk seek"(DS).一個I/O 請求所需的時間計算就是DS加上RD.磁盤的RD 基于設(shè)備自身RPM 單位值(譯注:RPM 是Revolutions Perminute的縮寫,是轉(zhuǎn)/每分鐘,代表了硬盤的轉(zhuǎn)速).一個RD 就是一個盤片旋轉(zhuǎn)的

半圓.如何計算一個10K RPM設(shè)備的RD 值呢:

1, 10000 RPM / 60 seconds (10000/60 = 166 RPS)

2, 轉(zhuǎn)換為 166分之1 的值(1/166 = 0.006 seconds/Rotation)

3, 單位轉(zhuǎn)換為毫秒(6 MS/Rotation)

4, 旋轉(zhuǎn)半圓的時間(6/2 = 3MS) 也就是 RD

5, 加上平均3 MS 的尋道時間 (3MS + 3MS = 6MS)

6, 加上2MS 的延遲(6MS + 2MS = 8MS)

7, 1000 MS / 8 MS (1000/8 = 125 IOPS)

每次應(yīng)用程序產(chǎn)生一個I/O,在10K RPM磁盤上都要花費平均 8MS.在這個固定時間里,磁盤將盡可能且有效率在進行讀寫磁盤.IOPS 可以計算出大致的I/O 請求數(shù),10K RPM 磁盤有能力提供120-150 次IOPS.評估IOPS 的效能,可用每秒讀寫I/O 字節(jié)數(shù)除以每秒讀寫IOPS 數(shù)得出.

7.2 Random vs Sequential I/O(譯注:隨機/順序 I/O)

per I/O產(chǎn)生的KB 字節(jié)數(shù)是與系統(tǒng)本身workload相關(guān)的,有2種不同workload的類型,它們是sequential和random.

7.2.1 Sequential I/O(譯注:順序IO)

iostat 命令提供信息包括IOPS 和每個I/O 數(shù)據(jù)處理的總額.可使用iostat -x 查看.順序的workload是同時讀順序請求大量的數(shù)據(jù).這包括的應(yīng)用,比如有商業(yè)數(shù)據(jù)庫(database)在執(zhí)行大量的查詢和流媒體服務(wù).在這個workload 中,KB per I/O 的比率應(yīng)該是很高的.Sequential workload 是可以同時很快的移動大量數(shù)據(jù).如果每個I/O 都節(jié)省了時間,那就意味了能帶來更多的數(shù)據(jù)處理.

# iostat -x 1

avg-cpu: %user %nice %sys %idle

0.00 0.00 57.1 4 42.86

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

/dev/sda 0.00 12891.43 0.00 105.71 0.00 1 06080.00 0.00 53040.00 1003.46 1099.43 3442.43 26.49 280.00

/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

/dev/sda2 0.00 12857.14 0.00 5.71 0.00 105782.86 0.00 52891.43 18512.00 559.14 780.00 490.00 280.00

/dev/sda3 0.00 34.29 0.00 100.00 0.00 297.14 0.00 148.57 2.97 540.29 594.57 24.00 240.00

avg-cpu: %user %nice %sys %idle

0.00 0.00 23.53 76.47

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

/dev/sda 0.00 17320.59 0.00 102.94 0.00 142305.88 0.00 71152.94 1382.40 6975.29 952.29 28.57 294.12

/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

/dev/sda2 0.00 16844.12 0.00 102.94 0.00 138352.94 0.00 69176.47 1344.00 6809.71 952.29 28.57 294.12

/dev/sda3 0.00 476.47 0.00 0.00 0.00 952.94 0.00 1976.47 0.00 165.59 0.00 0.00 276.47

評估IOPS 的效能,可用每秒讀寫I/O 字節(jié)數(shù)除以每秒讀寫IOPS 數(shù)得出,比如

rkB/s 除以 r/s

wkB/s 除以 w/s

53040/105 = 505KB per I/O

71152/102 = 697KB per I/O

在上面例子可看出,每次循環(huán)下,/dev/sda 的per I/O 都在增加.

7.2.2 Random I/O(譯注:隨機IO)

Random的worklaod環(huán)境下,不依賴于數(shù)據(jù)大小的多少,更多依賴的是磁盤的IOPS 數(shù).Web和Mail 服務(wù)就是典型的Random workload.I/O 請求內(nèi)容都很小.Random workload是同時每秒會有更多的請求數(shù)產(chǎn)生.所以,磁盤的IOPS 數(shù)是關(guān)鍵.

# iostat -x 1

avg-cpu: %user %nice %sys %idle

2.04 0.00 97.96 0.00

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

/dev/sda 0.00 633.67 3.06 102.31 24.49 5281.63 12.24 2640.82 288.89 73.67 113.89 27.22 50.00

/dev/sda1 0.00 5.10 0.00 2.04 0.00 57.14 0.00 28.57 28.00 1.12 55.00 55.00 11.22

/dev/sda2 0.00 628.57 3.06 100.27 24.49 5224.49 12.24 2612.24 321.50 72.55 121.25 30.63 50.00

/dev/sda3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

avg-cpu: %user %nice %sys %idle

2.15 0.00 97.85 0.00

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

/dev/sda 0.00 41.94 6.45 130.98 51.61 352.69 25.81 3176.34 19.79 2.90 286.32 7.37 15.05

/dev/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

/dev/sda2 0.00 41.94 4.30 130.98 34.41 352.69 17.20 3176.34 21.18 2.90 320.00 8.24 15.05

/dev/sda3 0.00 0.00 2.15 0.00 17.20 0.00 8.60 0.00 8.00 0.00 0.00 0.00 0.00

計算方式和之前的公式一致:

2640/102 = 23KB per I/O

3176/130 = 24KB per I/O

(譯注:對于順序I/O來說,主要是考慮讀取大量數(shù)據(jù)的能力即KB per request.對于隨機I/O系統(tǒng),更需要考慮的是IOPS值)

7.3 When Virtual Memory Kills I/O

如果系統(tǒng)沒有足夠的RAM 響應(yīng)所有的請求,就會使用到SWAP device.就像使用文件系統(tǒng)I/O,使用SWAP device 代價也很大.如果系統(tǒng)已經(jīng)沒有物理內(nèi)存可用,那就都在SWAP disk上創(chuàng)建很多很多的內(nèi)存分頁,如果同一文件系統(tǒng)的數(shù)據(jù)都在嘗試訪問SWAP device,那系統(tǒng)將遇到I/O 瓶頸.最終導致系統(tǒng)性能的全面崩潰.如果內(nèi)存頁不能夠及時讀或?qū)懘疟P,它們就一直保留在RAM中.如果保留時間太久,內(nèi)核又必須釋放內(nèi)存空間.問題來了,I/O 操作都被阻塞住了,什么都沒做就被結(jié)束了,不可避免地就出現(xiàn)kernel panic和system crash.

下面的vmstat 示范了一個內(nèi)存不足情況下的系統(tǒng):

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

r b swpd free buff cache si so bi bo in cs us sy id wa

17 0 1250 3248 45820 1488472 30 132 992 0 2437 7657 23 50 0 23

11 0 1376 3256 45820 1488888 57 245 416 0 2391 7173 10 90 0 0

12 0 1582 1688 45828 1490228 63 131 1348 76 2432 7315 10 90 0 10

12 2 3981 1848 45468 1489824 185 56 2300 68 2478 9149 15 12 0 73

14 2 10385 2400 44484 1489732 0 87 1112 20 2515 11620 0 12 0 88

14 2 12671 2280 43644 1488816 76 51 1812 204 2546 11407 20 45 0 35

這個結(jié)果可看出,大量的讀請求回內(nèi)存(bi),導致了空閑內(nèi)存在不斷的減少(free).這就使得系統(tǒng)寫入swap device的塊數(shù)目(so)和swap 空間(swpd)在不斷增加.同時看到CPU WIO time(wa)百分比很大.這表明I/O 請求已經(jīng)導致CPU 開始效率低下.

要看swaping 對磁盤的影響,可使用iostat 檢查swap 分區(qū)

# iostat -x 1

avg-cpu: %user %nice %sys %idle

0.00 0.00 100.00 0.00

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

/dev/sda 0.00 1766.67 4866.67 1700.00 38933.33 31200.00 19466.67 15600.00 10.68 6526.67 100.56 5.08 3333.33

/dev/sda1 0.00 933.33 0.00 0.00 0.00 7733.33 0.00 3866.67 0.00 20.00 2145.07 7.37 200.00

/dev/sda2 0.00 0.00 4833.33 0.00 38666.67 533.33 19333.33 266.67 8.11 373.33 8.07 6.90 87.00

/dev/sda3 0.00 833.33 33.33 1700.00 266.67 22933.33 133.33 11466.67 13.38 6133.33 358.46 11.35 1966.67

在這個例子中,swap device(/dev/sda1) 和 file system device(/dev/sda3)在互相作用于I/O. 其中任一個會有很高寫請求(w/s),也會有很高wait time(await),或者較低的服務(wù)時間比率(svctm).這表明2個分區(qū)之間互有聯(lián)系,互有影響.

7.4 結(jié)論

I/O 性能監(jiān)控包含了以下幾點:

1,當CPU 有等待I/O 情況時,那說明磁盤處于超負荷狀態(tài).

2,計算你的磁盤能夠承受多大的IOPS 數(shù).

3,確定你的應(yīng)用是屬于隨機或者順序讀取磁盤.

4,監(jiān)控磁盤慢需要比較wait time(await) 和 service time(svctm).

5,監(jiān)控swap 和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸.

原文鏈接地址: http://www.sanotes.net/html/y2009/381.html

【編輯推薦】

  1. Linux事件監(jiān)控機制遺漏事件問題的相關(guān)分析
  2. 善用腳本 讓你的Nagios記錄系統(tǒng)監(jiān)控日志(附vmstat詳解)
  3. Linux監(jiān)控工具的展覽館
責任編輯:yangsai 來源: sanotes.net
相關(guān)推薦

2019-05-05 15:20:32

Linuxiotop磁盤

2019-02-25 08:40:28

Linux磁盤IO

2022-04-23 16:30:22

Linux磁盤性能

2014-07-28 16:47:41

linux性能

2024-10-17 16:47:05

磁盤I/O計算機

2020-12-01 07:08:23

Linux網(wǎng)絡(luò)I

2010-12-24 13:25:44

Linux性能監(jiān)控CPU

2011-01-18 10:00:59

Linux磁盤分區(qū)

2013-05-28 10:08:41

IO輸出

2011-03-29 16:14:04

Cacti硬盤監(jiān)控

2010-05-26 18:21:04

Linux性能監(jiān)控

2010-05-26 18:31:51

Linux性能監(jiān)控

2011-11-08 21:47:37

Linux 監(jiān)控 IO

2009-05-14 10:16:36

Oracle優(yōu)化磁盤

2011-01-14 09:25:28

LinuxIO機制

2010-05-26 18:40:54

Linux性能監(jiān)控

2019-12-02 09:45:45

Linux IO系統(tǒng)

2020-06-03 17:30:42

LinuxIO

2013-09-16 16:07:38

Java基礎(chǔ)IO

2010-05-26 18:08:30

Linux性能監(jiān)控
點贊
收藏

51CTO技術(shù)棧公眾號