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

詳解Linux下的IO監(jiān)控與分析:系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

系統(tǒng) Linux
學(xué)習(xí)優(yōu)化,理解IO還是很重要的,今天抽空整理了一下這塊內(nèi)容,下面一起看看吧~

概述

[[267201]]

學(xué)習(xí)優(yōu)化,理解IO還是很重要的,今天抽空整理了一下這塊內(nèi)容,下面一起看看吧~

下面這張經(jīng)典的圖源自 Linux Performance and Tuning Guidelines.pdf 

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

各種IO監(jiān)視工具在Linux IO 體系結(jié)構(gòu)中的位置

1 、系統(tǒng)級(jí)IO監(jiān)控

1.1、iostat

  1. iostat -xdm 1 # 個(gè)人習(xí)慣 

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

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

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

可用于判斷當(dāng)前的IO模式,一般情況下,尤其是磁盤繁忙時(shí), 越大代表順序,越小代表隨機(jī)

svctm 一次IO請(qǐng)求的服務(wù)時(shí)間,對(duì)于單塊盤,完全隨機(jī)讀時(shí),基本在7ms左右,既尋道+旋轉(zhuǎn)延遲時(shí)間

1.2、各統(tǒng)計(jì)量之間關(guān)系

%util = ( r/s + w/s) * svctm / 1000 # 隊(duì)列長(zhǎng)度 = 到達(dá)率 * 平均服務(wù)時(shí)間

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

1.3、總結(jié)

iostat 統(tǒng)計(jì)的是通用塊層經(jīng)過合并(rrqm/s, wrqm/s)后,直接向設(shè)備提交的IO數(shù)據(jù),可以反映系統(tǒng)整體的IO狀況,但是有以下2個(gè)缺點(diǎn):

  • 距離業(yè)務(wù)層比較遙遠(yuǎn),跟代碼中的write,read不對(duì)應(yīng)(由于系統(tǒng)預(yù)讀 + pagecache + IO調(diào)度算法等因素, 也很難對(duì)應(yīng))
  • 是系統(tǒng)級(jí),沒辦法精確到進(jìn)程,比如只能告訴你現(xiàn)在磁盤很忙,但是沒辦法告訴你是誰在忙,在忙什么?

2 、進(jìn)程級(jí)IO監(jiān)控

2.1、 iotop 和 pidstat (僅rhel6u系列)

iotop 顧名思義, io版的top

pidstat 顧名思義, 統(tǒng)計(jì)進(jìn)程(pid)的stat,進(jìn)程的stat自然包括進(jìn)程的IO狀況

這兩個(gè)命令,都可以按進(jìn)程統(tǒng)計(jì)IO狀況,因此可以知道:

1)當(dāng)前系統(tǒng)哪些進(jìn)程在占用IO,百分比是多少?

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

pidstat 參數(shù)很多,介紹幾個(gè)比較常用的:

  1. pidstat -d 1 #只顯示IO 

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

  1. pidstat -u -r -d -t 1  
  • # -d IO 信息,
  • # -r 缺頁及內(nèi)存信息
  • # -u CPU使用率
  • # -t 以線程為統(tǒng)計(jì)單位
  • # 1 1秒統(tǒng)計(jì)一次
  • iotop, 很簡(jiǎn)單,直接敲命令

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

2.2、block_dump, iodump

iotop 和 pidstat 都依賴于/proc/pid/io文件導(dǎo)出的統(tǒng)計(jì)信息, 這個(gè)對(duì)于老一些的內(nèi)核是沒有的,比如rhel5u2。

因此只好用以上2個(gè)命令來替代:

  1. echo 1 > /proc/sys/vm/block_dump # 開啟block_dump,此時(shí)會(huì)把io信息輸入到dmesg中 

# dmesg

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

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

# 不停的dmesg -c

  1. echo 0 > /proc/sys/vm/block_dump # 不用時(shí)關(guān)閉 

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

2.3、總結(jié)

從進(jìn)程級(jí)IO監(jiān)控 ,可以看出:

  • 系統(tǒng)級(jí)IO監(jiān)控不能回答的2個(gè)問題
  • 距離業(yè)務(wù)層相對(duì)較近(例如,可以統(tǒng)計(jì)進(jìn)程的讀寫量)

