九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
swap空間和tmpfs文件系統(tǒng)的使用原理

                                                                                                  swap空間和tmpfs文件系統(tǒng)的使用原理

首先,swap空間是由磁盤(pán)空間轉(zhuǎn)換成虛擬內(nèi)存空間的,而tmpfs是由虛擬內(nèi)存空間轉(zhuǎn)換成文件系統(tǒng)使用的。而swap空間是由操作系統(tǒng)和tmpfs文件系統(tǒng)使用,而tmpfs是由用戶指定才能使用;默認(rèn)情況下,系統(tǒng)會(huì)把/dev/shm掛載為tmpfs系統(tǒng),并且默認(rèn)大小是實(shí)際內(nèi)存大小的一半,這個(gè)大小只是一個(gè)上限值,并且tmpfs使用的是VM的空間,VM就是虛擬內(nèi)存,由物理內(nèi)存和swap組成,如果你的/dev/shm里面沒(méi)有放任何東西,那么不會(huì)占用VM的大小,如果設(shè)置tmpfs的大小超過(guò)物理內(nèi)存的一半,而且使用tmpfs的時(shí)候也超過(guò)了物理內(nèi)存的一般,那么tmpfs將使用swap空間。使用完畢之后,/dev/shm下面的某些內(nèi)容被刪除了,那么VM的空間也會(huì)相應(yīng)的自動(dòng)回收,所以tmpfs真正使用的空間大小是由VM管理子系統(tǒng)自動(dòng)管理的。而swap是由磁盤(pán)創(chuàng)建的,里面存放的主要是一些匿名變量,包括堆棧空間,由new和malloc分配的空間,進(jìn)程和線程被操作系統(tǒng)調(diào)度時(shí)使用到的某些資源。

swap分區(qū)的詳細(xì)介紹:

