欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linux查看io命令,linux怎么查看io使用情況

linux查看網(wǎng)絡(luò)io使用率

sar -n DEV

額爾古納網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,額爾古納網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為額爾古納成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的額爾古納做網(wǎng)站的公司定做!

不帶其他參數(shù) 看當(dāng)天的網(wǎng)絡(luò)IO 缺省取樣時(shí)間為1秒,間隔為10分鐘

加 -f /var/log/sa/saxx可察看某日的歷史,xx為當(dāng)月或上月的日期(day of the month)前提是改文件存在

察看即時(shí)IO用sar -n DEV 1 999 表示取樣間隔為1秒,取樣999次

具體字段的含義我就不醉贅述了

linux怎樣查看那個(gè)進(jìn)程占用網(wǎng)絡(luò)io

查看linux進(jìn)程占用端口步驟如下:

lsof -i 用以顯示符合條件的進(jìn)程情況,lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開文件的工具。以root用戶來執(zhí)行l(wèi)sof -i命令,如下圖

lsof -i:端口號(hào),用于查看某一端口的占用情況,比如查看22號(hào)端口使用情況,lsof -i:22,如下圖

netstat -tunlp用于顯示tcp,udp的端口和進(jìn)程等相關(guān)情況,如下圖

netstat -tunlp|grep 端口號(hào),用于查看指定端口號(hào)的進(jìn)程情況,如查看22端口的情況,netstat -tunlp|grep 22,如下圖

Linux 磁盤IO

磁盤結(jié)構(gòu)與數(shù)據(jù)存儲(chǔ)方式, 數(shù)據(jù)是如何存儲(chǔ)的,又通過怎樣的方式被訪問?

機(jī)械硬盤主要由磁盤盤片、磁頭、主軸與傳動(dòng)軸等組成;數(shù)據(jù)就存放在磁盤盤片中

現(xiàn)代硬盤尋道都是采用CHS( Cylinder Head Sector )的方式,硬盤讀取數(shù)據(jù)時(shí),讀寫磁頭沿徑向移動(dòng),移到要讀取的扇區(qū)所在磁道的上方,這段時(shí)間稱為 尋道時(shí)間(seek time) 。 因讀寫磁頭的起始位置與目標(biāo)位置之間的距離不同,尋道時(shí)間也不同 。磁頭到達(dá)指定磁道后,然后通過盤片的旋轉(zhuǎn),使得要讀取的扇區(qū)轉(zhuǎn)到讀寫磁頭的下方,這段時(shí)間稱為 旋轉(zhuǎn)延遲時(shí)間(rotational latencytime) 。然后再讀寫數(shù)據(jù),讀寫數(shù)據(jù)也需要時(shí)間,這段時(shí)間稱為 傳輸時(shí)間(transfer time) 。

固態(tài)硬盤主要由主控芯片、閃存顆粒與緩存組成;數(shù)據(jù)就存放在閃存芯片中

通過主控芯片進(jìn)行尋址, 因?yàn)槭请娦盘?hào)方式, 沒有任何物理結(jié)構(gòu), 所以尋址速度非常快且與數(shù)據(jù)存儲(chǔ)位置無關(guān)

如何查看系統(tǒng)IO狀態(tài)

查看磁盤空間

調(diào)用 open , fwrite 時(shí)到底發(fā)生了什么?

在一個(gè)IO過程中,以下5個(gè)API/系統(tǒng)調(diào)用是必不可少的

Create 函數(shù)用來打開一個(gè)文件,如果該文件不存在,那么需要在磁盤上創(chuàng)建該文件

Open 函數(shù)用于打開一個(gè)指定的文件。如果在 Open 函數(shù)中指定 O_CREATE 標(biāo)記,那么 Open 函數(shù)同樣可以實(shí)現(xiàn) Create 函數(shù)的功能

Clos e函數(shù)用于釋放文件句柄

Write 和 Read 函數(shù)用于實(shí)現(xiàn)文件的讀寫過程

O_SYNC (先寫緩存, 但是需要實(shí)際落盤之后才返回, 如果接下來有讀請(qǐng)求, 可以從內(nèi)存讀 ), write-through

O_DSYNC (D=data, 類似O_SYNC, 但是只同步數(shù)據(jù), 不同步元數(shù)據(jù))

O_DIRECT (直接寫盤, 不經(jīng)過緩存)

O_ASYNC (異步IO, 使用信號(hào)機(jī)制實(shí)現(xiàn), 不推薦, 直接用aio_xxx)

O_NOATIME (讀取的時(shí)候不更新文件 atime(access time))

sync() 全局緩存寫回磁盤

fsync() 特定fd的sync()

fdatasync() 只刷數(shù)據(jù), 不同步元數(shù)據(jù)

mount noatime(全局不記錄atime), re方式(只讀), sync(同步方式)

一個(gè)IO的傳奇一生 這里有一篇非常好的資料,講述了整個(gè)IO過程;

下面簡單記錄下自己的理解的一次常見的Linux IO過程, 想了解更詳細(xì)及相關(guān)源碼,非常推薦閱讀上面的原文

Linux IO體系結(jié)構(gòu)

[站外圖片上傳中...(image-38a7b-1644137945193)]

Superblock 超級(jí)描述了整個(gè)文件系統(tǒng)的信息。為了保證可靠性,可以在每個(gè)塊組中對(duì)superblock進(jìn)行備份。為了避免superblock冗余過多,可以采用稀疏存儲(chǔ)的方式,即在若干個(gè)塊組中對(duì)superblock進(jìn)行保存,而不需要在所有的塊組中都進(jìn)行備份

GDT 組描述符表 組描述符表對(duì)整個(gè)組內(nèi)的數(shù)據(jù)布局進(jìn)行了描述。例如,數(shù)據(jù)塊位圖的起始地址是多少?inode位圖的起始地址是多少?inode表的起始地址是多少?塊組中還有多少空閑塊資源等。組描述符表在superblock的后面

數(shù)據(jù)塊位圖 數(shù)據(jù)塊位圖描述了塊組內(nèi)數(shù)據(jù)塊的使用情況。如果該數(shù)據(jù)塊已經(jīng)被某個(gè)文件使用,那么位圖中的對(duì)應(yīng)位會(huì)被置1,否則該位為0

Inode位圖 Inode位圖描述了塊組內(nèi)inode資源使用情況。如果一個(gè)inode資源已經(jīng)使用,那么對(duì)應(yīng)位會(huì)被置1

Inode表 (即inode資源)和數(shù)據(jù)塊。這兩塊占據(jù)了塊組內(nèi)的絕大部分空間,特別是數(shù)據(jù)塊資源

一個(gè)文件是由inode進(jìn)行描述的。一個(gè)文件占用的數(shù)據(jù)塊block是通過inode管理起來的 。在inode結(jié)構(gòu)中保存了直接塊指針、一級(jí)間接塊指針、二級(jí)間接塊指針和三級(jí)間接塊指針。對(duì)于一個(gè)小文件,直接可以采用直接塊指針實(shí)現(xiàn)對(duì)文件塊的訪問;對(duì)于一個(gè)大文件,需要采用間接塊指針實(shí)現(xiàn)對(duì)文件塊的訪問

最簡單的調(diào)度器。它本質(zhì)上就是一個(gè)鏈表實(shí)現(xiàn)的 fifo 隊(duì)列,并對(duì)請(qǐng)求進(jìn)行簡單的 合并 處理。

調(diào)度器本身并沒有提供任何可以配置的參數(shù)

讀寫請(qǐng)求被分成了兩個(gè)隊(duì)列, 一個(gè)用訪問地址作為索引,一個(gè)用進(jìn)入時(shí)間作為索引,并且采用兩種方式將這些request管理起來;

在請(qǐng)求處理的過程中,deadline算法會(huì)優(yōu)先處理那些訪問地址臨近的請(qǐng)求,這樣可以最大程度的減少磁盤抖動(dòng)的可能性。

只有在有些request即將被餓死的時(shí)候,或者沒有辦法進(jìn)行磁盤順序化操作的時(shí)候,deadline才會(huì)放棄地址優(yōu)先策略,轉(zhuǎn)而處理那些即將被餓死的request

deadline算法可調(diào)整參數(shù)

read_expire : 讀請(qǐng)求的超時(shí)時(shí)間設(shè)置(ms)。當(dāng)一個(gè)讀請(qǐng)求入隊(duì)deadline的時(shí)候,其過期時(shí)間將被設(shè)置為當(dāng)前時(shí)間+read_expire,并放倒fifo_list中進(jìn)行排序

write_expire :寫請(qǐng)求的超時(shí)時(shí)間設(shè)置(ms)

fifo_batch :在順序(sort_list)請(qǐng)求進(jìn)行處理的時(shí)候,deadline將以batch為單位進(jìn)行處理。每一個(gè)batch處理的請(qǐng)求個(gè)數(shù)為這個(gè)參數(shù)所限制的個(gè)數(shù)。在一個(gè)batch處理的過程中,不會(huì)產(chǎn)生是否超時(shí)的檢查,也就不會(huì)產(chǎn)生額外的磁盤尋道時(shí)間。這個(gè)參數(shù)可以用來平衡順序處理和饑餓時(shí)間的矛盾,當(dāng)饑餓時(shí)間需要盡可能的符合預(yù)期的時(shí)候,我們可以調(diào)小這個(gè)值,以便盡可能多的檢查是否有饑餓產(chǎn)生并及時(shí)處理。增大這個(gè)值當(dāng)然也會(huì)增大吞吐量,但是會(huì)導(dǎo)致處理饑餓請(qǐng)求的延時(shí)變長

writes_starved :這個(gè)值是在上述deadline出隊(duì)處理第一步時(shí)做檢查用的。用來判斷當(dāng)讀隊(duì)列不為空時(shí),寫隊(duì)列的饑餓程度是否足夠高,以時(shí)deadline放棄讀請(qǐng)求的處理而處理寫請(qǐng)求。當(dāng)檢查存在有寫請(qǐng)求的時(shí)候,deadline并不會(huì)立即對(duì)寫請(qǐng)求進(jìn)行處理,而是給相關(guān)數(shù)據(jù)結(jié)構(gòu)中的starved進(jìn)行累計(jì),如果這是第一次檢查到有寫請(qǐng)求進(jìn)行處理,那么這個(gè)計(jì)數(shù)就為1。如果此時(shí)writes_starved值為2,則我們認(rèn)為此時(shí)饑餓程度還不足夠高,所以繼續(xù)處理讀請(qǐng)求。只有當(dāng)starved = writes_starved的時(shí)候,deadline才回去處理寫請(qǐng)求??梢哉J(rèn)為這個(gè)值是用來平衡deadline對(duì)讀寫請(qǐng)求處理優(yōu)先級(jí)狀態(tài)的,這個(gè)值越大,則寫請(qǐng)求越被滯后處理,越小,寫請(qǐng)求就越可以獲得趨近于讀請(qǐng)求的優(yōu)先級(jí)

front_merges :當(dāng)一個(gè)新請(qǐng)求進(jìn)入隊(duì)列的時(shí)候,如果其請(qǐng)求的扇區(qū)距離當(dāng)前扇區(qū)很近,那么它就是可以被合并處理的。而這個(gè)合并可能有兩種情況,一個(gè)是向當(dāng)前位置后合并,另一種是向前合并。在某些場景下,向前合并是不必要的,那么我們就可以通過這個(gè)參數(shù)關(guān)閉向前合并。默認(rèn)deadline支持向前合并,設(shè)置為0關(guān)閉

在調(diào)度一個(gè)request時(shí),首先需要選擇一個(gè)一個(gè)合適的cfq_group。Cfq調(diào)度器會(huì)為每個(gè)cfq_group分配一個(gè)時(shí)間片,當(dāng)這個(gè)時(shí)間片耗盡之后,會(huì)選擇下一個(gè)cfq_group。每個(gè)cfq_group都會(huì)分配一個(gè)vdisktime,并且通過該值采用紅黑樹對(duì)cfq_group進(jìn)行排序。在調(diào)度的過程中,每次都會(huì)選擇一個(gè)vdisktime最小的cfq_group進(jìn)行處理。

一個(gè)cfq_group管理了7棵service tree,每棵service tree管理了需要調(diào)度處理的對(duì)象cfq_queue。因此,一旦cfq_group被選定之后,需要選擇一棵service tree進(jìn)行處理。這7棵service tree被分成了三大類,分別為RT、BE和IDLE。這三大類service tree的調(diào)度是按照優(yōu)先級(jí)展開的

通過優(yōu)先級(jí)可以很容易的選定一類Service tree。當(dāng)一類service tree被選定之后,采用service time的方式選定一個(gè)合適的cfq_queue。每個(gè)Service tree是一棵紅黑樹,這些紅黑樹是按照service time進(jìn)行檢索的,每個(gè)cfq_queue都會(huì)維護(hù)自己的service time。分析到這里,我們知道,cfq算法通過每個(gè)cfq_group的vdisktime值來選定一個(gè)cfq_group進(jìn)行服務(wù),在處理cfq_group的過程通過優(yōu)先級(jí)選擇一個(gè)最需要服務(wù)的service tree。通過該Service tree得到最需要服務(wù)的cfq_queue。該過程在 cfq_select_queue 函數(shù)中實(shí)現(xiàn)

一個(gè)cfq_queue被選定之后,后面的過程和deadline算法有點(diǎn)類似。在選擇request的時(shí)候需要考慮每個(gè)request的延遲等待時(shí)間,選擇那種等待時(shí)間最長的request進(jìn)行處理。但是,考慮到磁盤抖動(dòng)的問題,cfq在處理的時(shí)候也會(huì)進(jìn)行順序批量處理,即將那些在磁盤上連續(xù)的request批量處理掉

cfq調(diào)度算法的參數(shù)

back_seek_max :磁頭可以向后尋址的最大范圍,默認(rèn)值為16M

back_seek_penalty :向后尋址的懲罰系數(shù)。這個(gè)值是跟向前尋址進(jìn)行比較的

fifo_expire_async :設(shè)置異步請(qǐng)求的超時(shí)時(shí)間。同步請(qǐng)求和異步請(qǐng)求是區(qū)分不同隊(duì)列處理的,cfq在調(diào)度的時(shí)候一般情況都會(huì)優(yōu)先處理同步請(qǐng)求,之后再處理異步請(qǐng)求,除非異步請(qǐng)求符合上述合并處理的條件限制范圍內(nèi)。當(dāng)本進(jìn)程的隊(duì)列被調(diào)度時(shí),cfq會(huì)優(yōu)先檢查是否有異步請(qǐng)求超時(shí),就是超過fifo_expire_async參數(shù)的限制。如果有,則優(yōu)先發(fā)送一個(gè)超時(shí)的請(qǐng)求,其余請(qǐng)求仍然按照優(yōu)先級(jí)以及扇區(qū)編號(hào)大小來處理

fifo_expire_sync :這個(gè)參數(shù)跟上面的類似,區(qū)別是用來設(shè)置同步請(qǐng)求的超時(shí)時(shí)間

slice_idle :參數(shù)設(shè)置了一個(gè)等待時(shí)間。這讓cfq在切換cfq_queue或service tree的時(shí)候等待一段時(shí)間,目的是提高機(jī)械硬盤的吞吐量。一般情況下,來自同一個(gè)cfq_queue或者service tree的IO請(qǐng)求的尋址局部性更好,所以這樣可以減少磁盤的尋址次數(shù)。這個(gè)值在機(jī)械硬盤上默認(rèn)為非零。當(dāng)然在固態(tài)硬盤或者硬RAID設(shè)備上設(shè)置這個(gè)值為非零會(huì)降低存儲(chǔ)的效率,因?yàn)楣虘B(tài)硬盤沒有磁頭尋址這個(gè)概念,所以在這樣的設(shè)備上應(yīng)該設(shè)置為0,關(guān)閉此功能

group_idle :這個(gè)參數(shù)也跟上一個(gè)參數(shù)類似,區(qū)別是當(dāng)cfq要切換cfq_group的時(shí)候會(huì)等待一段時(shí)間。在cgroup的場景下,如果我們沿用slice_idle的方式,那么空轉(zhuǎn)等待可能會(huì)在cgroup組內(nèi)每個(gè)進(jìn)程的cfq_queue切換時(shí)發(fā)生。這樣會(huì)如果這個(gè)進(jìn)程一直有請(qǐng)求要處理的話,那么直到這個(gè)cgroup的配額被耗盡,同組中的其它進(jìn)程也可能無法被調(diào)度到。這樣會(huì)導(dǎo)致同組中的其它進(jìn)程餓死而產(chǎn)生IO性能瓶頸。在這種情況下,我們可以將slice_idle = 0而group_idle = 8。這樣空轉(zhuǎn)等待就是以cgroup為單位進(jìn)行的,而不是以cfq_queue的進(jìn)程為單位進(jìn)行,以防止上述問題產(chǎn)生

low_latency :這個(gè)是用來開啟或關(guān)閉cfq的低延時(shí)(low latency)模式的開關(guān)。當(dāng)這個(gè)開關(guān)打開時(shí),cfq將會(huì)根據(jù)target_latency的參數(shù)設(shè)置來對(duì)每一個(gè)進(jìn)程的分片時(shí)間(slice time)進(jìn)行重新計(jì)算。這將有利于對(duì)吞吐量的公平(默認(rèn)是對(duì)時(shí)間片分配的公平)。關(guān)閉這個(gè)參數(shù)(設(shè)置為0)將忽略target_latency的值。這將使系統(tǒng)中的進(jìn)程完全按照時(shí)間片方式進(jìn)行IO資源分配。這個(gè)開關(guān)默認(rèn)是打開的

target_latency :當(dāng)low_latency的值為開啟狀態(tài)時(shí),cfq將根據(jù)這個(gè)值重新計(jì)算每個(gè)進(jìn)程分配的IO時(shí)間片長度

quantum :這個(gè)參數(shù)用來設(shè)置每次從cfq_queue中處理多少個(gè)IO請(qǐng)求。在一個(gè)隊(duì)列處理事件周期中,超過這個(gè)數(shù)字的IO請(qǐng)求將不會(huì)被處理。這個(gè)參數(shù)只對(duì)同步的請(qǐng)求有效

slice_sync :當(dāng)一個(gè)cfq_queue隊(duì)列被調(diào)度處理時(shí),它可以被分配的處理總時(shí)間是通過這個(gè)值來作為一個(gè)計(jì)算參數(shù)指定的。公式為: time_slice = slice_sync + (slice_sync/5 * (4 - prio)) 這個(gè)參數(shù)對(duì)同步請(qǐng)求有效

slice_async :這個(gè)值跟上一個(gè)類似,區(qū)別是對(duì)異步請(qǐng)求有效

slice_async_rq :這個(gè)參數(shù)用來限制在一個(gè)slice的時(shí)間范圍內(nèi),一個(gè)隊(duì)列最多可以處理的異步請(qǐng)求個(gè)數(shù)。請(qǐng)求被處理的最大個(gè)數(shù)還跟相關(guān)進(jìn)程被設(shè)置的io優(yōu)先級(jí)有關(guān)

通常在Linux上使用的IO接口是同步方式的,進(jìn)程調(diào)用 write / read 之后會(huì)阻塞陷入到內(nèi)核態(tài),直到本次IO過程完成之后,才能繼續(xù)執(zhí)行,下面介紹的異步IO則沒有這種限制,但是當(dāng)前Linux異步IO尚未成熟

目前Linux aio還處于較不成熟的階段,只能在 O_DIRECT 方式下才能使用(glibc_aio),也就是無法使用默認(rèn)的Page Cache機(jī)制

正常情況下,使用aio族接口的簡要方式如下:

io_uring 是 2019 年 5 月發(fā)布的 Linux 5.1 加入的一個(gè)重大特性 —— Linux 下的全新的異步 I/O 支持,希望能徹底解決長期以來 Linux AIO 的各種不足

io_uring 實(shí)現(xiàn)異步 I/O 的方式其實(shí)是一個(gè)生產(chǎn)者-消費(fèi)者模型:

邏輯卷管理

RAID0

RAID1

RAID5(糾錯(cuò))

條帶化

Linux系統(tǒng)性能調(diào)整:IO過程

Linux的IO調(diào)度

一個(gè)IO的傳奇一生

理解inode

Linux 文件系統(tǒng)是怎么工作的?

Linux中Buffer cache性能問題一探究竟

Asynchronous I/O and event notification on linux

AIO 的新歸宿:io_uring

Linux 文件 I/O 進(jìn)化史(四):io_uring —— 全新的異步 I/O

如何找出Linux系統(tǒng)高IO的思路總結(jié)

前言

I/O Wait是一個(gè)需要使用高級(jí)的工具來debug問題原因,當(dāng)然也有許多基本工具的高級(jí)用法。I/O wait的問題難以定位的原因是:因?yàn)槲覀冇泻芏喙ぞ呖梢愿嬖V你I/O 受限了,但是并沒有告訴你具體是哪個(gè)進(jìn)程引起的。

1. 如何確認(rèn),是否是I/O問題導(dǎo)致系統(tǒng)緩慢

確認(rèn)是否是I/O導(dǎo)致的系統(tǒng)緩慢我們可以使用多個(gè)命令,但是,最簡單的是unix的命令 top

# top

top - 14:31:20 up 35 min, 4 users, load average: 2.25, 1.74, 1.68

Tasks: 71 total, 1 running, 70 sleeping, 0 stopped, 0 zombie

Cpu(s): 2.3%us, 1.7%sy, 0.0%ni, 0.0%id, 96.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 245440k total, 241004k used, 4436k free, 496k buffers

Swap: 409596k total, 5436k used, 404160k free, 182812k cached

從CPU這行,可以發(fā)現(xiàn)CPU的io wait;這里是96.0%。越高就代表CPU用于io wait的資源越多。

2. 找出哪個(gè)磁盤正在被寫入

上邊的top命令從一個(gè)整體上說明了I/O wait,但是并沒有說明是哪塊磁盤影響的,想知道是哪塊磁盤引發(fā)的問題,可以使用另外一個(gè)命令 iostat 命令

$ iostat -x 2 5

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

3.66 0.00 47.64 48.69 0.00 0.00

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

sda 44.50 39.27 117.28 29.32 11220.94 13126.70 332.17 65.77 462.79 9.80 2274.71 7.60 111.41

dm-0 0.00 0.00 83.25 9.95 10515.18 4295.29 317.84 57.01 648.54 16.73 5935.79 11.48 107.02

dm-1 0.00 0.00 57.07 40.84 228.27 163.35 8.00 93.84 979.61 13.94 2329.08 10.93 107.02

iostat 會(huì)每2秒更新一次,一共打印5次信息, -x 的選項(xiàng)是打印出擴(kuò)展信息

第一個(gè)iostat 報(bào)告會(huì)打印出系統(tǒng)最后一次啟動(dòng)后的統(tǒng)計(jì)信息,這也就是說,在多數(shù)情況下,第一個(gè)打印出來的信息應(yīng)該被忽略,剩下的報(bào)告,都是基于上一次間隔的時(shí)間。舉例子來說,這個(gè)命令會(huì)打印5次,第二次的報(bào)告是從第一次報(bào)告出來一個(gè)后的統(tǒng)計(jì)信息,第三次是基于第二次 ,依次類推

所以,一定記?。旱谝粋€(gè)忽略!

在上面的例子中,sda的%utilized 是111.41%,這個(gè)很好的說明了有進(jìn)程正在寫入到sda磁盤中。

除了%utilized 外,我們可以從iostat得到更加豐富的資源信息,例如每毫秒讀寫請(qǐng)求(rrqm/s wrqm/s)),每秒讀寫的((r/s w/s)。在上邊的例子中,我們的項(xiàng)目看起來正在讀寫非常多的信息。這個(gè)對(duì)我們查找相應(yīng)的進(jìn)程非常有用。

3. 找出導(dǎo)致高IO的進(jìn)程

# iotop

Total DISK READ: 8.00 M/s | Total DISK WRITE: 20.36 M/s

TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND

15758 be/4 root 7.99 M/s 8.01 M/s 0.00 % 61.97 % bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

最簡單的方法就是用iotop找出哪個(gè)進(jìn)程用了最多的存儲(chǔ)資源,從上面可以看到是bonnie++。

iotop很好用,但是不是默認(rèn)安裝的。

如果沒有iotop,下面的方式也可以讓你有種方法縮小范圍,盡快找到是哪個(gè)進(jìn)程。

ps 命令對(duì)內(nèi)存和CPU有一個(gè)統(tǒng)計(jì),但是他沒有對(duì)磁盤I/O的統(tǒng)計(jì),雖然他沒有顯示磁盤I/O,但是它顯示進(jìn)行的狀態(tài),我們可以用來知道一個(gè)進(jìn)程是否正在等待I/O

主要的進(jìn)程狀態(tài)有:

PROCESS STATE CODES

D uninterruptible sleep (usually IO)

R running or runnable (on run queue)

S interruptible sleep (waiting for an event to complete)

T stopped, either by a job control signal or because it is being traced.

W paging (not valid since the 2.6.xx kernel)

X dead (should never be seen)

Z defunct ("zombie") process, terminated but not reaped by its parent.

等待I/O的進(jìn)程的狀態(tài)一般是“uninterruptible sleep”,或者“D”,我們可以很容易的查找到正在等待I/O的進(jìn)程

# for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done

D 248 [jbd2/dm-0-8]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

上邊的例子會(huì)循環(huán)的輸出狀態(tài)是D的進(jìn)程,每5秒一次,一共10次

從輸出我們可以知道 bonnie++ 的pid是16528 ,在waiting,bonnie++看起來就是我們想找到的進(jìn)程,但是,只是從它的狀態(tài),我們沒有辦法證明就是bonnie++引起的I/O等待。

為了證明,我們可以可以查看/proc,每個(gè)進(jìn)程目錄下都有一個(gè)叫io的文件,里邊保存這和iotop類似的信息。

# cat /proc/16528/io

rchar: 48752567

wchar: 549961789

syscr: 5967

syscw: 67138

read_bytes: 49020928

write_bytes: 549961728

cancelled_write_bytes: 0

read_bytes和write_bytes是這個(gè)進(jìn)程從磁盤讀寫的字節(jié),在這個(gè)例子中,bonnie++進(jìn)程讀取了46M的數(shù)據(jù)并且寫入了524MB的數(shù)據(jù)到磁盤上。

4. 找出哪個(gè)文件正在被大量寫入

lsof 命令可以展示一個(gè)進(jìn)程打開的所有文件。從這個(gè)列表中,我們可以找到哪個(gè)文件被寫入。

# lsof -p 16528

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

bonnie++ 16528 root cwd DIR 252,0 4096 130597 /tmp

truncated

bonnie++ 16528 root 8u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 9u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 10u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 11u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 12u REG 252,0 501219328 131869 strong/tmp/Bonnie.16528/strong

# df /tmp

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/mapper/workstation-root 7667140 2628608 4653920 37% /

# pvdisplay

--- Physical volume ---

PV Name /dev/sda5

VG Name workstation

PV Size 7.76 GiB / not usable 2.00 MiB

Allocatable yes

PE Size 4.00 MiB

Total PE 1986

Free PE 8

Allocated PE 1978

PV UUID CLbABb-GcLB-l5z3-TCj3-IOK3-SQ2p-RDPW5S

使用pvdisplay可以看到,pv設(shè)備就是/dev/sda5,正是我們前面找到的sda。

參考文檔:

如何查看Linux下進(jìn)程的IO活動(dòng)狀況 00 Hey,Linux

您好,很高興為您解答。服務(wù)器cpu使用率不高,load比較高,所以要查看一下IO。硬盤IO可以通過命令vmstat或iostat獲得(也可以用yum安裝dstat獲得),網(wǎng)絡(luò)IO可以用iftop命令獲取。但是不知道那個(gè)進(jìn)程使用硬盤IO比較高,通過查找沒有找到相關(guān)命令,只好自己寫個(gè)腳本進(jìn)行統(tǒng)計(jì)處理。本腳本在CentOS6下(kernel2.6以上)python2.6測試通過。直接運(yùn)行腳本,默認(rèn)情況下收集3秒鐘數(shù)據(jù),顯示讀寫最高的前三個(gè)進(jìn)程。如用參數(shù)可以使用命令“pythonfhip.py453”,第一個(gè)數(shù)位每次收集讀寫數(shù)據(jù)的間隔秒數(shù),第二個(gè)數(shù)是打印出讀寫最多的n個(gè)進(jìn)程,第三個(gè)為運(yùn)行腳本的次數(shù)。因?yàn)閰?shù)部分寫的比較簡單那,所以用參數(shù)必須3個(gè)全寫。。#!/bin/python#-*-coding:utf-8-*-#Filename:ind_high_io_process#Revision:1.0#Date:2013-3-8#Author:simonzhang#web:###ENDINITINFOimportosimportreimportsysimporttimefromstringimportstrip####sys_proc_path='/proc/'re_find_process_number='^\d+$'#####通過/proc/$pid/io獲取讀寫信息####defcollect_info():_tmp={}re_find_process_dir=re.compile(re_find_process_number)foriinos.listdir(sys_proc_path):ifre_find_process_dir.search(i):#獲得進(jìn)程名process_name=open("%s%s/stat"%(sys_proc_path,i),"rb").read().split("")[1]#讀取io信息rw_io=open("%s%s/io"%(sys_proc_path,i),"rb").readlines()for_infoinrw_io:cut_info=strip(_info).split(':')ifstrip(cut_info[0])=="read_bytes":read_io=int(strip(cut_info[1]))ifstrip(cut_info[0])=="write_bytes":write_io=int(strip(cut_info[1]))_tmp[i]={"name":process_name,"read_bytes":read_io,"write_bytes":write_io}return_tmpdefmain(_sleep_time,_list_num):_sort_read_dict={}_sort_write_dict={}#獲取系統(tǒng)讀寫數(shù)據(jù)process_info_list_frist=collect_info()time.sleep(_sleep_time)process_info_list_second=collect_info()#將讀數(shù)據(jù)和寫數(shù)據(jù)進(jìn)行分組,寫入兩個(gè)字典中forloopinprocess_info_list_second.keys():second_read_v=process_info_list_second[loop]["read_bytes"]second_write_v=process_info_list_second[loop]["write_bytes"]try:frist_read_v=process_info_list_frist[loop]["read_bytes"]except:frist_read_v=0try:frist_write_v=process_info_list_frist[loop]["write_bytes"]except:frist_write_v=0#計(jì)算第二次獲得數(shù)據(jù)域第一次獲得數(shù)據(jù)的差_sort_read_dict[loop]=second_read_v-frist_read_v_sort_write_dict[loop]=second_write_v-frist_write_v#將讀寫數(shù)據(jù)進(jìn)行排序sort_read_dict=sorted(_sort_read_dict.items(),key=lambda_sort_read_dict:_sort_read_dict[1],reverse=True)sort_write_dict=sorted(_sort_write_dict.items(),key=lambda_sort_write_dict:_sort_write_dict[1],reverse=True)#打印統(tǒng)計(jì)結(jié)果print"pidprocessread(bytes)pidprocesswrite(btyes)"for_numinrange(_list_num):read_pid=sort_read_dict[_num][0]write_pid=sort_write_dict[_num][0]res="%s"%read_pidres+=""*(8-len(read_pid))+process_info_list_second[read_pid]["name"]res+=""*(12-len(process_info_list_second[read_pid]["name"]))+"%s"%sort_read_dict[_num][1]res+=""*(12-len("%s"%sort_read_dict[_num][1]))+write_pidres+=""*(8-len(write_pid))+process_info_list_second[write_pid]["name"]res+=""*(12-len("%s"%process_info_list_second[write_pid]["name"]))+"%s"%sort_write_dict[_num][1]printresprint"\n"*1if__name__=='__main__':try:_sleep_time=sys.argv[1]except:_sleep_time=3try:_num=sys.argv[2]except:_num=3try:loop=sys.argv[3]except:loop=1foriinrange(int(loop)):main(int(_sleep_time),int(_num))如若滿意,請(qǐng)點(diǎn)擊【采納答案】,如若還有問題,請(qǐng)點(diǎn)擊【追問】希望我的回答對(duì)您有所幫助,望采納!~O(∩_∩)O~