但是也沒有辦法跟業(yè)務(wù)層的read,write聯(lián)系在一起,同時(shí)顆粒度較粗,沒有辦法知道當(dāng)前進(jìn)程讀寫了哪些文件? 耗時(shí)? 大小 ?

3、 業(yè)務(wù)級(jí)IO監(jiān)控

3.1、ioprofile

ioprofile 命令本質(zhì)上是 lsof + strace,

ioprofile 可以解決以下三個(gè)問題:

  • 當(dāng)前進(jìn)程某時(shí)間內(nèi),在業(yè)務(wù)層面讀寫了哪些文件(read, write)?
  • 讀寫次數(shù)是多少?(read, write的調(diào)用次數(shù))
  • 讀寫數(shù)據(jù)量多少?(read, write的byte數(shù))

3.2、實(shí)例

假設(shè)某個(gè)行為會(huì)觸發(fā)程序一次IO動(dòng)作,例如: "一個(gè)頁面點(diǎn)擊,導(dǎo)致后臺(tái)讀取A,B,C文件"

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

ioprofile -p `pidof io_event` -c count # 讀寫次數(shù)

 詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

ioprofile -p `pidof io_event` -c times # 讀寫耗時(shí)

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

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

 詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

注: ioprofile 僅支持多線程程序,對(duì)單線程程序不支持. 對(duì)于單線程程序的IO業(yè)務(wù)級(jí)分析,strace足以。

3.3、總結(jié)

ioprofile本質(zhì)上是strace,因此可以看到read,write的調(diào)用軌跡,可以做業(yè)務(wù)層的io分析。

4 、文件級(jí)IO監(jiān)控

文件級(jí)IO監(jiān)控可以配合/補(bǔ)充"業(yè)務(wù)級(jí)和進(jìn)程級(jí)"IO分析

文件級(jí)IO分析,主要針對(duì)單個(gè)文件, 查看當(dāng)前哪些進(jìn)程正在對(duì)某個(gè)文件進(jìn)行讀寫操作.

  • lsof 或者 ls /proc/pid/fd
  • inodewatch.stp

4.1、lsof

查看當(dāng)前文件由哪些進(jìn)程打開

lsof ../io # io目錄 當(dāng)前由 bash 和 lsof 兩個(gè)進(jìn)程打開

 詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

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

4.2、inodewatch.stp

可以用 inodewatch.stp 來彌補(bǔ)

  1. stap inodewatch.stp major minor inode # 主設(shè)備號(hào), 輔設(shè)備號(hào), 文件inode節(jié)點(diǎn)號(hào)  
  2. stap inodewatch.stp 0xfd 0x00 523170 # 主設(shè)備號(hào), 輔設(shè)備號(hào), inode號(hào),可以通過 stat 命令獲得  

詳解Linux下的IO監(jiān)控與分析--系統(tǒng)級(jí)+進(jìn)程級(jí)+業(yè)務(wù)級(jí)+文件級(jí)IO

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2012-02-06 09:40:25

2022-09-06 09:29:43

監(jiān)控系統(tǒng)

2009-09-22 11:59:19

2017-06-09 17:35:07

Zerto災(zāi)備

2025-04-28 04:10:00

C#QPS系統(tǒng)GC

2023-11-03 08:22:09

Android系統(tǒng)算法

2010-05-24 12:50:59

MySQL表級(jí)鎖

2016-02-23 13:16:08

網(wǎng)絡(luò)監(jiān)控網(wǎng)絡(luò)可用性監(jiān)控系統(tǒng)

2018-01-09 09:45:02

秒級(jí)監(jiān)控阿里

2023-12-08 12:04:32

命令Linux骨灰級(jí)

2009-08-09 20:39:11

Linux內(nèi)核虛擬環(huán)境虛擬主機(jī)

2010-09-01 14:10:36

CSS優(yōu)先級(jí)

2022-08-30 08:41:51

日志文件FileBeat配置

2020-06-11 09:00:59

ELKTB級(jí)監(jiān)控

2020-01-13 08:43:20

Elasticsear分布式搜索

2013-03-28 09:35:31

企業(yè)級(jí)系統(tǒng)

2009-09-23 09:37:07

Hibernate緩存

2011-03-24 16:41:24

百卓網(wǎng)絡(luò)百卓上網(wǎng)行為管理

2010-09-09 15:54:00

blockinlineCSS

2012-09-04 13:56:48

LinuxMySQL優(yōu)化
點(diǎn)贊
收藏

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