Swap,即交換區(qū),除了安裝Linux的時(shí)候,有多少人關(guān)心過(guò)它呢?其實(shí),Swap的調(diào)整對(duì)Linux服務(wù)器,特別是Web服務(wù)器的性能至關(guān)重要。通過(guò)調(diào)整Swap,有時(shí)可以越過(guò)系統(tǒng)性能瓶頸,節(jié)省系統(tǒng)升級(jí)費(fèi)用。

  Swap的原理是一個(gè)較復(fù)雜的問(wèn)題,需要大量的篇幅來(lái)說(shuō)明。在這里只作簡(jiǎn)單的介紹,在以后的文章中將和大家詳細(xì)討論Swap實(shí)現(xiàn)的細(xì)節(jié)。

  眾所周知,現(xiàn)代操作系統(tǒng)都實(shí)現(xiàn)了“虛擬內(nèi)存”這一技術(shù),不但在功能上突破了物理內(nèi)存的限制,使程序可以操縱大于實(shí)際物理內(nèi)存的空間,更重要的是,“虛擬內(nèi)存”是隔離每個(gè)進(jìn)程的安全保護(hù)網(wǎng),使每個(gè)進(jìn)程都不受其它程序的干擾。

  Swap 空間的作用可簡(jiǎn)單描述為:當(dāng)系統(tǒng)的物理內(nèi)存不夠用的時(shí)候,就需要將物理內(nèi)存中的一部分空間釋放出來(lái),以供當(dāng)前運(yùn)行的程序使用。那些被釋放的空間可能來(lái)自一些很長(zhǎng)時(shí)間沒(méi)有什么操作的程序,這些被釋放的空間被臨時(shí)保存到Swap空間中,等到那些程序要運(yùn)行時(shí),再?gòu)腟wap中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。這樣,系統(tǒng)總是在物理內(nèi)存不夠時(shí),才進(jìn)行Swap交換。

  計(jì)算機(jī)用戶會(huì)經(jīng)常遇這種現(xiàn)象。例如,在使用Windows系統(tǒng)時(shí),可以同時(shí)運(yùn)行多個(gè)程序,當(dāng)你切換到一個(gè)很長(zhǎng)時(shí)間沒(méi)有理會(huì)的程序時(shí),會(huì)聽(tīng)到硬盤(pán)“嘩嘩”直響。這是因?yàn)檫@個(gè)程序的內(nèi)存被那些頻繁運(yùn)行的程序給“偷走”了,放到了Swap區(qū)中。因此,一旦此程序被放置到前端,它就會(huì)從Swap區(qū)取回自己的數(shù)據(jù),將其放進(jìn)內(nèi)存,然后接著運(yùn)行。

  需要說(shuō)明一點(diǎn),并不是所有從物理內(nèi)存中交換出來(lái)的數(shù)據(jù)都會(huì)被放到Swap中(如果這樣的話,Swap就會(huì)不堪重負(fù)),有相當(dāng)一部分?jǐn)?shù)據(jù)被直接交換到文件系統(tǒng)。例如,有的程序會(huì)打開(kāi)一些文件,對(duì)文件進(jìn)行讀寫(xiě)(其實(shí)每個(gè)程序都至少要打開(kāi)一個(gè)文件,那就是運(yùn)行程序本身),當(dāng)需要將這些程序的內(nèi)存空間交換出去時(shí),就沒(méi)有必要將文件部分的數(shù)據(jù)放到 Swap空間中了,而可以直接將其放到文件里去。如果是讀文件操作,那么內(nèi)存數(shù)據(jù)被直接釋放,不需要交換出來(lái),因?yàn)橄麓涡枰獣r(shí),可直接從文件系統(tǒng)恢復(fù);如果是寫(xiě)文件,只需要將變化的數(shù)據(jù)保存到文件中,以便恢復(fù)。但是那些用malloc和new函數(shù)生成的對(duì)象的數(shù)據(jù)則不同,它們需要Swap空間,因?yàn)樗鼈冊(cè)谖募到y(tǒng)中沒(méi)有相應(yīng)的“儲(chǔ)備”文件,因此被稱作“匿名”(Anonymous)內(nèi)存數(shù)據(jù)。這類數(shù)據(jù)還包括堆棧中的一些狀態(tài)和變量數(shù)據(jù)等。所以說(shuō),Swap 空間是“匿名”數(shù)據(jù)的交換空間。

  突破128M Swap限制

  經(jīng)常看到有些Linux(國(guó)內(nèi)漢化版)安裝手冊(cè)上有這樣的說(shuō)明:Swap空間不能超過(guò)128M。為什么會(huì)有這種說(shuō)法?在說(shuō)明“128M”這個(gè)數(shù)字的來(lái)歷之前,先給問(wèn)題一個(gè)回答:現(xiàn)在根本不存在128M的限制!現(xiàn)在的限制是2G!

  Swap 空間是分頁(yè)的,每一頁(yè)的大小和內(nèi)存頁(yè)的大小一樣,方便Swap空間和內(nèi)存之間的數(shù)據(jù)交換。舊版本的Linux實(shí)現(xiàn)Swap空間時(shí),用Swap空間的第一頁(yè)作為所有Swap空間頁(yè)的一個(gè)“位映射”(Bit map)。這就是說(shuō)第一頁(yè)的每一位,都對(duì)應(yīng)著一頁(yè)Swap空間。如果這一位是1,表示此頁(yè)Swap可用;如果是0,表示此頁(yè)是壞塊,不能使用。這么說(shuō)來(lái),第一個(gè)Swap映射位應(yīng)該是0,因?yàn)?,第一?yè)Swap是映射頁(yè)。另外,最后10個(gè)映射位也被占用,用來(lái)表示Swap的版本(原來(lái)的版本是 Swap_space ,現(xiàn)在的版本是swapspace2)。那么,如果說(shuō)一頁(yè)的大小為s,這種Swap的實(shí)現(xiàn)方法共能管理“8 * ( s - 10 ) - 1”個(gè)Swap頁(yè)。對(duì)于i386系統(tǒng)來(lái)說(shuō)s=4096,則空間大小共為133890048,如果認(rèn)為1 MB=2^20 Byte的話,大小正好為128M。

  之所以這樣來(lái)實(shí)現(xiàn)Swap空間的管理,是要防止Swap空間中有壞塊。如果系統(tǒng)檢查到Swap中有壞塊,則在相應(yīng)的位映射上標(biāo)記上0,表示此頁(yè)不可用。這樣在使用Swap時(shí),不至于用到壞塊,而使系統(tǒng)產(chǎn)生錯(cuò)誤。

  現(xiàn)在的系統(tǒng)設(shè)計(jì)者認(rèn)為:

  1.現(xiàn)在硬盤(pán)質(zhì)量很好,壞塊很少。

  2.就算有,也不多,只需要將壞塊羅列出來(lái),而不需要為每一頁(yè)建立映射。

  3.如果有很多壞塊,就不應(yīng)該將此硬盤(pán)作為Swap空間使用。

  于是,現(xiàn)在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址訪問(wèn),限制為2G。

  Swap配置對(duì)性能的影響

  分配太多的Swap空間會(huì)浪費(fèi)磁盤(pán)空間,而Swap空間太少,則系統(tǒng)會(huì)發(fā)生錯(cuò)誤。

  如果系統(tǒng)的物理內(nèi)存用光了,系統(tǒng)就會(huì)跑得很慢,但仍能運(yùn)行;如果Swap空間用光了,那么系統(tǒng)就會(huì)發(fā)生錯(cuò)誤。例如,Web服務(wù)器能根據(jù)不同的請(qǐng)求數(shù)量衍生出多個(gè)服務(wù)進(jìn)程(或線程),如果Swap空間用完,則服務(wù)進(jìn)程無(wú)法啟動(dòng),通常會(huì)出現(xiàn)“application is out of memory”的錯(cuò)誤,嚴(yán)重時(shí)會(huì)造成服務(wù)進(jìn)程的死鎖。因此Swap空間的分配是很重要的。

  通常情況下,Swap空間應(yīng)大于或等于物理內(nèi)存的大小,最小不應(yīng)小于64M,通常Swap空間的大小應(yīng)是物理內(nèi)存的2-2.5倍。但根據(jù)不同的應(yīng)用,應(yīng)有不同的配置:如果是小的桌面系統(tǒng),則只需要較小的Swap空間,而大的服務(wù)器系統(tǒng)則視情況不同需要不同大小的Swap空間。特別是數(shù)據(jù)庫(kù)服務(wù)器和Web服務(wù)器,隨著訪問(wèn)量的增加,對(duì)Swap空間的要求也會(huì)增加,具體配置參見(jiàn)各服務(wù)器產(chǎn)品的說(shuō)明。

  另外,Swap分區(qū)的數(shù)量對(duì)性能也有很大的影響。因?yàn)镾wap交換的操作是磁盤(pán)IO 的操作,如果有多個(gè)Swap交換區(qū),Swap空間的分配會(huì)以輪流的方式操作于所有的Swap,這樣會(huì)大大均衡IO的負(fù)載,加快Swap交換的速度。如果只有一個(gè)交換區(qū),所有的交換操作會(huì)使交換區(qū)變得很忙,使系統(tǒng)大多數(shù)時(shí)間處于等待狀態(tài),效率很低。用性能監(jiān)視工具就會(huì)發(fā)現(xiàn),此時(shí)的CPU并不很忙,而系統(tǒng)卻慢。這說(shuō)明,瓶頸在IO上,依靠提高CPU的速度是解決不了問(wèn)題的。

  系統(tǒng)性能監(jiān)視

  Swap空間的分配固然很重要,而系統(tǒng)運(yùn)行時(shí)的性能監(jiān)控卻更加有價(jià)值。通過(guò)性能監(jiān)視工具,可以檢查系統(tǒng)的各項(xiàng)性能指標(biāo),找到系統(tǒng)性能的瓶頸。本文只介紹一下在Solaris下和Swap相關(guān)的一些命令和用途。

  最常用的是Vmstat命令(在大多數(shù)Unix平臺(tái)下都有這樣一些命令),此命令可以查看大多數(shù)性能指標(biāo)。

  例如:

  # vmstat 3

  procs memory swap io system cpu

  r b w swpd free buff cache si so bi bo in cs us sy id

  0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99

  0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100

  0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100

  …………

  命令說(shuō)明:

  vmstat 后面的參數(shù)指定了性能指標(biāo)捕獲的時(shí)間間隔。3表示每三秒鐘捕獲一次。第一行數(shù)據(jù)不用看,沒(méi)有價(jià)值,它僅反映開(kāi)機(jī)以來(lái)的平均性能。從第二行開(kāi)始,反映每三秒鐘之內(nèi)的系統(tǒng)性能指標(biāo)。這些性能指標(biāo)中和Swap有關(guān)的包括以下幾項(xiàng):

  procs下的w

  它表示當(dāng)前(三秒鐘之內(nèi))需要釋放內(nèi)存、交換出去的進(jìn)程數(shù)量。

  memory下的swpd

  它表示使用的Swap空間的大小。

  Swap下的si,so

  si表示當(dāng)前(三秒鐘之內(nèi))每秒交換回內(nèi)存(Swap in)的總量,單位為kbytes;so表示當(dāng)前(三秒鐘之內(nèi))每秒交換出內(nèi)存(Swap out)的總量,單位為kbytes。

  以上的指標(biāo)數(shù)量越大,表示系統(tǒng)越忙。這些指標(biāo)所表現(xiàn)的系統(tǒng)繁忙程度,與系統(tǒng)具體的配置有關(guān)。系統(tǒng)管理員應(yīng)該在平時(shí)系統(tǒng)正常運(yùn)行時(shí),記下這些指標(biāo)的數(shù)值,在系統(tǒng)發(fā)生問(wèn)題的時(shí)候,再進(jìn)行比較,就會(huì)很快發(fā)現(xiàn)問(wèn)題,并制定本系統(tǒng)正常運(yùn)行的標(biāo)準(zhǔn)指標(biāo)值,以供性能監(jiān)控使用。

  另外,使用Swapon-s也能簡(jiǎn)單地查看當(dāng)前Swap資源的使用情況。例如:

  # swapon -s

  Filename Type Size Used Priority

  /dev/hda9 partition 361420 0 3

  能夠方便地看出Swap空間的已用和未用資源的大小。

  應(yīng)該使Swap負(fù)載保持在30%以下,這樣才能保證系統(tǒng)的良好性能。

  有關(guān)Swap操作的系統(tǒng)命令

  增加Swap空間,分以下幾步:

  1)成為超級(jí)用戶

  $su - root

  2)創(chuàng)建Swap文件

  # dd if=/dev/zero of=swapfile bs=1024 count=65536

  創(chuàng)建一個(gè)有連續(xù)空間的交換文件。

  3)激活Swap文件

  #/usr/sbin/swapon swapfile

  swapfile指的是上一步創(chuàng)建的交換文件。 4)現(xiàn)在新加的Swap文件已經(jīng)起作用了,但系統(tǒng)重新啟動(dòng)以后,并不會(huì)記住前幾步的操作。因此要在/etc/fstab文件中記錄文件的名字,和Swap類型,如:

  /path/swapfile none Swap sw,pri=3 0 0

  5)檢驗(yàn)Swap文件是否加上

  /usr/sbin/swapon -s

  刪除多余的Swap空間。

  1)成為超級(jí)用戶

  2)使用Swapoff命令收回Swap空間。

  #/usr/sbin/swapoff swapfile

  3)編輯/etc/fstab文件,去掉此Swap文件的實(shí)體。

  4)從文件系統(tǒng)中回收此文件。

  #rm swapfile

  5)當(dāng)然,如果此Swap空間不是一個(gè)文件,而是一個(gè)分區(qū),則需創(chuàng)建一個(gè)新的文件系統(tǒng),再掛接到原來(lái)的文件系統(tǒng)上。

 

