国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何監(jiān)測(cè)Linux進(jìn)程的實(shí)時(shí)IO讀寫(xiě)情況

運(yùn)維 系統(tǒng)運(yùn)維
怎樣實(shí)時(shí)查看Linux進(jìn)程的實(shí)時(shí)IO讀寫(xiě)情況?Linux Kernel 2.6.20 以上的內(nèi)核支持進(jìn)程 IO 統(tǒng)計(jì),可以用類似 iotop 這樣的工具來(lái)監(jiān)測(cè)每個(gè)進(jìn)程對(duì) IO 操作的情況。對(duì)于2.6.20以下的內(nèi)核,本文提供了一個(gè)簡(jiǎn)單的Python腳本。

Linux Kernel 2.6.20 以上的內(nèi)核支持進(jìn)程 IO 統(tǒng)計(jì),可以用類似 iotop 這樣的工具來(lái)監(jiān)測(cè)每個(gè)進(jìn)程對(duì) IO 操作的情況,就像用 top 來(lái)實(shí)時(shí)查看進(jìn)程內(nèi)存、CPU 等占用情況那樣。但是對(duì)于 2.6.20 以下的 Linux 內(nèi)核版本就沒(méi)那么幸運(yùn)了。筆者寫(xiě)了一個(gè)簡(jiǎn)單的 Python 腳本用來(lái)在 linux kernel < 2.6.20 下打印進(jìn)程 IO 狀況。

Kernel < 2.6.20

這個(gè)腳本的想法很簡(jiǎn)單,把 dmesg 的結(jié)果重定向到一個(gè)文件后再解析出來(lái),每隔1秒鐘打印一次進(jìn)程 IO 讀寫(xiě)的統(tǒng)計(jì)信息,執(zhí)行這個(gè)腳本需要 root:

  1. #!/usr/bin/python  
  2. # Monitoring per-process disk I/O activity  
  3. # written by http://www.vpsee.com   
  4.  
  5. import sys, os, time, signal, re  
  6.  
  7. class DiskIO:  
  8.     def __init__(self, pname=None, pid=None, reads=0, writes=0):  
  9.         self.pname = pname  
  10.         self.pid = pid  
  11.         self.reads = 0 
  12.         self.writes = 0 
  13.  
  14. def main():  
  15.     argc = len(sys.argv)  
  16.     if argc != 1:  
  17.         print "usage: ./iotop" 
  18.         sys.exit(0)  
  19.  
  20.     if os.getuid() != 0:  
  21.         print "must be run as root" 
  22.         sys.exit(0)  
  23.  
  24.     signal.signal(signal.SIGINT, signal_handler)  
  25.     os.system('echo 1 > /proc/sys/vm/block_dump')  
  26.     print "TASK              PID       READ      WRITE" 
  27.     while True:  
  28.         os.system('dmesg -c > /tmp/diskio.log')  
  29.         l = []  
  30.         f = open('/tmp/diskio.log''r')  
  31.         line = f.readline()  
  32.         while line:  
  33.             m = re.match(\  
  34.                 '^(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+)', line)  
  35.             if m != None:  
  36.                 if not l:  
  37.                     l.append(DiskIO(m.group(1), m.group(2)))  
  38.                     line = f.readline()  
  39.                     continue 
  40.                 found = False 
  41.                 for item in l:  
  42.                     if item.pid == m.group(2):  
  43.                         found = True 
  44.                         if m.group(3) == "READ":  
  45.                             item.reads = item.reads + 1 
  46.                         elif m.group(3) == "WRITE":  
  47.                             item.writes = item.writes + 1 
  48.                 if not found:  
  49.                     l.append(DiskIO(m.group(1), m.group(2)))  
  50.             line = f.readline()  
  51.         time.sleep(1)  
  52.         for item in l:  
  53.             print "%-10s %10s %10d %10d" % \  
  54.                 (item.pname, item.pid, item.reads, item.writes)  
  55.  
  56. def signal_handler(signal, frame):  
  57.     os.system('echo 0 > /proc/sys/vm/block_dump')  
  58.     sys.exit(0)  
  59.  
  60. if __name__=="__main__":  
  61.     main()  
  62.  

Kernel >= 2.6.20

如果想用 iotop 來(lái)實(shí)時(shí)查看進(jìn)程 IO 活動(dòng)狀況的話,需要下載和升級(jí)新內(nèi)核(2.6.20 或以上版本)。編譯新內(nèi)核時(shí)需要打開(kāi) TASK_DELAY_ACCT 和 TASK_IO_ACCOUNTING 選項(xiàng)。解壓內(nèi)核后進(jìn)入配置界面:

