久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux下IO監控與分析的案例

154次閱讀
沒有評論

共計 2285 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章給大家分享的是有關 Linux 下 IO 監控與分析的案例的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。

1、系統級 IO 監控

1.1、iostat

iostat -xdm 1 #  個人習慣

%util 代表磁盤繁忙程度。100% 表示磁盤繁忙, 0% 表示磁盤空閑。但是注意, 磁盤繁忙不代表磁盤 (帶寬) 利用率高

argrq-sz 提交給驅動層的 IO 請求大小, 一般不小于 4K, 不大于 max(readahead_kb, max_sectors_kb)

可用于判斷當前的 IO 模式, 一般情況下, 尤其是磁盤繁忙時, 越大代表順序, 越小代表隨機

svctm 一次 IO 請求的服務時間, 對于單塊盤, 完全隨機讀時, 基本在 7ms 左右, 既尋道 + 旋轉延遲時間

1.2、各統計量之間關系

%util = (r/s + w/s) * svctm / 1000 # 隊列長度 = 到達率 * 平均服務時間

avgrq-sz = (rMB/s + wMB/s) * 2048 / (r/s + w/s) # 2048 為 1M / 512

1.3、總結

iostat 統計的是通用塊層經過合并 (rrqm/s,  wrqm/s) 后, 直接向設備提交的 IO 數據, 可以反映系統整體的 IO 狀況, 但是有以下 2 個缺點:

距離業務層比較遙遠, 跟代碼中的 write,read 不對應(由于系統預讀 + pagecache + IO 調度算法等因素, 也很難對應)

是系統級, 沒辦法精確到進程, 比如只能告訴你現在磁盤很忙, 但是沒辦法告訴你是誰在忙, 在忙什么?

2、進程級 IO 監控

2.1、iotop 和 pidstat (僅 rhel6u 系列)

iotop 顧名思義, io 版的 top

pidstat 顧名思義, 統計進程 (pid) 的 stat, 進程的 stat 自然包括進程的 IO 狀況

這兩個命令, 都可以按進程統計 IO 狀況, 因此可以知道:

1)當前系統哪些進程在占用 IO, 百分比是多少?

2)占用 IO 的進程是在讀? 還是在寫? 讀寫量是多少?

pidstat 參數很多,介紹幾個比較常用的:

pidstat -d 1 # 只顯示 IO

pidstat -u -r -d -t 1

# -d IO 信息,

# -r 缺頁及內存信息

# -u CPU 使用率

# -t 以線程為統計單位

# 1 1 秒統計一次

iotop, 很簡單, 直接敲命令

2.2、block_dump, iodump

iotop 和 pidstat 都依賴于 /proc/pid/io 文件導出的統計信息, 這個對于老一些的內核是沒有的, 比如 rhel5u2。

因此只好用以上 2 個命令來替代:

echo 1   /proc/sys/vm/block_dump #  開啟 block_dump, 此時會把 io 信息輸入到 dmesg 中

# dmesg

watch -n 1  dmesg -c | grep -oP  w+(d+): (WRITE|READ)  | sort | uniq -c

# 不停的 dmesg -c

echo 0   /proc/sys/vm/block_dump #  不用時關閉

2.3、總結

從進程級 IO 監控,可以看出:

系統級 IO 監控不能回答的 2 個問題

距離業務層相對較近(例如, 可以統計進程的讀寫量)

但是也沒有辦法跟業務層的 read,write 聯系在一起, 同時顆粒度較粗, 沒有辦法知道當前進程讀寫了哪些文件? 耗時? 大小 ?

3、業務級 IO 監控

3.1、ioprofile

ioprofile 命令本質上是 lsof + strace,

ioprofile 可以解決以下三個問題:

當前進程某時間內, 在業務層面讀寫了哪些文件(read, write)?

讀寫次數是多少?(read, write 的調用次數)

讀寫數據量多少?(read, write 的 byte 數)

3.2、實例

假設某個行為會觸發程序一次 IO 動作, 例如: 一個頁面點擊, 導致后臺讀取 A,B,C 文件

./io_event # 假設模擬一次 IO 行為, 讀取 A 文件一次, B 文件 500 次, C 文件 500 次

ioprofile -p `pidof io_event` -c count # 讀寫次數

ioprofile -p `pidof io_event` -c times # 讀寫耗時

ioprofile -p `pidof io_event` -c sizes # 讀寫大小

注: ioprofile 僅支持多線程程序, 對單線程程序不支持. 對于單線程程序的 IO 業務級分析,strace 足以。

3.3、總結

ioprofile 本質上是 strace, 因此可以看到 read,write 的調用軌跡, 可以做業務層的 io 分析。

4、文件級 IO 監控

文件級 IO 監控可以配合 / 補充 業務級和進程級 IO 分析

文件級 IO 分析, 主要針對單個文件, 查看當前哪些進程正在對某個文件進行讀寫操作.

lsof 或者 ls /proc/pid/fd

inodewatch.stp

4.1、lsof

查看當前文件由哪些進程打開

lsof ../io # io 目錄 當前由 bash 和 lsof 兩個進程打開

lsof 命令 只能查看靜態的信息, 并且 打開 并不一定 讀取 , 對于 cat ,echo 這樣的命令,   打開和讀取都是瞬間的,lsof 很難捕捉

4.2、inodewatch.stp

可以用 inodewatch.stp 來彌補

stap inodewatch.stp major minor inode #  主設備號,  輔設備號,  文件 inode 節點號  stap inodewatch.stp 0xfd 0x00 523170 #  主設備號,  輔設備號, inode 號, 可以通過  stat  命令獲得

感謝各位的閱讀!關于“Linux 下 IO 監控與分析的案例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計2285字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 伊宁县| 应城市| 尼木县| 彭山县| 峨山| 申扎县| 玉龙| 措美县| 武强县| 吉木萨尔县| 新化县| 老河口市| 敦煌市| 江门市| 杨浦区| 江达县| 象山县| 金塔县| 丹阳市| 拜城县| 枝江市| 合水县| 淮南市| 洱源县| 沙河市| 齐河县| 稻城县| 澄城县| 高尔夫| 报价| 大丰市| 巴彦淖尔市| 新源县| 晋中市| 汤原县| 张家港市| 扎赉特旗| 巴彦淖尔市| 调兵山市| 于田县| 松溪县|