tmpfs文件系統(tǒng)的介紹:

 

linux下面VM的大小由RM(Real Memory)和swap組成,RM的大小就是物理內(nèi)存的大小,而Swap的大小是由你自己決定的。Swap是通過(guò)硬盤(pán)虛擬出來(lái)的內(nèi)存空間,因此它的讀寫(xiě)速度相對(duì)RM(Real Memory)要慢許多,我們?yōu)槭裁葱枰猄wap呢?當(dāng)一個(gè)進(jìn)程申請(qǐng)一定數(shù)量的內(nèi)存時(shí),如內(nèi)核的vm子系統(tǒng)發(fā)現(xiàn)沒(méi)有足夠的RM時(shí),就會(huì)把RM里面的一些不常用的數(shù)據(jù)交換到Swap里面,如果需要重新使用這些數(shù)據(jù)再把它們從Swap交換到RM里面。 如果你有足夠大的物理內(nèi)存,根本不需要?jiǎng)澐諷wap分區(qū)。

     通過(guò)上面的說(shuō)明,你該知道tmpfs使用的存儲(chǔ)空間VM是什么了吧? 前面說(shuō)過(guò)VM由RM+Swap兩部分組成,因此tmpfs最大的存儲(chǔ)空間可達(dá)(The size of RM + The size of Swap)。 但是對(duì)于tmpfs本身而言,它并不知道自己使用的空間是RM還是Swap,這一切都是由內(nèi)核的vm子系統(tǒng)管理的。

怎樣使用tmpfs呢?

CODE:
     #mount  -t tmpfs -o size=20m  tmpfs  /mnt/tmp


上面這條命令分配了上限為20m的VM到/mnt/tmp目錄下,用df命令查看一下,確實(shí)/mnt/tmp掛載點(diǎn)顯示的大小是20m,但是tmpfs一個(gè)優(yōu)點(diǎn)就是它的大小是隨著實(shí)際存儲(chǔ)的容量而變化的,換句話說(shuō),假如/mnt/tmp目錄下什么也沒(méi)有,tmpfs并不占用VM。上面的參數(shù)20m只是告訴內(nèi)核這個(gè)掛載點(diǎn)最大可用的VM為20m,如果不加上這個(gè)參數(shù),tmpfs默認(rèn)的大小是RM的一半,假如你的物理內(nèi)存是128M,那么tmpfs默認(rèn)的大小就是64M,


tmpfs有沒(méi)有缺點(diǎn)呢?

     當(dāng)然有,由于它的數(shù)據(jù)是在VM里面,因此斷電或者你卸載它之后,數(shù)據(jù)就會(huì)立即丟失,這也許就是它叫tmpfs的原故。不過(guò)這其實(shí)不能說(shuō)是缺點(diǎn)。那tmpfs到底有什么用呢?

tmpfs的用途

     由于tmpfs使用的是VM,因此它比硬盤(pán)的速度肯定要快,因此我們可以利用這個(gè)優(yōu)點(diǎn)使用它來(lái)提升機(jī)器的性能。

CODE:
      #mount -t tmpfs  -o size=2m   tmpfs  /tmp


  上面這條命令分配了最大2m的VM給/tmp。    

  由于/tmp目錄是放臨時(shí)文件的地方,因此我們可以使用tmpfs來(lái)加快速度,由于沒(méi)有掛載之前/tmp目錄下的文件也許正在被使用,因此掛載之后系統(tǒng)也許有的程序不能正常工作。沒(méi)有關(guān)系,只要在/etc/fstab里面加上下面的語(yǔ)句

CODE:
      tmpfs    /tmp      tmpfs   size=2m    0   0


  重啟電腦之后就一切OK了。

 

RAMDISK的介紹:

Linux內(nèi)存磁盤(pán),虛擬硬盤(pán)的使用

由于php沒(méi)有超級(jí)變量,一直想把一些變量,類等放到內(nèi)存,不用每次請(qǐng)求都重新讀取一次提高性能,但一直沒(méi)找到好的辦法

先是想到php的模塊 eacclerator,它可以使用系統(tǒng)的共享內(nèi)存,并且提供函數(shù)可以讀寫(xiě),但php的類有個(gè)問(wèn)題就是:實(shí)例化以后,類的方法不能被序列化,必須在之前包含,于是用共享內(nèi)存的方法失敗。

再想到用Linux系統(tǒng)帶的ram,把它掛載成磁盤(pán)不就行了:

首先執(zhí)行  mkfs.ex2 /dev/ram0

然后掛載 mount /dev/ram0 /ram

這樣用時(shí)沒(méi)問(wèn)題的,但存在幾個(gè)問(wèn)題導(dǎo)致了我放棄了這個(gè)思路:1,啟動(dòng)的時(shí)候不能自動(dòng)掛載,就是沒(méi)法通過(guò)修改/etc/fstab 加載,因?yàn)榧虞d之前需要mkfs。2,文件系統(tǒng)導(dǎo)致內(nèi)存空間浪費(fèi),越先進(jìn)的fs浪費(fèi)越多,而內(nèi)存不需要太先進(jìn),因?yàn)椴豢紤]數(shù)據(jù)丟失。3,不論虛擬盤(pán)里有沒(méi)有文件,都會(huì)占用這么大的內(nèi)存,不能動(dòng)態(tài)分配。

經(jīng)過(guò)搜索和實(shí)踐,終于找到一個(gè)好的解決辦法,就是使用tmpfs,它是動(dòng)態(tài)管理的,而且可以放在/etc/fstab 啟動(dòng)時(shí)候加載,寫(xiě)一行:
tmpfs /var/ram tmpfs size=100M 0 0

表示 掛載到 /var/ram  100M大小。

只要在apache啟動(dòng)前把類文件解壓到此虛擬盤(pán)就行了,修改php.ini的include_path,這樣所有的include不再耗費(fèi)io時(shí)間,速度肯定暴快,而且還能用來(lái)保存一些需要快速讀取得變量,比如點(diǎn)擊統(tǒng)計(jì),也能存成超級(jí)變量,不過(guò)需要注意的是磁盤(pán)空間,如果服務(wù)器磁盤(pán)夠大,就沒(méi)問(wèn)題了。


----------------------------------------------------

如何創(chuàng)建任意大小的linux內(nèi)存虛擬硬盤(pán)

您講的內(nèi)存盤(pán)是英譯過(guò)來(lái)的:即ramdisk,并非虛擬內(nèi)存大多數(shù)的Linux發(fā)行版本中,內(nèi)存盤(pán)默認(rèn)使用的是/dev/shm 路徑,文件系統(tǒng)類型為tmpfs 默認(rèn)大小是內(nèi)存實(shí)際的大小,這很符合實(shí)際的操作習(xí)慣,操作這個(gè)路徑就是對(duì)內(nèi)存的操作。我們可以重新設(shè)置這個(gè)內(nèi)存盤(pán)的大小,或者建立新的內(nèi)存盤(pán),以加速一些特別的應(yīng)用,例如squid的緩沖,dns的緩沖文件等等。重設(shè)內(nèi)存盤(pán)大小:例如: mount -o remount,size=3G /dev/shm 注意size的大小可以的單位是M\k\G 新建內(nèi)存盤(pán):例如: mkdir /usr/local/squid/var/cache mount -t tmpfs -o size=3G,mode=0755 tmpfs /usr/local/squid/var/cache 注意重新設(shè)置內(nèi)存盤(pán)后為了使用下次啟用生效必須寫(xiě)到fstab文件中,一般linux是在/etc/fstab中。


----------------------------------------------------
Linux的RAM disk

在開(kāi)發(fā)中,程序經(jīng)常需要頻繁地讀寫(xiě)某些臨時(shí)文件,遇到這種情況,RAM disk就是最好的解決辦法。
簡(jiǎn)單地說(shuō),RAM disk就是將一塊內(nèi)存模擬成為某個(gè)磁盤(pán)驅(qū)動(dòng)器,對(duì)應(yīng)用程序來(lái)說(shuō),RAM disk和普通磁盤(pán)是完全一樣的,也就是說(shuō),RAM disk對(duì)應(yīng)用程序是“透明”的——唯一的區(qū)別在于,系統(tǒng)重新啟動(dòng)或者關(guān)機(jī)時(shí),存儲(chǔ)在RAM disk上的數(shù)據(jù)會(huì)丟失。

核心版本在2.4以上的Linux內(nèi)置了對(duì)RAM disk的支持,下面,我們就來(lái)看看如何使用RAM disk(操作系統(tǒng)為RedHat Linux AS)。

在默認(rèn)情況下,RedHat會(huì)創(chuàng)建16塊RAM disk,但不是所有的RAM disk都處于激活(active)狀態(tài)。下面列出了ram0-ram19一共20塊RAM disk,但只有ram0-ram15是可以使用的。


[root]# ls -l /dev/ram*
lrwxrwxrwx    1 root     root            4 Jun 12 00:31 /dev/ram -> ram1
brw-rw----    1 root     disk       1,   0 Jan 30 2003 /dev/ram0
brw-rw----    1 root     disk       1,   1 Jan 30 2003 /dev/ram1
brw-rw----    1 root     disk       1, 10 Jan 30 2003 /dev/ram10
brw-rw----    1 root     disk       1, 11 Jan 30 2003 /dev/ram11
brw-rw----    1 root     disk       1, 12 Jan 30 2003 /dev/ram12
brw-rw----    1 root     disk       1, 13 Jan 30 2003 /dev/ram13
brw-rw----    1 root     disk       1, 14 Jan 30 2003 /dev/ram14
brw-rw----    1 root     disk       1, 15 Jan 30 2003 /dev/ram15
brw-rw----    1 root     disk       1, 16 Jan 30 2003 /dev/ram16
brw-rw----    1 root     disk       1, 17 Jan 30 2003 /dev/ram17
brw-rw----    1 root     disk       1, 18 Jan 30 2003 /dev/ram18
brw-rw----    1 root     disk       1, 19 Jan 30 2003 /dev/ram19
brw-rw----    1 root     disk       1,   2 Jan 30 2003 /dev/ram2
brw-rw----    1 root     disk       1,   3 Jan 30 2003 /dev/ram3
brw-rw----    1 root     disk       1,   4 Jan 30 2003 /dev/ram4
brw-rw----    1 root     disk       1,   5 Jan 30 2003 /dev/ram5
brw-rw----    1 root     disk       1,   6 Jan 30 2003 /dev/ram6
brw-rw----    1 root     disk       1,   7 Jan 30 2003 /dev/ram7
brw-rw----    1 root     disk       1,   8 Jan 30 2003 /dev/ram8
brw-rw----    1 root     disk       1,   9 Jan 30 2003 /dev/ram9
lrwxrwxrwx    1 root     root            4 Jun 12 00:31 /dev/ramdisk -> ram0



要查看RAM disk的大小,可以使用dmesg命令。


[root]# dmesg | grep RAMDISK
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
RAMDISK: Compressed image found at block 0



默認(rèn)情況下,每個(gè)RAM disk的大小都是4MB。

我們可以修改啟動(dòng)配置文件來(lái)設(shè)置RAM disk的大小,在Redhat Linux上,修改Grub的conf文件:
/etc/grub.conf


# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
         all kernel and initrd paths are relative to /, eg.
         root (hd0,0)
         kernel /boot/vmlinuz-version ro root=/dev/sda1
         initrd /boot/initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.9-5.ELsmp)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.9-5.ELsmp ro root=LABEL=/ramdisk_size=16000
        initrd /boot/initrd-2.6.9-5.ELsmp.img



保存之后重新啟動(dòng),查看一下,改動(dòng)已經(jīng)生效:


[root]# dmesg | grep RAMDISK
RAMDISK driver initialized: 16 RAM disks of 16000K size 1024 blocksize
RAMDISK: Compressed image found at block 0



普通的RAM disk并不需要保存日志,所以我們可以將其格式化為ext2格式,并指定-m 0參數(shù),保證RAM disk上所有空間對(duì)普通用戶開(kāi)放(不設(shè)保留空間)。


[root]# mke2fs -m 0 /dev/ram0
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
4000 inodes, 16000 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
2 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
        8193

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.



現(xiàn)在,RAM disk已經(jīng)格式化完畢,我們只需要將其掛接起來(lái),就可以使用了。


[root]# mkdir /mnt/rd
[root]# mount /dev/ram0 /mnt/rd
[root]# mount | grep ram0
/dev/ram0 on /mnt/rd type ext2 (rw)
[root]# df -h | grep ram0
/dev/ram0              16M   13K   16M   1% /mnt/rd



為了讓普通用戶可以操作RAM disk,還需要賦予相應(yīng)的權(quán)限。


[root]# chown van:root /mnt/rd
[root]# chmod 0770 /mnt/rd
[root]# ls -ald /mnt/rd
drwxrwx---    2 van     root         4096 Dec 8 11:09 /mnt/rd



如果每次啟動(dòng)都必須使用RAM disk,可以將上面執(zhí)行的幾條語(yǔ)句寫(xiě)成一個(gè).sh腳本,放入啟動(dòng)文件(例如,/etc/rc.local),這樣,以后每次啟動(dòng)都可以直接使用RAM disk了。

Trackback: http://tb.donews.net/TrackBack.aspx?PostId=1024435

 
通過(guò)ramdisk設(shè)置將內(nèi)存作為磁盤(pán),加速網(wǎng)絡(luò)資源訪問(wèn)

A:由于我們的互聯(lián)網(wǎng)產(chǎn)品中有需要給用戶呈現(xiàn)大量的碎小圖片,而且訪問(wèn)量非常大,這就非常讓我們感到頭疼。我因此想過(guò)很多辦法,用apache的alias來(lái)做圖片資源的映射?用lighttpd緩存圖片?還有傳說(shuō)中nginx,我們也試過(guò)。也許是我們配置得不是很好,反正效果看上去區(qū)別不大。甚至我們都把圖片放到tomcat里面,感覺(jué)也沒(méi)什么差距。但是當(dāng)產(chǎn)品上線的時(shí)候,用戶量一上來(lái)我們就傻眼了,程序響應(yīng)到是響應(yīng)了,就是圖出來(lái)得很慢。后來(lái)無(wú)意中發(fā)現(xiàn)windows中有個(gè)Ramdisk的工具,能把內(nèi)存作為磁盤(pán)的一個(gè)分區(qū)使用,這下子讓我們high了不少,馬上把圖片放到這個(gè)虛擬分區(qū)中,試了一把,不錯(cuò),好使!于是我在想,看看linux有沒(méi)有這個(gè)玩意兒。(不好意思,linux我很不熟)
    Ramdisk,即將內(nèi)存作為磁盤(pán)用。內(nèi)存的速度之快,是電腦存儲(chǔ)設(shè)備中僅次于CPU緩存和顯示卡顯存的,當(dāng)然比磁盤(pán)的IO讀寫(xiě)要快很多了;
1、大家可以先通過(guò)ls /dev/ram*來(lái)查看有多少可供使用的Ramdisk。
2、使用其中一個(gè)來(lái)創(chuàng)建 mke2fs /dev/ram4,我這選用的是ram4,一般來(lái)說(shuō)總共有16個(gè)
執(zhí)行下來(lái)可以看到有一行1024 inodes, 4096 blocks,默認(rèn)就是4M,這肯定不夠的
3、 設(shè)置虛擬磁盤(pán)的大小,我裝的是Red Hat Enterprise Linux Server,所以我在/etc/grub.conf中直接修改
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet ramdisk_size=102400;這樣,1G應(yīng)該差不多了
4、加載ramdisk, mount /dev/ram4 /tmp/your real directory;如果想取消,直接umount /dev/ram4 /tmp/your real directory
5、用df -k /dev/ram4查看你用了多少虛擬磁盤(pán)了,如果不是0%或者1%,那就說(shuō)明生效了
6、我的圖片放tomcat下做測(cè)試的,所以在server.xml的Host標(biāo)簽中加上
<Context path="/images" docBase="/tmp/ramdisk4/images"/>
最后,自己通過(guò)url試一下吧
這個(gè)東西我只是拋磚引玉一下,大家如果是用apache或者lighttpd做靜態(tài)資源的服務(wù)器的話,可以按照我這種方式來(lái)配置;但是有一點(diǎn),這個(gè)東西當(dāng)系統(tǒng)reboot以后,就什么都沒(méi)有了,需要重新設(shè)置,所以說(shuō)用戶上傳的東西,最好是寫(xiě)個(gè)shell來(lái)控制一下,及時(shí)備份;不過(guò)對(duì)于我們的生產(chǎn)環(huán)境,我們暫時(shí)沒(méi)有把用戶上傳的路徑做虛擬磁盤(pán),沒(méi)敢去嘗試;當(dāng)linux都reboot了,那就說(shuō)明我們整個(gè)業(yè)務(wù)都停掉需要做調(diào)整,所以無(wú)所謂的。