linux系統(tǒng)如何查看網(wǎng)絡(luò)IO?

首先 、用top命令查看

top - 16:15:05 up 6 days, ?6:25, ?2 users, ?load average: 1.45, 1.77, 2.14

Tasks: 147 total, ? 1 running, 146 sleeping, ? 0 stopped, ? 0 zombie

Cpu(s): ?0.2% us, ?0.2% sy, ?0.0% ni, 86.9% id, 12.6% wa, ?0.0% hi, ?0.0% si

Mem: ? 4037872k total, ?4003648k used, ? ?34224k free, ? ? 5512k buffers

Swap: ?7164948k total, ? 629192k used, ?6535756k free, ?3511184k cached

查看12.6% wa

IO等待所占用的CPU時(shí)間的百分比,高過30%時(shí)IO壓力高

其次、 用iostat -x 1 10

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

0.00 ? ? ? 0.00 ? ? 0.25 ? ?33.46 ? ?66.29

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

sda ? ? ? ? ?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

sdb ? ? ? ? ?0.00 ? 1122 ?17.00 ?9.00 ?192.00 9216.00 ? ?96.00 ?4608.00 ? 123.79 ? 137.23 1033.43 ?13.17 100.10

sdc ? ? ? ? ?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

查看%util 100.10 %idle 66.29

如果 %util 接近 100%,說明產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸。

idle小于70% IO壓力就較大了,一般讀取速度有較多的wait.

同時(shí)可以結(jié)合vmstat 查看查看b參數(shù)(等待資源的進(jìn)程數(shù))

vmstat -1

如果你想對(duì)硬盤做一個(gè)IO負(fù)荷的壓力測試可以用如下命令

time dd if=/dev/zero bs=1M count=2048 of=direct_2G

此命令為在當(dāng)前目錄下新建一個(gè)2G的文件

我們在新建文件夾的同時(shí)來測試IO的負(fù)荷情況。

網(wǎng)站名稱:linux查看io命令,linux怎么查看io使用情況
當(dāng)前地址:http://chinadenli.net/article28/heeicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、、建站公司、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)