# tar jxvf linux-2.6.30.5.tar.bz2
# mv linux-2.6.30.5 /usr/src/
# cd /usr/src/linux-2.6.30.5

# make menuconfig

選擇 Kernel hacking –> Collect scheduler debugging info 和 Collect scheduler statistics,保存內(nèi)核后編譯內(nèi)核:

# make; make modules; make modules_install; make install

修改 grub,確認(rèn)能正確啟動(dòng)新內(nèi)核:

# vi /boot/grub/menu.lst

出了新內(nèi)核外,iotop 還需要 Python 2.5 或以上才能運(yùn)行,所以如果當(dāng)前 Python 是 2.4 的話需要下載和安裝最新的 Python 包。這里使用源代碼編譯安裝:

# tar jxvf Python-2.6.2.tar.bz2
# cd Python-2.6.2
# ./configure
# make; make install

別忘了下載 setuptools:

# mv setuptools-0.6c9-py2.6.egg.sh setuptools-0.6c9-py2.6.egg
# sh setuptools-0.6c9-py2.6.egg

有網(wǎng)友對(duì)以上腳本提出問(wèn)題,問(wèn)到 WRITE 為什么會(huì)出現(xiàn)是 0 的情況,這是個(gè)好問(wèn)題,筆者在這里好好解釋一下。首先看看我們?cè)趺礃硬拍軐?shí)時(shí)監(jiān)測(cè)不同進(jìn)程的 IO 活動(dòng)狀況。

block_dump

Linux 內(nèi)核里提供了一個(gè) block_dump 參數(shù)用來(lái)把 block 讀寫(xiě)(WRITE/READ)狀況 dump 到日志里,這樣可以通過(guò) dmesg 命令來(lái)查看,具體操作步驟是:

# sysctl vm.block_dump=1
or
# echo 1 > /proc/sys/vm/block_dump

然后就可以通過(guò) dmesg 就可以觀察到各個(gè)進(jìn)程 IO 活動(dòng)的狀況了:

# dmesg -c
kjournald(542): WRITE block 222528 on dm-0
kjournald(542): WRITE block 222552 on dm-0
bash(18498): dirtied inode 5892488 (ld-linux-x86-64.so.2) on dm-0
bash(18498): dirtied inode 5892482 (ld-2.5.so) on dm-0
dmesg(18498): dirtied inode 11262038 (ld.so.cache) on dm-0
dmesg(18498): dirtied inode 5892496 (libc.so.6) on dm-0
dmesg(18498): dirtied inode 5892489 (libc-2.5.so) on dm-0

問(wèn)題

一位細(xì)心的網(wǎng)友提到這樣一個(gè)問(wèn)題:為什么會(huì)有 WRITE block 0 的情況出現(xiàn)呢?筆者跟蹤了一段時(shí)間,發(fā)現(xiàn)確實(shí)有 WRITE 0 的情況出現(xiàn),比如:

# dmesg -c
...
pdflush(23123): WRITE block 0 on sdb1
pdflush(23123): WRITE block 16 on sdb1
pdflush(23123): WRITE block 104 on sdb1
pdflush(23123): WRITE block 40884480 on sdb1
...

答案

原來(lái)我們把 WRITE block 0,WRITE block 16, WRITE block 104 這里面包含的數(shù)字理解錯(cuò)了,這些數(shù)字不是代表寫(xiě)了多少 blocks,是代表寫(xiě)到哪個(gè) block,為了尋找真相,筆者追到 Linux 2.6.18 內(nèi)核代碼里,在 ll_rw_blk.c 里找到了答案:

$ vi linux-2.6.18/block/ll_rw_blk.c

  1. void submit_bio(int rw, struct bio *bio)  
  2. {  
  3.         int count = bio_sectors(bio);  
  4.  
  5.         BIO_BUG_ON(!bio->bi_size);  
  6.         BIO_BUG_ON(!bio->bi_io_vec);  
  7.         bio->bi_rw |= rw;  
  8.         if (rw & WRITE)  
  9.                 count_vm_events(PGPGOUT, count);  
  10.         else 
  11.                 count_vm_events(PGPGIN, count);  
  12.  
  13.         if (unlikely(block_dump)) {  
  14.                 char b[BDEVNAME_SIZE];  
  15.                 printk(KERN_DEBUG "%s(%d): %s block %Lu on %s\n",  
  16.                         current->comm, current->pid,  
  17.                         (rw & WRITE) ? "WRITE" : "READ",  
  18.                         (unsigned long long)bio->bi_sector,  
  19.                         bdevname(bio->bi_bdev,b));  
  20.         }  
  21.  
  22.         generic_make_request(bio);  
  23. }  

很明顯從上面代碼可以看出 WRITE block 0 on sdb1,這里的 0 是 bio->bi_sector,是寫(xiě)到哪個(gè) sector,不是 WRITE 了多少 blocks 的意思。還有,如果 block 設(shè)備被分成多個(gè)區(qū)的話,這個(gè) bi_sector(sector number)是從這個(gè)分區(qū)開(kāi)始計(jì)數(shù),比如 block 0 on sdb1 就是 sdb1 分區(qū)上的第0個(gè) sector 開(kāi)始。

原文地址:http://www.vpsee.com/2010/07/monitoring-process-io-activity-on-linux-with-block_dump/

【編輯推薦】

  1. Linux技巧:多核下綁定硬件/進(jìn)程到不同CPU
  2. 重置CentOS-root密碼的簡(jiǎn)便方法
  3. Linux定時(shí)執(zhí)行任務(wù)命令概述:at和crontab
責(zé)任編輯:yangsai 來(lái)源: vpsee.com
相關(guān)推薦

2010-12-22 13:17:47

Linux性能監(jiān)測(cè)磁盤IO

2011-11-08 21:51:43

Linux 監(jiān)控 IO

2023-08-21 14:18:48

操作系統(tǒng)Linux

2017-01-18 21:57:14

2019-08-15 15:00:29

監(jiān)測(cè)Linux性能NetData

2010-06-02 11:06:15

Linux 內(nèi)存監(jiān)控

2018-11-01 10:59:52

Linux內(nèi)存進(jìn)程

2018-08-27 11:18:01

存儲(chǔ)

2021-11-29 20:44:31

Linux內(nèi)存進(jìn)程

2015-10-13 08:59:59

合作組織實(shí)時(shí)Linux

2020-12-01 08:00:00

Linux服務(wù)器系統(tǒng)

2022-04-23 16:30:22

Linux磁盤性能

2012-03-31 13:55:15

Java

2020-04-29 15:10:16

Linux命令進(jìn)程

2015-06-25 12:41:53

實(shí)時(shí) Node應(yīng)用性能監(jiān)測(cè)

2019-06-05 09:14:28

LinuxIO監(jiān)控分析

2011-09-08 09:24:34

Mac Widget監(jiān)測(cè)系統(tǒng)iStatpro

2024-12-10 13:17:41

2017-05-26 12:59:48

Linux端口

2021-08-11 10:41:50

博睿數(shù)據(jù)IT運(yùn)維
點(diǎn)贊
收藏

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