B:搞那么復(fù)雜,直接用tmpfs不行么?

A:恩,剛看了一下,tmpfs的方式,是要簡(jiǎn)單一些,不過(guò)都是通過(guò)掛載文件系統(tǒng)的方式做的,我想2者應(yīng)該沒(méi)什么本質(zhì)的區(qū)別

B:這個(gè),最好前面加squid.
如果圖片太多,樓主這種方法就不靈了

A:為什么圖片太多就不太好了?squid我沒(méi)試過(guò),我只知道cdn是這么干的,請(qǐng)問(wèn)你有沒(méi)有在生產(chǎn)環(huán)境中
使用squid來(lái)做加速,或者能否告訴我,圖片為什么太多就不好,是文件尋址速度受到影響了嗎?如果
是這樣的話,那我可以劃分多個(gè)ram掛載文件系統(tǒng),我想應(yīng)該也沒(méi)問(wèn)題吧

B:這個(gè)用Squid、 NCache、 Varnish 來(lái)做確實(shí)更適合。

A:mount -t tmpfs tmpfs /tmp/your_dir 
一個(gè)命令搞定,而且tmpfs是動(dòng)態(tài)增長(zhǎng),按需分配內(nèi)存,不僅是“簡(jiǎn)單一些”而已。
 
--------------------------------

Redhat AS, Ubuntu默認(rèn)將內(nèi)存的一半作為ramdisk空間使用(注意這是上限,并不是實(shí)際消耗,tmpfs會(huì)按需的分配內(nèi)存)。掛載點(diǎn)為/dev/shm 文件類型為tmpfs

/dev/shm 不完全是RamDisk,若它使用超過(guò)電腦一半以上的RAM,就會(huì)開(kāi)始吃SWAP。另外它沒(méi)用到的部份,會(huì)自動(dòng)釋放出來(lái)給系統(tǒng)使用

ramdisk作用可以將緩存放到其中,這樣延長(zhǎng)硬盤(pán)壽命,并且提高電腦速度

1,修改ramdisk操作

調(diào)整/dev/shm目錄的大小
1)查看大小
df -h /dev/shm

 2)修改大小
vi /etc/fstab 
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0

size參數(shù)也可以用G作單位:size=1G。

如果沒(méi)有這行,www.linuxidc.com可以自己加入并修改size大小

3)重新掛載
umount /dev/shm 
mount /dev/shm

4)查看修改后的大小
df -h /dev/shm

2,將/tmp目錄設(shè)置到RamDisk的方法

基本上只要打以下指令,就能將 /tmp 綁定到 /dev/shm

mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp

※ 注:為何是用 mount --bind 綁定,而不是 ln -s 軟連結(jié),原因是 /tmp 目錄,系統(tǒng)不給刪除。

 

--------------------------------
 

ln -s vs mount --bind

Hell yes. If you execute the ln -s you create a symbolic link, which is aninode pointing to a certain filesystem object, which is why symlinks can traverse filesystems and hard links cannot: hard links do not have their own inode.

If you mount a filesystem with --bind, you create a second mountpoint for a device or filesystem.

If you envision a symlink as a redirect, then envision a --bind mounted filesystem as creating another gateway to data.

Symlinks and bind mounts are a whole different ballgame.

The --bind mount seems a bit more robust to me and it probably is a bit faster than working with a symlink. On the other hand, there are no serious drawbacks to using the symlink, as the performance hit will be small (if it at all exists).

Edit: I've been thinking about this, and the performance hit might be a bit bigger than I originally thought. If you have an application that reads a lot of different files, then every new file that is opened will require an extra read. Some research here suggests that my assumption is correct, so if you have an IO heavy application running there, consider the --bind option to mount above the symlink solution.

The reason it is not common, is probably the fact that a symlink is visible in anls, whereas a bind mount is only visible when looking at /proc/mounts or /etc/mtab (which is what the mount command does, if it is executed without parameters). Other than that, I don't think there are any issues. I'd be interested if there are, though.

Addition: another issue with ln -s is that for some applications, when the path gets dereferenced, it may cause the application to balk if it "expects" certain items to be in specific places.

---------------

我的理解:

ln -s /ori  /avatar  #軟連接,一個(gè)inode指向另一個(gè)inode, ori 和avatar使用的是不同的inode,讀寫(xiě)avatar 相當(dāng)于讀寫(xiě)inode

