Linux通用系統(tǒng)優(yōu)化 (2) |
發(fā)布時(shí)間: 2012/8/14 19:42:32 |
同時(shí)將啟動(dòng)md0 RAID0陣列。接下來,即可在md0上創(chuàng)建你想要得文件系統(tǒng)。我們?cè)贚inux服務(wù)器上使用的是Reiserfs日志文件系統(tǒng),創(chuàng)建的命令為"# mkreiserfs /dev/md0"。 這樣,就可以像其它文件系統(tǒng)那樣來加載新創(chuàng)建的基于RAID0的文件系統(tǒng)了。 4 使用elvtune調(diào)諧磁盤I/O 在Linux內(nèi)核2.4以后的版本中,可以通過磁盤I/O的調(diào)度操作,來控制磁盤I/O的響應(yīng)時(shí)間和吞吐量。通過調(diào)整I/O請(qǐng)求在隊(duì)列中的最大等待時(shí)間,可以在響應(yīng)時(shí)間和吞吐量之間調(diào)諧。如果要求較少的響應(yīng)時(shí)間,那么吞吐量將降低,反之,較長(zhǎng)的響應(yīng)時(shí)間則可以得到較大的吞吐量?梢允褂霉ぞ"/sbin/elvtune"來改變最大的響應(yīng)時(shí)間值。使用方法如下: 查看當(dāng)前的設(shè)置 # /sbin/elvtune /dev/hda1 修改當(dāng)前的配置 # /sbin/elvtune -r 2000 -w 4000 /dev/hda1 其中-r參數(shù)針對(duì)讀操作,-w參數(shù)針對(duì)寫操作. 可以通過命令"iostat -d -x /dev/hda1"得到的平均信息(包括平均請(qǐng)求大小和平均隊(duì)列長(zhǎng)度)來監(jiān)視以上I/O配置的效果,并調(diào)整配置,以得到最佳的性能。一般來講,對(duì)于讀寫頻繁,但操作的數(shù)據(jù)量較少的Linux服務(wù)器,且對(duì)實(shí)時(shí)性要求較高,那么可以將參數(shù)調(diào)小。反之如果對(duì)于讀寫不頻繁,但要求具有較大的吞吐量的Linux服務(wù)器,可以將參數(shù)調(diào)大,以獲得較大的吞吐量。 五、文件及文件系統(tǒng)調(diào)諧 1、塊大小 創(chuàng)建文件系統(tǒng)時(shí),可以指定塊的大小。如果將來在你的文件系統(tǒng)中是一些比較大的文件的話,使用較大的塊大小將得到較好的性能。將ext2文件系統(tǒng)的塊大小調(diào)整為4096byte而不是缺省的1024byte,可以減少文件碎片,加快fsck掃描的速度和文件刪除以及讀操作的速度。另外,在ext2的文件系統(tǒng)中,為根目錄保留了5%的空間,對(duì)一個(gè)大的文件系統(tǒng),除非用作日志文件,5%的比例有些過多?梢允褂妹 # mke2fs -b 4096 -m 1 /dev/hda6 將它改為1%并以塊大小4096byte創(chuàng)建文件系統(tǒng)。 使用多大的塊大小,需要根據(jù)你的系統(tǒng)綜合考慮,如果系統(tǒng)用作郵件或者新聞服務(wù)器,使用較大的塊大小,雖然性能有所提高,但會(huì)造成磁盤空間較大的浪費(fèi)。比如文件系統(tǒng)中的文件平均大小為2145byte,如果使用4096byte的塊大小,平均每一個(gè)文件就會(huì)浪費(fèi)1951byte空間。如果使用1024byte的塊大小,平均每一個(gè)文件會(huì)浪費(fèi)927byte空間。在性能和磁盤的代價(jià)上如何平衡,要看具體應(yīng)用的需要。 2 不使用atime屬性 當(dāng)文件被創(chuàng)建,修改和訪問時(shí),Linux系統(tǒng)會(huì)記錄這些時(shí)間信息。記錄文件最近一次被讀取的時(shí)間信息,當(dāng)系統(tǒng)的讀文件操作頻繁時(shí),將是一筆不少的開銷。所以,為了提高系統(tǒng)的性能,我們可以在讀取文件時(shí)不修改文件的atime屬性?梢酝ㄟ^在加載文件系統(tǒng)時(shí)使用notime選項(xiàng)來做到這一點(diǎn)。當(dāng)以noatime選項(xiàng)加載(mount)文件系統(tǒng)時(shí),對(duì)文件的讀取不會(huì)更新文件屬性中的atime信息。設(shè)置noatime的重要性是消除了文件系統(tǒng)對(duì)文件的寫操作,文件只是簡(jiǎn)單地被系統(tǒng)讀取。由于寫操作相對(duì)讀來說要更消耗系統(tǒng)資源,所以這樣設(shè)置可以明顯提高服務(wù)器的性能。注意wtime信息仍然有效,任何時(shí)候文件被寫,該信息仍被更新。 比如在你的系統(tǒng)中,要為/home文件系統(tǒng)設(shè)置notime選項(xiàng),可以修改/etc/fstab文件相應(yīng)的行如下: LABEL=/home /home ext2 noatime 1 2 要使該設(shè)置立即生效,可運(yùn)行命令"#mount -oremount /home"。這樣以后系統(tǒng)讀取/home下的文 件時(shí)將不會(huì)再修改atime屬性。 3 調(diào)整緩沖區(qū)刷新參數(shù) Linux內(nèi)核中,包含了一些對(duì)于系統(tǒng)運(yùn)行態(tài)的可設(shè)置參數(shù)。緩沖刷新的參數(shù)可以通過調(diào)整 /proc/sys/vm/bdflush文件來完成,這個(gè)文件的格式是這樣的: # cat /proc/sys/vm/bdflush 30 64 64 256 500 3000 60 0 0 每一欄是一個(gè)參數(shù),其中最重要的是前面幾個(gè)參數(shù)。第一個(gè)數(shù)字是在"dirty"緩沖區(qū)達(dá)到多少的時(shí)候強(qiáng)制喚醒bdflush進(jìn)程刷新硬盤,第二個(gè)數(shù)字是每次讓bdflush進(jìn)程刷新多少個(gè)dirty塊。所謂dirty塊是必須寫到磁盤中的緩存塊。接下來的參數(shù)是每次允許bd flush將多少個(gè)內(nèi)存塊排入空閑的緩沖塊列表。 以上值為RedHat Linux 7.1中的缺省值。如何修改它們呢?對(duì)不同的系統(tǒng)有以下兩種方法 (1)# echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush 并將這條命令加到/etc/rc.d/rc.local文件中去。 。2)在/etc/sysctl.conf 文件中加入如下行: vm.bdflush = 100 128 128 512 5000 3000 60 0 0 以上的設(shè)置加大了緩沖區(qū)大小,降低了bdflush被啟動(dòng)的頻度,同時(shí)也增加了萬一系統(tǒng)崩潰丟失數(shù)據(jù)的危險(xiǎn)性。VFS的緩沖刷新是Linux文件系統(tǒng)高效的重要原因之一,如果性能對(duì)你真的很重要,應(yīng)該考慮調(diào)整這個(gè)參數(shù)。 4 調(diào)整文件句柄數(shù)和i-節(jié)點(diǎn)數(shù) 在一個(gè)大型的網(wǎng)站服務(wù)器其中,可能Linux默認(rèn)的同時(shí)可打開最大文件數(shù)不能滿足系統(tǒng)需要,我們可以通過調(diào)整文件句柄數(shù)和i-節(jié)點(diǎn)數(shù)來增加系統(tǒng)的缺省的限制。不同的Linux內(nèi)核版本有不同的調(diào)整方法。 在Linux內(nèi)核2.2.x中可以用如下命令修改: # echo '8192' > /proc/sys/fs/file-max # echo '32768' > /proc/sys/fs/inode-max 并將以上命令加到/etc/rc.c/rc.local文件中,以使系統(tǒng)每次重新啟動(dòng)時(shí)配置以上值。 在Linux內(nèi)核2.4.x中需要修改源代碼,然后重新編譯內(nèi)核才生效。編輯Linux內(nèi)核源代碼中的 include/linux/fs.h文件,將 NR_FILE 由8192改為 65536,將NR_RESERVED_FILES 由10 改為 128。編輯fs/inode.c 文件將 MAX_INODE 由16384改為262144。 一般情況下,最大打開文件數(shù)比較合理的設(shè)置為每4M物理內(nèi)存256,比如256M內(nèi)存可以設(shè)為16384,而最大的使用的i節(jié)點(diǎn)的數(shù)目應(yīng)該是最大打開文件數(shù)目的3倍到4倍。 5 使用內(nèi)存文件系統(tǒng) 在Linux中可以將一部分內(nèi)存當(dāng)作分區(qū)來使用,我們稱之為RamDisk。對(duì)于一些經(jīng)常被訪問的文件,而它們又不會(huì)被更改,可以將它們通過RamDisk放在內(nèi)存中,即可明顯地提高系統(tǒng)的性能。當(dāng)然你的內(nèi)存可要足夠大了。RamDisk有兩種,一種可以格式化,加載,在Linux內(nèi)核2.0/2.2就已經(jīng)支持,其不足之處是大小固定。另一種是內(nèi)核2.4才支持的,通過Ramfs或者tmpfs來實(shí)現(xiàn),它們不能被格式化,但是用起來靈活,其大小隨所需要的空間而增加或減少。這里主要介紹一下Ramfs和Tmpfs。 Ramfs顧名思義是內(nèi)存文件系統(tǒng),它工作于虛擬文件系統(tǒng)(VFS)層。不能格式化,可以創(chuàng)建多個(gè),在創(chuàng)建時(shí)可以指定其最大能使用的內(nèi)存大小。如果你的Linux已經(jīng)將Ramfs編譯進(jìn)內(nèi)核,你就可以很容易地使用Ramfs了。創(chuàng)建一個(gè)目錄,加載Ramfs到該目錄即可。 # mkdir -p /RAM1 # mount -t ramfs none /RAM1 缺省情況下,Ramfs被限制最多可使用內(nèi)存大小的一半。可以通過maxsize(以kbyte為單位)選項(xiàng)來改變。 # mkdir -p /RAM1 # mount -t ramfs none /RAM1 -o maxsize=10000 以上即創(chuàng)建了一個(gè)限定了最大使用內(nèi)存大小為10M的ramdisk。 Tmpfs是一個(gè)虛擬內(nèi)存文件系統(tǒng),它不同于傳統(tǒng)的用塊設(shè)備形式來實(shí)現(xiàn)的ramdisk,也不同于針對(duì)物理內(nèi)存的Ramfs。Tmpfs可以使用物理內(nèi)存,也可以使用交換分區(qū)。在Linux內(nèi)核中,虛擬內(nèi)存資源由物理內(nèi)存(RAM)和交換分區(qū)組成,這些資源是由內(nèi)核中的虛擬內(nèi)存子系統(tǒng)來負(fù)責(zé)分配和管理。Tmpfs就是和虛擬內(nèi)存子系統(tǒng)來"打交道"的,它向虛擬內(nèi)存子系統(tǒng)請(qǐng)求頁來存儲(chǔ)文件,它同Linux的其它請(qǐng)求頁的部分一樣,不知道分配給自己的頁是在內(nèi)存中還是在交換分區(qū)中。Tmpfs同Ramfs一樣,其大小也不是固定的,而是隨著所需要的空間而動(dòng)態(tài)的增減。使用tmpfs,首先你編譯內(nèi)核時(shí)得選擇"虛擬內(nèi)存文件系統(tǒng)支持(Virtual memory filesystem support)" ,然后就可以加載tmpfs文件系統(tǒng)了。 # mkdir -p /mnt/tmpfs # mount tmpfs /mnt/tmpfs -t tmpfs 為了防止tmpfs使用過多的內(nèi)存資源而造成系統(tǒng)的性能下降或死機(jī),可以在加載時(shí)指定tmpfs文件系統(tǒng)大小的最大限制。 # mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m 以上創(chuàng)建的tmpfs文件系統(tǒng)就規(guī)定了其最大的大小為32M。不管是使用ramfs還是tmpfs,必須明白的是,一旦系統(tǒng)重啟,它們中的內(nèi)容將會(huì)丟失。所以那些東西可以放在內(nèi)存文件系統(tǒng)中得根據(jù)系統(tǒng)的具體情況而定。 6 使用日志文件系統(tǒng) 如果Linux系統(tǒng)由于意外情況而沒有正常關(guān)機(jī),則可能引起文件系統(tǒng)中某些文件的元數(shù)據(jù)(meta-data即和文件有關(guān)的信息,例如:權(quán)限、所有者以及創(chuàng)建和訪問時(shí)間)遭到破壞。文件系統(tǒng)需要維護(hù)文件的元數(shù)據(jù)來保證文件的可組織和可存取,如果元數(shù)據(jù)處于不合理或不一致的狀態(tài),那么就不能訪問和存取文件。當(dāng)系統(tǒng)重新啟動(dòng)時(shí),fsck將掃描/etc/fstab文件中所列出的所有文件系統(tǒng),確保它們的元數(shù)據(jù)處于可用的狀態(tài)。如果發(fā)現(xiàn)元數(shù)據(jù)不一致,fsck將掃描和檢測(cè)元數(shù)據(jù),并糾正錯(cuò)誤。如果文件系統(tǒng)很大,這個(gè)過程將需要很長(zhǎng)的時(shí)間。為解決這個(gè)問題,可以使用日志文件系統(tǒng)。日志文件系統(tǒng)用獨(dú)立的日志文件跟蹤磁盤內(nèi)容的變化,在寫入文件內(nèi)容的同時(shí)寫入文件的元數(shù)據(jù)。每次修改文件的元數(shù)據(jù)時(shí),都要先向稱為"日志"的數(shù)據(jù)結(jié)構(gòu)登記相應(yīng)的條目。這樣,日志文件系統(tǒng)就維護(hù)了最近更改的元數(shù)據(jù)的記錄。當(dāng)加載日志文件系統(tǒng)時(shí),如果發(fā)現(xiàn)了錯(cuò)誤,不會(huì)掃描整個(gè)文件系統(tǒng)的元數(shù)據(jù),而是根據(jù)日志檢查最近被更改的元數(shù)據(jù)。所以相對(duì)于傳統(tǒng)的文件系統(tǒng)(如ext2),日志文件系統(tǒng)大大地加快了掃描和檢測(cè)的時(shí)間。 Linux下可用的日志文件系統(tǒng)很多,如XFS,JFS,Reiserfs,ext3等等。日志文件系統(tǒng)主要被設(shè)計(jì)為服務(wù)器環(huán)境提供出色性能和高可用性。當(dāng)然, Linux 工作站和家用機(jī)器也可從具有高性能的可靠日志文件系統(tǒng)中獲益。安裝日志文件系統(tǒng),一般需要下載相應(yīng)的壓縮包、為內(nèi)核打補(bǔ)丁、重新配置和重新編譯內(nèi)核。 詳細(xì)的安裝過程可訪問相應(yīng)文件系統(tǒng)的官方網(wǎng)站。 新版本的 Linux 都支持日志文件系統(tǒng),這類文件系統(tǒng)不僅提供文件完整性上快速恢復(fù),在讀寫速度上也較普通的 ext2 文件系統(tǒng)有很大提升。 文件的最后存取時(shí)間,對(duì)很多人來說沒有任何用處,因此,我們可以關(guān)閉操作系統(tǒng)記錄文件最后存取時(shí)間的功能,修改: /etc/fstab : 把 dev/hda6 /home ext2 defaults 1 2 改為: /dev/hda6 /home ext2 defaults,noatime 1 2 六、關(guān)閉多余的虛擬控制臺(tái) 我們知道從控制臺(tái)切換到 X 窗口,一般采用 Alt-F7 ,為什么呢?因?yàn)橄到y(tǒng)默認(rèn)定義了 6 個(gè)虛擬控制臺(tái),所以 X 就成了第7個(gè)。實(shí)際上,很多人一般不會(huì)需要這么多虛擬控制臺(tái)的,修改 /etc/inittab ,注釋掉那些你不需要的。 # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 #4:2345:respawn:/sbin/mingetty tty4 #5:2345:respawn:/sbin/mingetty tty5 #6:2345:respawn:/sbin/mingetty tty6 七、進(jìn)程限制“ulimit”參數(shù) Linux對(duì)于每個(gè)用戶,系統(tǒng)限制其最大進(jìn)程數(shù)?梢栽谟脩舾夸浵碌“.bashrc”文件或者實(shí)際使用與“.bashrc”功能相當(dāng)?shù)膕hell的腳本中加入這種限制。為提高性能,可以設(shè)置超級(jí)用戶root的最大進(jìn)程數(shù)為無限。編輯“.bashrc”文件(例如:vi /root/.bashrc)并加入下面一行: ulimit -u unlimited 然后退出,重新登錄。為了驗(yàn)證,可以以root身份登錄,然后鍵入: “ulimit –a”,在最大用戶進(jìn)程數(shù)一項(xiàng)中應(yīng)該顯示“unlimited”,例如: [root@deep]# ulimit -a core file size (blocks) 1000000 data seg size (kbytes) unlimited file size (blocks) unlimited max memory size (kbytes) unlimited stack size (kbytes) 8192 cpu time (seconds) unlimited max user processes unlimited
本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |