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

linux文件io命令,linux文件io操作

linux中,有哪些命令是比較好用的呢?

1.列出文件清單命令:ls

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)、網(wǎng)站重做改版、錫山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為錫山等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

ls命令能夠列出當(dāng)前目錄下的所有內(nèi)容。ls 命令的執(zhí)行方式為:

# ls [-選項(xiàng)] [文件名或者目錄名]

進(jìn)入到Linux命令行中后,我們至少要知道當(dāng)前所處的位置有哪些內(nèi)容,這些信息就可以使用ls命令來(lái)獲得。

在Linux中,ls命令是最常使用的命令之一,因?yàn)樵诿钚邢乱S時(shí)查看目錄內(nèi)容。如果不加任何選項(xiàng)的話,ls命令僅列出當(dāng)前目錄下的文件和目錄名,例如,想要查看/etc目錄下的內(nèi)容,可以使用下列命令:

# ls /etc

如果想要列出當(dāng)前目錄下所有文件,則可以使用下列命令:

# ls -a

2、cat命令

功能:在標(biāo)準(zhǔn)輸出上顯示文件。

語(yǔ)法:cat [-vTEuAte] 文件

例子: cat example.txt

cat -A exam2.txt

cat file1 file2 file2

3、more命令

功能:在終端屏幕按屏顯示文本文件。

語(yǔ)法: more [-pcdls] 文件

例子: more example.c

more -dc example.c

more -c -10 example.c

4、less命令

less命令的功能幾乎和more命令一樣,也是用來(lái)按頁(yè)顯示文件,不同之處在于less命令在顯示文件時(shí)允許用戶(hù)既

可以向前又可以向后翻閱文件。

5、head命令

功能:顯示指定文件的前若干行。缺省設(shè)置為顯示10行

語(yǔ)法:head [-n] 文件

例子: head example.c

head -3 example.c

6、tail命令

功能:顯示指定文件的末尾若干行。缺省設(shè)置為顯示10行

語(yǔ)法:tail [+ / - num ] [參數(shù)] 文件

+num 從第num行以后開(kāi)始顯示。- num 從距文件尾num行處開(kāi)始顯示。

例子: tail example.c

tail -4 example.c

7、grep、fgrep和egrep命令

功能:

這組命令以指定模式搜索文件,并通知用戶(hù)在什么文件中搜索到與指定的模式匹配的字符串,并打印出所有包含該字符串的文本行,在該文本行的最前面是該行所在的文件名。grep命令一次只能搜索一個(gè)指定的模式;egrep命令檢索擴(kuò)展的正則表達(dá)式(包括表達(dá)式組和可選項(xiàng));fgrep命令檢索固定字符串,它不識(shí)別正則表達(dá)式,是快速搜索命令。

語(yǔ)法:

grep [-EFbcihlnvxef] [查找模式] [文件名1,文件名2,……]

egrep [選項(xiàng)] [查找模式] [文件名1,文件名2,……]

fgrep [選項(xiàng)] [查找模式] [文件名1,文件名2,……]

例子: grep "text file" example

grep data *

grep goto *.c

Linux 磁盤(pán)IO

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

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

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

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

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

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

查看磁盤(pán)空間

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

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

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

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

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

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

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

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

O_DIRECT (直接寫(xiě)盤(pán), 不經(jīng)過(guò)緩存)

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

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

sync() 全局緩存寫(xiě)回磁盤(pán)

fsync() 特定fd的sync()

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

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

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

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

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

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