ln  /ori  /avatar    #硬連接, ori 和avatar使用的是同一個(gè)inode, 讀寫(xiě)刪都是針對(duì)同一個(gè)文件

mount --bind /ori  /avatar  #綁定,首先/avatar 必須預(yù)先創(chuàng)建,這時(shí)候設(shè)/avatar使用的是A inode, /ori的是B inode. 那么在執(zhí)行這條命令后,/avatar 會(huì)變成B inode, (但是A inode 還存在, umount之后, /avatar 會(huì)重新變成A inode), 這時(shí)候?qū)?avatar 讀寫(xiě)相當(dāng)于是對(duì)B inode讀寫(xiě),但是不能刪除/avatar -- 否則會(huì)報(bào)錯(cuò):Device or resource busy, 這就達(dá)到了上面說(shuō)的"原因是 /tmp 目錄,系統(tǒng)不給刪除。" 防止誤操作把它給刪了。但是這時(shí)候你是能夠刪除/ori, 這就囧了,刪除之后就不能對(duì)/avatar 進(jìn)行任何讀寫(xiě)操作。。。

 

另外一篇文章的

如果我必須一下子說(shuō)清楚 tmpfs,我會(huì)說(shuō) tmpfs 就象虛擬磁盤(pán)(ramdisk),但不一樣。象虛擬磁盤(pán)一樣,tmpfs 可以使用您的 RAM,但它也可以使用您的交換分區(qū)來(lái)存儲(chǔ)。而且傳統(tǒng)的虛擬磁盤(pán)是個(gè)塊設(shè)備,并需要一個(gè)mkfs 之類的命令才能真正地使用它,tmpfs 是一個(gè)文件系統(tǒng),而不是塊設(shè)備;您只是安裝它,它就可以使用了??偠灾?,這讓 tmpfs 成為我有機(jī)會(huì)遇到的最好的基于 RAM 的文件系統(tǒng)。
讓我們來(lái)看看 tmpfs 更有趣的一些特性吧。正如我前面提到的一樣,tmpfs 既可以使用 RAM, 可以使用交換分區(qū)。剛開(kāi)始這看起來(lái)可能有點(diǎn)武斷,但請(qǐng)記住 tmpfs 也是我們知道的“虛擬內(nèi)存文件系統(tǒng)”。而且,您可能也知道,Linux 內(nèi)核的虛擬內(nèi)存資源同時(shí)來(lái)源于您的 RAM 和交換分區(qū)。內(nèi)核中的 VM 子系統(tǒng)將這些資源分配到系統(tǒng)中的其它部分,并負(fù)責(zé)在后臺(tái)管理這些資源,通常是透明地將 RAM 頁(yè)移動(dòng)到交換分區(qū)或從交換分區(qū)到 RAM 頁(yè)。
tmpfs 文件系統(tǒng)需要 VM 子系統(tǒng)的頁(yè)面來(lái)存儲(chǔ)文件。tmpfs 自己并不知道這些頁(yè)面是在交換分區(qū)還是在 RAM 中;做這種決定是 VM 子系統(tǒng)的工作。tmpfs 文件系統(tǒng)所知道的就是它正在使用某種形式的虛擬內(nèi)存。
這里是 tmpfs 文件系統(tǒng)另一個(gè)有趣的特性。不同于大多數(shù)“標(biāo)準(zhǔn)的”文件系統(tǒng),如 ext3、ext2、XFS、JFS、ReiserFS 和其它一些系統(tǒng),tmpfs 并不是存在于一個(gè)底層塊設(shè)備上面。因?yàn)?tmpfs 是直接建立在 VM 之上的,您用一個(gè)簡(jiǎn)單的 mount 命令就可以創(chuàng)建 tmpfs 文件系統(tǒng)了。
# mount tmpfs /mnt/tmpfs -t tmpfs 
//by me: 當(dāng)-t tmpfs , mount第一個(gè)參數(shù)tmpfs 并不是指的實(shí)際設(shè)備,而是退回成為一個(gè)名字,這里你可以隨便起名叫abc都可以, 然后mount 或者 fstab 或者 df -l 看一下第一行對(duì)應(yīng)的是abc, 并不起實(shí)際意義. 
執(zhí)行這個(gè)命令之后,一個(gè)新的 tmpfs 文件系統(tǒng)就安裝在 /mnt/tmpfs,隨時(shí)可以使用。注意,不需運(yùn)行 mkfs.tmpfs ;事實(shí)上,那是不可能的,因?yàn)闆](méi)有這樣的命令存在。在mount 命令執(zhí)行之后,文件系統(tǒng)立即就被安裝并且可以使用了,類型是tmpfs 。這和 Linux 虛擬磁盤(pán)如何使用大相徑庭;標(biāo)準(zhǔn)的 Linux 虛擬磁盤(pán)是塊設(shè)備,所以在使用它們之前必須用您選擇的文件系統(tǒng)將其格式化。相反,tmpfs一個(gè)文件系統(tǒng)。所以,您可以簡(jiǎn)單地安裝它就可以使用了。

 

 

 

 

 

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux tmpfs 以及 ramfs
linux tmpfs與/dev/shm探討及其應(yīng)用
linux /dev/shm的用途
tmpfs使用
把MongoDB當(dāng)成純內(nèi)存數(shù)據(jù)庫(kù)使用
ramfs 和 tmpfs 以及 ramdisk相關(guān)調(diào)研
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服