久久奇米777| 成人免费视频播放| 中文字幕一区二区精品| 国产理论片免费观看| 久久久久在线| 成人免费在线视频网址| 国产95亚洲| 亚洲欧洲中文天堂| 福利在线免费| 国产精品女上位| 日韩在线观看电影完整版高清免费| 秋霞a级毛片在线看| 亚洲男女一区二区三区| 一本久久a久久精品vr综合| 999国产精品| 欧美精品www| 怡红院成人在线| 伊人av综合网| 欧美视频第一| 美女视频久久黄| 99久久免费精品国产72精品九九| 日韩亚洲欧美中文高清在线| 日本不卡网站| 欧美一区二区三区男人的天堂| 国产小视频免费在线网址| 色8久久精品久久久久久蜜| 日日噜噜噜夜夜爽爽狠狠视频| 亚洲欧美视频在线观看视频| 国产免费福利网站| 狠狠躁夜夜躁人人爽超碰91| 欧美最顶级a∨艳星| 欧美日韩情趣电影| 成人超碰在线| 色噜噜久久综合伊人一本| 国产欧美视频在线| 国产精品99久久久久久人| 成人综合一区| 亚洲制服中文| 久久亚洲一区二区三区四区| 日本aⅴ中文| 亚洲精品乱码久久久久久按摩观| 成人网ww555视频免费看| 97免费视频在线播放| 国内精品福利| 日韩第一页在线观看| 99re视频这里只有精品| 特黄特色特刺激视频免费播放| 欧美美女喷水视频| 亚洲精品18| 日本午夜一区二区三区| 91小视频在线观看| 亚洲mv在线| 日韩欧美一二三| 免费视频一区三区| 国产91视频一区| 色噜噜狠狠成人中文综合| 国产成年精品| 亚洲视频精品一区| 亚洲电影在线免费观看| 7777kkk亚洲综合欧美网站| 欧美一级高清免费| 成人深夜在线观看| 日韩亚洲视频在线| 国产精品伦理久久久久久| 欧美xingq一区二区| 日韩精品不卡| 先锋av资源在线| 久久奇米777| 国语自产偷拍精品视频偷| 精产国产伦理一二三区| 麻豆一区二区| 亚洲综合男人的天堂| 色综合天天综合网国产成人网 | 水蜜桃一区二区| 亚洲www啪成人一区二区麻豆| www.com.cn成人| 欧美久久久久久久| 日韩欧美国产小视频| 男人的天堂成人在线| 永久免费av片在线观看全网站| 久久久久久久久久久av| 99热在这里有精品免费| 精品久久99| 1024av视频| 深夜福利91大全| 中文字幕在线不卡视频| 国内精品偷拍| 青春有你2免费观看完整版在线播放高清 | 麻豆成人91精品二区三区| 91福利在线视频| 99久久久精品免费观看国产| 日韩欧美在线视频免费观看| 日韩午夜免费视频| 国产黄在线播放| 正义之心1992免费观看全集完整版| 日韩高清中文字幕| av亚洲精华国产精华精华| 久久久免费毛片| 三级视频在线播放| 韩国日本美国免费毛片| 中文字幕欧美国内| 一区二区91| 日韩高清国产精品| 日本久久一区二区三区| 精品国产一区二区三区久久久樱花| 国产经品一区二区| 日本一不卡视频| 超碰在线公开超碰在线| 国内精品一区二区三区四区| 久久一级电影| 全部a∨一极品视觉盛宴| 亚洲欧美在线播放| 亚洲一区二区三区四区中文| 天涯成人国产亚洲精品一区av| 亚洲第一在线| 国产成人免费av一区二区午夜| fc2人成共享视频在线观看| 国产精品一区久久| 精品99久久久久久| 国产精品久久久久久久久免费桃花| 成人免费电影网址| 国产素人视频在线观看| 伊人久久久久久久久久久久久| 五月婷婷之综合激情| 国产欧美日韩综合精品二区| 久久久国产一区二区| 欧美人妇做爰xxxⅹ性高电影 | xxx.xxx欧美| 一级香蕉视频在线观看| 亚洲aⅴ男人的天堂在线观看| 九九热视频这里只有精品| 亚洲精品资源在线| 制服丝袜亚洲播放| 欧美少妇xxx| 亚洲福中文字幕伊人影院| 国产女人aaa级久久久级| 福利一区二区在线观看| 亚洲欧美日韩视频二区| 天天精品视频| 国产精品二区不卡| 欧美高清视频手机在在线| 免费黄色成人| 影音先锋成人在线电影| 欧美女优在线视频| 成人国产精品一级毛片视频| 老汉色老汉首页av亚洲| 狠狠操综合网| 欧美区一区二| 奶水喷射视频一区| 国产一区二区三区精品视频 | 国产精品久久久久9999爆乳| 亚洲欧美一二三| 精品少妇一区二区三区在线| 黄色一级视频片| 99re精彩视频| 午夜男人视频在线观看| www.成人.com| 2020av在线| 清纯唯美亚洲经典中文字幕| 婷婷伊人综合| 一本久道久久久| 99国产精品99久久久久久| 18成人在线视频| 日本久久电影网| 亚洲欧美日韩一区在线| 国产精品视频自在线| yy111111少妇影院日韩夜片| 亚洲一区二区在| av在线www| 国产三级在线| 波多野结衣精品| 亚洲精品一区av| 亚洲小说欧美另类社区| av电影一区二区| 欧美色视频日本高清在线观看| 亚洲精品一区二区三区蜜桃下载 | 国产午夜精品一区理论片| 少妇一区视频| 精品91久久久久| 欧美国产一区二区| 精品少妇一区二区三区在线播放| 综合激情国产一区| 国产一区二区三区无遮挡| 九一国产精品视频| а天堂中文在线官网| 成人看片黄a免费看视频| 热久久久久久久| 亚洲电影一区二区三区| 在线观看国产精品淫| 欧美一区二区三区在线播放| 久草在线官网| 韩国女主播一区二区三区| 成人丝袜高跟foot| 日韩风俗一区 二区| 粉嫩高清一区二区三区精品视频| 毛片一区二区三区四区| wwwwxxxx在线观看| 99伊人成综合| 欧美精品少妇一区二区三区| 国产在线一区二区三区欧美|