Superblock 超級(jí)描述了整個(gè)文件系統(tǒng)的信息。為了保證可靠性,可以在每個(gè)塊組中對(duì)superblock進(jìn)行備份。為了避免superblock冗余過(guò)多,可以采用稀疏存儲(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是通過(guò)inode管理起來(lái)的 。在inode結(jié)構(gòu)中保存了直接塊指針、一級(jí)間接塊指針、二級(jí)間接塊指針和三級(jí)間接塊指針。對(duì)于一個(gè)小文件,直接可以采用直接塊指針實(shí)現(xiàn)對(duì)文件塊的訪問(wèn);對(duì)于一個(gè)大文件,需要采用間接塊指針實(shí)現(xiàn)對(duì)文件塊的訪問(wèn)

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

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

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

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

只有在有些request即將被餓死的時(shí)候,或者沒(méi)有辦法進(jìn)行磁盤(pá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í)候,其過(guò)期時(shí)間將被設(shè)置為當(dāng)前時(shí)間+read_expire,并放倒fifo_list中進(jìn)行排序

write_expire :寫(xiě)請(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處理的過(guò)程中,不會(huì)產(chǎn)生是否超時(shí)的檢查,也就不會(huì)產(chǎn)生額外的磁盤(pán)尋道時(shí)間。這個(gè)參數(shù)可以用來(lái)平衡順序處理和饑餓時(shí)間的矛盾,當(dāng)饑餓時(shí)間需要盡可能的符合預(yù)期的時(shí)候,我們可以調(diào)小這個(gè)值,以便盡可能多的檢查是否有饑餓產(chǎn)生并及時(shí)處理。增大這個(gè)值當(dāng)然也會(huì)增大吞吐量,但是會(huì)導(dǎo)致處理饑餓請(qǐng)求的延時(shí)變長(zhǎng)

writes_starved :這個(gè)值是在上述deadline出隊(duì)處理第一步時(shí)做檢查用的。用來(lái)判斷當(dāng)讀隊(duì)列不為空時(shí),寫(xiě)隊(duì)列的饑餓程度是否足夠高,以時(shí)deadline放棄讀請(qǐng)求的處理而處理寫(xiě)請(qǐng)求。當(dāng)檢查存在有寫(xiě)請(qǐng)求的時(shí)候,deadline并不會(huì)立即對(duì)寫(xiě)請(qǐng)求進(jìn)行處理,而是給相關(guān)數(shù)據(jù)結(jié)構(gòu)中的starved進(jìn)行累計(jì),如果這是第一次檢查到有寫(xiě)請(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才回去處理寫(xiě)請(qǐng)求??梢哉J(rèn)為這個(gè)值是用來(lái)平衡deadline對(duì)讀寫(xiě)請(qǐng)求處理優(yōu)先級(jí)狀態(tài)的,這個(gè)值越大,則寫(xiě)請(qǐng)求越被滯后處理,越小,寫(xiě)請(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)前位置后合并,另一種是向前合并。在某些場(chǎng)景下,向前合并是不必要的,那么我們就可以通過(guò)這個(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,并且通過(guò)該值采用紅黑樹(shù)對(duì)cfq_group進(jìn)行排序。在調(diào)度的過(guò)程中,每次都會(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被分成了三大類(lèi),分別為RT、BE和IDLE。這三大類(lèi)service tree的調(diào)度是按照優(yōu)先級(jí)展開(kāi)的

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

一個(gè)cfq_queue被選定之后,后面的過(guò)程和deadline算法有點(diǎn)類(lèi)似。在選擇request的時(shí)候需要考慮每個(gè)request的延遲等待時(shí)間,選擇那種等待時(shí)間最長(zhǎng)的request進(jìn)行處理。但是,考慮到磁盤(pán)抖動(dòng)的問(wèn)題,cfq在處理的時(shí)候也會(huì)進(jìn)行順序批量處理,即將那些在磁盤(pá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í),就是超過(guò)fifo_expire_async參數(shù)的限制。如果有,則優(yōu)先發(fā)送一個(gè)超時(shí)的請(qǐng)求,其余請(qǐng)求仍然按照優(yōu)先級(jí)以及扇區(qū)編號(hào)大小來(lái)處理

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

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

group_idle :這個(gè)參數(shù)也跟上一個(gè)參數(shù)類(lèi)似,區(qū)別是當(dāng)cfq要切換cfq_group的時(shí)候會(huì)等待一段時(shí)間。在cgroup的場(chǎng)景下,如果我們沿用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)程也可能無(wú)法被調(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)行,以防止上述問(wèn)題產(chǎn)生

low_latency :這個(gè)是用來(lái)開(kāi)啟或關(guān)閉cfq的低延時(shí)(low latency)模式的開(kāi)關(guān)。當(dāng)這個(gè)開(kāi)關(guān)打開(kāi)時(shí),cfq將會(huì)根據(jù)target_latency的參數(shù)設(shè)置來(lái)對(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è)開(kāi)關(guān)默認(rèn)是打開(kāi)的

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

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

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

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

slice_async_rq :這個(gè)參數(shù)用來(lái)限制在一個(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過(guò)程完成之后,才能繼續(xù)執(zhí)行,下面介紹的異步IO則沒(méi)有這種限制,但是當(dāng)前Linux異步IO尚未成熟

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

正常情況下,使用aio族接口的簡(jiǎn)要方式如下:

io_uring 是 2019 年 5 月發(fā)布的 Linux 5.1 加入的一個(gè)重大特性 —— Linux 下的全新的異步 I/O 支持,希望能徹底解決長(zhǎng)期以來(lái) 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過(guò)程

Linux的IO調(diào)度

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

理解inode

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

Linux中Buffer cache性能問(wèn)題一探究竟

Asynchronous I/O and event notification on linux

AIO 的新歸宿:io_uring

Linux 文件 I/O 進(jìn)化史(四):io_uring —— 全新的異步 I/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í)間的百分比,高過(guò)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%,說(shuō)明產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿(mǎn)負(fù)荷,該磁盤(pán)可能存在瓶頸。

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

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

vmstat -1

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

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

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

我們?cè)谛陆ㄎ募A的同時(shí)來(lái)測(cè)試IO的負(fù)荷情況。

Linux IO詳解

1.?用戶(hù)空間與內(nèi)核空間

2.?進(jìn)程切換

3.?進(jìn)程的阻塞

4.?文件描述符FD

5.?緩存 I/O

1. 阻塞 I/O(Blocking IO)

2.?非阻塞 I/O(NonBlocking IO)

3.?I/O 多路復(fù)用

4.?異步 I/O(Asynchronous IO)

1.?select

2. poll

3. epoll

linux查看磁盤(pán)io的幾種方法

linux查看磁盤(pán)io的幾種方法

怎樣才能快速的定位到并發(fā)高是由于磁盤(pán)io開(kāi)銷(xiāo)大呢?可以通過(guò)三種方式:

第一種:用 top 命令 中的cpu 信息觀察

Top可以看到的cpu信息有:

Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si

具體的解釋如下:

Tasks: 29 total 進(jìn)程總數(shù)

1 running 正在運(yùn)行的進(jìn)程數(shù)

28 sleeping 睡眠的進(jìn)程數(shù)

0 stopped 停止的進(jìn)程數(shù)

0 zombie 僵尸進(jìn)程數(shù)

Cpu(s):

0.3% us 用戶(hù)空間占用CPU百分比

1.0% sy 內(nèi)核空間占用CPU百分比

0.0% ni 用戶(hù)進(jìn)程空間內(nèi)改變過(guò)優(yōu)先級(jí)的進(jìn)程占用CPU百分比

98.7% id 空閑CPU百分比

0.0% wa 等待輸入輸出的CPU時(shí)間百分比

0.0% hi

0.0% si

0.0% wa 的百分比可以大致的體現(xiàn)出當(dāng)前的磁盤(pán)io請(qǐng)求是否頻繁。如果 wa的數(shù)量比較大,說(shuō)明等待輸入輸出的的io比較多。

第二種:用vmstat

vmstat 命令報(bào)告關(guān)于線程、虛擬內(nèi)存、磁盤(pán)、陷阱和 CPU 活動(dòng)的統(tǒng)計(jì)信息。由 vmstat 命令生成的報(bào)告可以用于平衡系統(tǒng)負(fù)載活動(dòng)。系統(tǒng)范圍內(nèi)的這些統(tǒng)計(jì)信息(所有的處理器中)都計(jì)算出以百分比表示的平均值,或者計(jì)算其總和。

輸入命令:

vmstat 2 5

如果發(fā)現(xiàn)等待的進(jìn)程和處在非中斷睡眠狀態(tài)的進(jìn)程數(shù)非常多,并且發(fā)送到塊設(shè)備的塊數(shù)和從塊設(shè)備接收到的塊數(shù)非常大,那就說(shuō)明磁盤(pán)io比較多。

vmstat參數(shù)解釋?zhuān)?/p>

Procs

r: 等待運(yùn)行的進(jìn)程數(shù) b: 處在非中斷睡眠狀態(tài)的進(jìn)程數(shù) w: 被交換出去的可運(yùn)行的進(jìn)程數(shù)。此數(shù)由 linux 計(jì)算得出,但 linux 并不耗盡交換空間

Memory

swpd: 虛擬內(nèi)存使用情況,單位:KB

free: 空閑的內(nèi)存,單位KB

buff: 被用來(lái)做為緩存的內(nèi)存數(shù),單位:KB

Swap

si: 從磁盤(pán)交換到內(nèi)存的交換頁(yè)數(shù)量,單位:KB/秒

so: 從內(nèi)存交換到磁盤(pán)的交換頁(yè)數(shù)量,單位:KB/秒

IO

bi: 發(fā)送到塊設(shè)備的塊數(shù),單位:塊/秒

bo: 從塊設(shè)備接收到的塊數(shù),單位:塊/秒

System

in: 每秒的中斷數(shù),包括時(shí)鐘中斷

cs: 每秒的環(huán)境(上下文)切換次數(shù)

CPU

按 CPU 的總使用百分比來(lái)顯示

us: CPU 使用時(shí)間

sy: CPU 系統(tǒng)使用時(shí)間

id: 閑置時(shí)間

準(zhǔn)測(cè)

更多vmstat使用信息

第二種:用iostat

安裝:

Iostat 是 sysstat 工具集的一個(gè)工具,需要安裝。

Centos的安裝方式是:

yum install sysstat

Ubuntu的安裝方式是:

aptitude install sysstat

使用:

iostat -dx 顯示磁盤(pán)擴(kuò)展信息

root@fileapp:~# iostat -dx

r/s 和 w/s 分別是每秒的讀操作和寫(xiě)操作,而rKB/s 和wKB/s 列以每秒千字節(jié)為單位顯示了讀和寫(xiě)的數(shù)據(jù)量

如果這兩對(duì)數(shù)據(jù)值都很高的話說(shuō)明磁盤(pán)io操作是很頻繁。

+++++++++++++++++++++++++++++++++++++

linux wa%過(guò)高,iostat查看io狀況

1, 安裝??iostat??

yum install sysstat

之后就可以使用?iostat 命令了,

2,入門(mén)使用

iostat -d -k 2

參數(shù) -d 表示,顯示設(shè)備(磁盤(pán))使用狀態(tài);-k某些使用block為單位的列強(qiáng)制使用Kilobytes為單位;2表示,數(shù)據(jù)顯示每隔2秒刷新一次。

tps:該設(shè)備每秒的傳輸次數(shù)(Indicate the number of transfers per second that were issued to the device.)。"一次傳輸"意思是"一次I/O請(qǐng)求"。多個(gè)邏輯請(qǐng)求可能會(huì)被合并為"一次I/O請(qǐng)求"。"一次傳輸"請(qǐng)求的大小是未知的。kB_read/s:每秒從設(shè)備(drive expressed)讀取的數(shù)據(jù)量;

kB_wrtn/s:每秒向設(shè)備(drive expressed)寫(xiě)入的數(shù)據(jù)量;

kB_read:讀取的總數(shù)據(jù)量;kB_wrtn:寫(xiě)入的總數(shù)量數(shù)據(jù)量;這些單位都為Kilobytes。

指定監(jiān)控的設(shè)備名稱(chēng)為sda,該命令的輸出結(jié)果和上面命令完全相同。

iostat -d sda 2

默認(rèn)監(jiān)控所有的硬盤(pán)設(shè)備,現(xiàn)在指定只監(jiān)控sda。?

3, -x 參數(shù)

iostat還有一個(gè)比較常用的選項(xiàng) -x ,該選項(xiàng)將用于顯示和io相關(guān)的擴(kuò)展數(shù)據(jù)。

iostat -d -x -k 1 10

輸出信息的含義

4, 常見(jiàn)用法

iostat -d -k 1 10? ? ? ? #查看TPS和吞吐量信息(磁盤(pán)讀寫(xiě)速度單位為KB)

iostat -d -m 2? ? ? ? ? ? #查看TPS和吞吐量信息(磁盤(pán)讀寫(xiě)速度單位為MB)

iostat -d -x -k 1 10? ? ? #查看設(shè)備使用率(%util)、響應(yīng)時(shí)間(await) iostat -c 1 10 #查看cpu狀態(tài)

5, 實(shí)例分析

iostat -d -k 1 | grep vda

Device:? ? ? ? ? ? tps? ? kB_read/s? ? kB_wrtn/s? ? kB_read? ? kB_wrtn

sda10? ? ? ? ? ? 60.72? ? ? ? 18.95? ? ? ? 71.53? 395637647 1493241908

sda10? ? ? ? ? 299.02? ? ? 4266.67? ? ? 129.41? ? ? 4352? ? ? ? 132

sda10? ? ? ? ? 483.84? ? ? 4589.90? ? ? 4117.17? ? ? 4544? ? ? 4076

sda10? ? ? ? ? 218.00? ? ? 3360.00? ? ? 100.00? ? ? 3360? ? ? ? 100

sda10? ? ? ? ? 546.00? ? ? 8784.00? ? ? 124.00? ? ? 8784? ? ? ? 124

sda10? ? ? ? ? 827.00? ? 13232.00? ? ? 136.00? ? ? 13232? ? ? ? 136

上面看到,磁盤(pán)每秒傳輸次數(shù)平均約400;每秒磁盤(pán)讀取約5MB,寫(xiě)入約1MB。

iostat -d -x -k 1

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? ? ? ? ? 1.56? 28.31? 7.84 31.50? 43.65? ? 3.16? ? 21.82? ? 1.58? ? 1.19? ? 0.03? ? 0.80? 2.61? 10.29

sda? ? ? ? ? 1.98? 24.75 419.80? 6.93 13465.35? 253.47? 6732.67? 126.73? ? 32.15? ? 2.00? ? 4.70? 2.00? 85.25

sda? ? ? ? ? 3.06? 41.84 444.90 54.08 14204.08 2048.98? 7102.04? 1024.49? ? 32.57? ? 2.10? ? 4.21? 1.85? 92.24

可以看到磁盤(pán)的平均響應(yīng)時(shí)間5ms,磁盤(pán)使用率80。磁盤(pán)響應(yīng)正常,但是已經(jīng)很繁忙了。

可以看到磁盤(pán)的平均響應(yīng)時(shí)間5ms,磁盤(pán)使用率90。磁盤(pán)響應(yīng)正常,但是已經(jīng)很繁忙了。

await:? 每一個(gè)IO請(qǐng)求的處理的平均時(shí)間(單位是微秒毫秒)。這里可以理解為IO的響應(yīng)時(shí)間,一般地系統(tǒng)IO響應(yīng)時(shí)間應(yīng)該低于5ms,如果大于10ms就比較大了

svctm? ? 表示平均每次設(shè)備I/O操作的服務(wù)時(shí)間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒(méi)有I/O等待,磁盤(pán)性能很好,

如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊(duì)列等待太長(zhǎng),? 系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?/p>

%util: 在統(tǒng)計(jì)時(shí)間內(nèi)所有處理IO時(shí)間,除以總共統(tǒng)計(jì)時(shí)間

所以該參數(shù)暗示了設(shè)備的繁忙程度

。一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿(mǎn)負(fù)荷運(yùn)行了(當(dāng)然如果是多磁盤(pán),即使%util是100%,因?yàn)榇疟P(pán)的并發(fā)能力,所以磁盤(pán)使用未必就到了瓶頸)。

也可以使用下面的命令,同時(shí)顯示cpu和磁盤(pán)的使用情況

等待時(shí)間超過(guò)5ms, 磁盤(pán)io有問(wèn)題

網(wǎng)站標(biāo)題:linux文件io命令,linux文件io操作
分享路徑:http://chinadenli.net/article30/dsiedpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、網(wǎng)站維護(hù)、面包屑導(dǎo)航網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)公司ChatGPT

廣告

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

成都網(wǎng)站建設(shè)公司