Linux通用系統最佳化(轉)
Linux通用系統最佳化(轉)[@more@]針對系統的最佳化工作需要根據不同的系統採用不同的辦法。本文旨在描述通用的最佳化 Linux 的一些辦法。
一、編譯選項
“etc/profile”檔案含有系統大量的環境和啟動程式的配置資訊。你在該檔案中進行的配置,可以透過申請全域性環境變數來實現。因此,在該檔案中設定最佳化標誌,是一種明智的選擇。要想使x86程式獲得最佳效能,可以在編譯時,使用最佳的最佳化選項-O9 。許多程式的“Makefile”檔案中已經含有-O2選項,而-O9使編譯器採用最高階別的最佳化。儘管它將增加最終程式的大小,但這樣可以獲得更高的執行速度。編譯時,使用“-fomit-frame-pointer”選項,程式執行時,訪問變數時將使用堆疊。但是,使用這一選項,生產的程式碼將無法除錯。使用“-mcpu=cpu_type”和“-march=cpu_type”選項,Gcc將針對這種型號CPU進行專門的最佳化,但生成的程式碼只能在所指定的CPU或更高系列的CPU上執行。當我們採用 -O9來編譯程式時,或許檔案位元組數是最大的,但是往往其執行速度也是最快的。根據不同的機器架構,你可以把下面的語句加入 /etc/profile 。
對於CPU i686或PentiumPro、Pentium II、Pentium III等:
CFLAGS='-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro
-march=pentiumpro -fomit-frame-pointer -fno-exceptions'
對於CPU i586或Pentium:
CFLAGS='-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops
-fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions'
對於CPU i486:
FLAGS='-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486
-fomit-frame-pointer -fno-exceptions'
在進行完以上設定之後,緊接著把“CFLAGS LANG LESSCHARSET”加入到“etc/profile”檔案中的“export”行中:
export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC CFLAGS
LANG LESSCHARSET
然後,重新登入,這時,環境變數CFLAGS已經被賦值,編譯器和其它配置工具可以使用它。對Pentium(Pro/II/III)的最佳化必須使用egcs或pgcc編譯器。Linux的預設安裝中,已經裝上了egcs,所以無需擔心。
另外,安裝程式時,使用 tarball 格式總要比 RPM 格式來得好,因為, tarball 需要重新編譯,能針對你的機器架構作最佳化,得到最好的效能。
二、重新編譯核心
一般的 Linux 發行商釋出的 Linux 版本,其核心總是會帶有一些對你來說不是很實用的東西,例如對HAM Radio的支援,對 Token Ring 的支援等。可以檢視下面的兩個網站的資料:
Linux Kernel Howto:
Linux Kernel :
編輯/usr/src/linux/Makefile檔案,可以根據具體的cpu最佳化核心編譯。以下的引數設定將得到最佳化的核心效能。
① vi +18 /usr/src/linux/Makefile ,將HOSTCC =gcc改為 HOSTCC =egcs.
② vi +25 /usr/src/linux/Makefile
將CC =$(CROSS_COMPILE)gcc D__KERNEL__ -I$(HPATH)
改為 CC =$(CROSS_COMPILE)egcs D__KERNEL__ -I$(HPATH).
③ vi +90 /usr/src/linux/Makefile
將CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
改為CFLAGS = -Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math
-malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer
-fno-exceptions
④ vi +19 /usr/src/linux/Makefile
將HOSTCFLAGS =-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
改為HOSTCFLAGS =-Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math
-malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer
-fno-exceptions
根據以上修改後的makefile檔案重新編譯核心將得到較優的效能。
三、停止不使用的服務
Sendmail, httpd, crond, kudzu, mysql, portmap, postgresql, smb, snortd, webmin,
inetd (或者 xinetd) 等都是很棒的程式,但是如果你不會使用他們,幹嗎要讓他們佔用您寶貴的資源呢?而且,這些程式都會帶來安全隱患。一般說來,一套“乾淨”的 Linux 系統,只需要gpm, network, syslog, ssh 和 xfs。如果臨時有需要,就手工啟動好了。這些啟動指令碼一般都在/etc/rc.d/init.d目錄下。
檢查自己的機器上使用中的服務,可以採用 nmap 工具掃描。
[]$ nmap -p1-65535 211.94.129.28
Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Interesting ports on freelamp.com (211.94.129.28):
(The 65492 ports scanned but not shown below are in state: closed)
---Edited version of the output due to space considerations--
Port State Service
...
514/tcp open shell
1025/tcp open listen
1099/tcp open unknown
1214/tcp open unknown
...
檢查特定埠上正在執行的程式名,可以採用:
[ /root]# netstat -anp|more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
....
tcp 0 0 203.199.66.200:8007 203.199.66.197:1060 CLOSE 1005/java
tcp 0 0 203.199.66.200:22 203.199.66.197:3768 ESTABLISHED 1381/sshd
tcp 0 0 203.199.66.200:23 192.168.57.46:1546 ESTABLISHED 1229/in.telnetd: 19
....
最後一列顯示執行的程式及其 PID。
我們還可以採用 ps 命令檢查機器上正在執行的守護程式:
[ root]# ps xc -u 0
PID TTY STAT TIME COMMAND
...
1475 ? S 0:02 sendmail
1498 ? S 0:04 gpm
16539 ? S 0:01 httpd
...
四、最佳化磁碟
1、最佳化分割槽
在安裝系統之前,您就需要對硬碟做好恰當的規劃。劃分一定的檔案系統,不僅僅是系統本身的需要,而且在安全層面上也十分有意義。在Linux系統中,我們可以自由地組織磁碟分割槽。一個最佳化的分割槽策略,可以很好地改進Linux系統的效能,減少磁碟碎片,提高磁碟I/O能力。根據磁碟的特點,我們知道越是靠磁碟外部的柱面,旋轉越快,而且每次旋轉時,磁碟讀寫頭可以覆蓋較多的區域,也就意味著靠外部的柱面可以得到較好的效能。所以在分割槽時,我們應該考慮將訪問頻率高的,對系統效能影響相對較大的分割槽置於磁碟的靠外部分。同時,為了減少磁碟碎片,應將內容經常改變的目錄放在單獨的分割槽。從方便備份資料的角度考慮,因為很多備份工具對整個分割槽進行備份的效率要高,所以我們應將Linux系統的幾個主要的目錄作為單獨的檔案系統,為它們各自分配一個區。推薦的分割槽策略如:
在上圖中,磁碟還有一部分未分割槽的空間,為什麼不在安裝系統時,將整個磁碟分割槽呢?現在的硬碟空間比較大,而在安裝系統時,也許你所安裝的檔案加上以後增長所需要的空間用不到整個磁碟儲存空間。保留一部分未分割槽空間,當以後有新的需要時,就可以用fdisk重新將之分割槽。在分割槽時,需要注意的是,根據系統將來執行的需要或過去的經驗來估計各個分割槽的大小,以免將來空間不夠。
/dev/hda5 swap swap defaults,pri=5 0 0
/dev/hdc5 swap swap defaults,pri=5 0 0
當然,如果你的系統記憶體足夠大,而你的系統又遠遠用不了那麼多的記憶體,那也就用不到什麼虛存了。分割槽時你就可以考慮去掉交換分割槽。不過作為一個Linux伺服器,即使你的記憶體足夠大,還是應該設定交換分割槽。如果有多個硬碟的話,可以在每個硬碟上各開 swap 分割槽,另外,建議 swap 分割槽的大小為實體記憶體的兩倍。
2、使用hdparm改善Linux系統效能
如果你的Linux系統執行於IDE硬碟,可以使用hdparm工具來提高磁碟I/O的效能。不過使用hdparm要小心,因為可能破壞硬碟上的資料。所以在使用hdparm之前,仔細閱讀你的硬碟手冊。根據你具體的硬碟規格來使用相應的hdparm開關引數。對一塊UltraATA/66
EIDE 硬碟,其控制晶片支援多 PIO 模式和DMA,我們使用以下命令來調諧磁碟效能:
# /sbin/hdparm -x66 -d1 -u1 -m16 -c3 /dev/hda
選項說明:
① c3 :就是把硬碟的16位格式轉換為32位模式(32-bit mode w/sync)。控制資料如何從pci匯流排傳遞到控制器。
② m16 :改變硬碟的多路扇區的讀功能,-m16可以使得硬碟在一次i/o中斷中讀入16個扇區的資料(據具體硬碟而定)。
③ d1:開啟DMA模式。
④ x66 :在支援UDMA-capable的硬碟中,這個引數可以支援雙DMA通道的資料傳輸模式。
⑤ u1 :Linux在處理磁碟中斷時,可以unmask其他的中斷或者響應其他中斷相關的任務。
檢視以上的更改情況可以使用命令:
# /sbin/hdparm /dev/hda
測試磁碟I/O效能可以使用命令:
# /sbin/hdparm -tT /dev/hda
如果磁碟的效能有改進的話,可以使用以下命令來儲存設定:
# /sbin/hdparm -k1 /dev/hda
3、Linux下使用軟RAID
RAID(磁碟冗餘陣列)是透過將資料分佈在多個磁碟上來增強磁碟效能和可靠性的技術。如果你的系統沒有硬體RAID控制器的話,在Linux下可以透過軟體來實現RAID。RAID有很多的級別,不同的級別對硬體有不同的要求,相應也會得到不同的效能和可靠性。RAID0為資料分割,資料塊被交替寫到磁碟,可以得到最好的讀寫效能,但是不提供資料冗餘。RAID1為磁碟映象,寫到磁碟1中的一切也寫到磁碟2中,從任何一個磁碟都可以讀取。RAID3除了資料分割之外,還指定一個磁碟驅動器來儲存奇偶資訊。
在LINUX下透過軟體來實現RAID, 需要LINUX的核心支援,可以透過編譯新核心來新增對RAID的支援。然後還需編譯並安裝 raidtools
軟體包。raidtools 是可以初始化、啟動、停止及控制 RAID 陣列的使用者級工具。下面是我們用兩塊IDE硬碟在LINUX核心2.4上實現RAID0的方法。
設定分割槽 使用RAID0至少需要兩個分割槽,它們位於不同的磁碟。最好做RAID0的兩個分割槽有相同的大小。建立分割槽時,將分割槽型別指定為 "FD"。以使 Linux 核心能將它們識別為 RAID 分割槽,這樣,這些分割槽就可在每次引導時自動被檢測並啟動。如果您沒有以這種方式標記 RAID 分割槽,則在每次引導之後,必須首先輸入 "raidstart --all" 才能掛載 RAID 陣列。我們做成RAID0的兩個分割槽為hda5和hdc5。
編輯/etc/raidtab檔案 建立/etc/raidtab檔案以描述RAID陣列的配置資訊。Linux 核心使用這些資訊在引導時自動檢測並啟動 RAID 陣列,因此必須對建立的每個 RAID 陣列進行這種配置。將分割槽hda5和hdc5組成md0 RAID0陣列的配置檔案如下:
raiddev /dev/md0
raid-level 0
nr-raid-disks 2
persistent-superblock 1
chunk-size 32
device /dev/hda5
raid-disk 0
device /dev/hdc5
raid-disk 1
在raidtab檔案中,"raiddev" 條目指明要建立的 RAID 陣列;"nr-raid-disks"
指定陣列中的磁碟數目;"persistent-superblock" 設定為 1,告訴 raid 工具何時建立該卷;
"chunk-size" 以K位元組指定 RAID0 使用的塊大小;
最後,要指定的是組成該陣列的裝置即分割槽。
建立檔案系統使用命令"# mkraid /dev/md0" 命令初始化/dev/md0分割槽,同時將啟動md0 RAID0陣列。接下來,即可在md0上建立你想要得檔案系統。我們在Linux伺服器上使用的是Reiserfs日誌檔案系統,建立的命令為"# mkreiserfs /dev/md0"。
這樣,就可以像其它檔案系統那樣來載入新建立的基於RAID0的檔案系統了。
4 使用elvtune調諧磁碟I/O
在Linux核心2.4以後的版本中,可以透過磁碟I/O的排程操作,來控制磁碟I/O的響應時間和吞吐量。透過調整I/O請求在佇列中的最大等待時間,可以在響應時間和吞吐量之間調諧。如果要求較少的響應時間,那麼吞吐量將降低,反之,較長的響應時間則可以得到較大的吞吐量。可以使用工具"/sbin/elvtune"來改變最大的響應時間值。使用方法如下:
檢視當前的設定
# /sbin/elvtune /dev/hda1
修改當前的配置
# /sbin/elvtune -r 2000 -w 4000 /dev/hda1
其中-r引數針對讀操作,-w引數針對寫操作.
可以透過命令"iostat -d -x
/dev/hda1"得到的平均資訊(包括平均請求大小和平均佇列長度)來監視以上I/O配置的效果,並調整配置,以得到最佳的效能。一般來講,對於讀寫頻繁,但操作的資料量較少的Linux伺服器,且對實時性要求較高,那麼可以將引數調小。反之如果對於讀寫不頻繁,但要求具有較大的吞吐量的Linux伺服器,可以將引數調大,以獲得較大的吞吐量。
五、檔案及檔案系統調諧
1、塊大小
建立檔案系統時,可以指定塊的大小。如果將來在你的檔案系統中是一些比較大的檔案的話,使用較大的塊大小將得到較好的效能。將ext2檔案系統的塊大小調整為4096byte而不是預設的1024byte,可以減少檔案碎片,加快fsck掃描的速度和檔案刪除以及讀操作的速度。另外,在ext2的檔案系統中,為根目錄保留了5%的空間,對一個大的檔案系統,除非用作日誌檔案,5%的比例有些過多。可以使用命令
# mke2fs -b 4096 -m 1 /dev/hda6
將它改為1%並以塊大小4096byte建立檔案系統。
使用多大的塊大小,需要根據你的系統綜合考慮,如果系統用作郵件或者新聞伺服器,使用較大的塊大小,雖然效能有所提高,但會造成磁碟空間較大的浪費。比如檔案系統中的檔案平均大小為2145byte,如果使用4096byte的塊大小,平均每一個檔案就會浪費1951byte空間。如果使用1024byte的塊大小,平均每一個檔案會浪費927byte空間。在效能和磁碟的代價上如何平衡,要看具體應用的需要。
2 不使用atime屬性
當檔案被建立,修改和訪問時,Linux系統會記錄這些時間資訊。記錄檔案最近一次被讀取的時間資訊,當系統的讀檔案操作頻繁時,將是一筆不少的開銷。所以,為了提高系統的效能,我們可以在讀取檔案時不修改檔案的atime屬性。可以透過在載入檔案系統時使用notime選項來做到這一點。當以noatime選項載入(mount)檔案系統時,對檔案的讀取不會更新檔案屬性中的atime資訊。設定noatime的重要性是消除了檔案系統對檔案的寫操作,檔案只是簡單地被系統讀取。由於寫操作相對讀來說要更消耗系統資源,所以這樣設定可以明顯提高伺服器的效能。注意wtime資訊仍然有效,任何時候檔案被寫,該資訊仍被更新。
比如在你的系統中,要為/home檔案系統設定notime選項,可以修改/etc/fstab檔案相應的行如下:
LABEL=/home /home ext2 noatime 1 2
要使該設定立即生效,可執行命令"#mount -oremount /home"。這樣以後系統讀取/home下的文 件時將不會再修改atime屬性。
3 調整緩衝區重新整理引數
Linux核心中,包含了一些對於系統執行態的可設定引數。緩衝重新整理的引數可以透過調整 /proc/sys/vm/bdflush檔案來完成,這個檔案的格式是這樣的:
# cat /proc/sys/vm/bdflush
30 64 64 256 500 3000 60 0 0
每一欄是一個引數,其中最重要的是前面幾個引數。第一個數字是在"dirty"緩衝區達到多少的時候強制喚醒bdflush程式重新整理硬碟,第二個數字是每次讓bdflush程式重新整理多少個dirty塊。所謂dirty塊是必須寫到磁碟中的快取塊。接下來的引數是每次允許bd flush將多少個記憶體塊排入空閒的緩衝塊列表。 以上值為RedHat Linux 7.1中的預設值。如何修改它們呢?對不同的系統有以下兩種方法
(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
以上的設定加大了緩衝區大小,降低了bdflush被啟動的頻度,同時也增加了萬一系統崩潰丟失資料的危險性。VFS的緩衝重新整理是Linux檔案系統高效的重要原因之一,如果效能對你真的很重要,應該考慮調整這個引數。
4 調整檔案控制程式碼數和i-節點數
在一個大型的網站伺服器其中,可能Linux預設的同時可開啟最大檔案數不能滿足系統需要,我們可以透過調整檔案控制程式碼數和i-節點數來增加系統的預設的限制。不同的Linux核心版本有不同的調整方法。
在Linux核心2.2.x中可以用如下命令修改:
# echo '8192' > /proc/sys/fs/file-max
# echo '32768' > /proc/sys/fs/inode-max
並將以上命令加到/etc/rc.c/rc.local檔案中,以使系統每次重新啟動時配置以上值。
在Linux核心2.4.x中需要修改原始碼,然後重新編譯核心才生效。編輯Linux核心原始碼中的 include/linux/fs.h檔案,將 NR_FILE
由8192改為 65536,將NR_RESERVED_FILES 由10 改為 128。編輯fs/inode.c 檔案將 MAX_INODE
由16384改為262144。
一般情況下,最大開啟檔案數比較合理的設定為每4M實體記憶體256,比如256M記憶體可以設為16384,而最大的使用的i節點的數目應該是最大開啟檔案數目的3倍到4倍。
5 使用記憶體檔案系統
在Linux中可以將一部分記憶體當作分割槽來使用,我們稱之為RamDisk。對於一些經常被訪問的檔案,而它們又不會被更改,可以將它們透過RamDisk放在記憶體中,即可明顯地提高系統的效能。當然你的記憶體可要足夠大了。RamDisk有兩種,一種可以格式化,載入,在Linux核心2.0/2.2就已經支援,其不足之處是大小固定。另一種是核心2.4才支援的,透過Ramfs或者tmpfs來實現,它們不能被格式化,但是用起來靈活,其大小隨所需要的空間而增加或減少。這裡主要介紹一下Ramfs和Tmpfs。
Ramfs顧名思義是記憶體檔案系統,它工作於虛擬檔案系統(VFS)層。不能格式化,可以建立多個,在建立時可以指定其最大能使用的記憶體大小。如果你的Linux已經將Ramfs編譯進核心,你就可以很容易地使用Ramfs了。建立一個目錄,載入Ramfs到該目錄即可。
# mkdir -p /RAM1
# mount -t ramfs none /RAM1
預設情況下,Ramfs被限制最多可使用記憶體大小的一半。可以透過maxsize(以kbyte為單位)選項來改變。
# mkdir -p /RAM1
# mount -t ramfs none /RAM1 -o maxsize=10000
以上即建立了一個限定了最大使用記憶體大小為10M的ramdisk。
Tmpfs是一個虛擬記憶體檔案系統,它不同於傳統的用塊裝置形式來實現的ramdisk,也不同於針對實體記憶體的Ramfs。Tmpfs可以使用實體記憶體,也可以使用交換分割槽。在Linux核心中,虛擬記憶體資源由實體記憶體(RAM)和交換分割槽組成,這些資源是由核心中的虛擬記憶體子系統來負責分配和管理。Tmpfs就是和虛擬記憶體子系統來"打交道"的,它向虛擬記憶體子系統請求頁來儲存檔案,它同Linux的其它請求頁的部分一樣,不知道分配給自己的頁是在記憶體中還是在交換分割槽中。Tmpfs同Ramfs一樣,其大小也不是固定的,而是隨著所需要的空間而動態的增減。使用tmpfs,首先你編譯核心時得選擇"虛擬記憶體檔案系統支援(Virtual
memory filesystem support)" ,然後就可以載入tmpfs檔案系統了。
# mkdir -p /mnt/tmpfs
# mount tmpfs /mnt/tmpfs -t tmpfs
為了防止tmpfs使用過多的記憶體資源而造成系統的效能下降或當機,可以在載入時指定tmpfs檔案系統大小的最大限制。
# mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m
以上建立的tmpfs檔案系統就規定了其最大的大小為32M。不管是使用ramfs還是tmpfs,必須明白的是,一旦系統重啟,它們中的內容將會丟失。所以那些東西可以放在記憶體檔案系統中得根據系統的具體情況而定。
6 使用日誌檔案系統
如果Linux系統由於意外情況而沒有正常關機,則可能引起檔案系統中某些檔案的後設資料(meta-data即和檔案有關的資訊,例如:許可權、所有者以及建立和訪問時間)遭到破壞。檔案系統需要維護檔案的後設資料來保證檔案的可組織和可存取,如果後設資料處於不合理或不一致的狀態,那麼就不能訪問和存取檔案。當系統重新啟動時,fsck將掃描/etc/fstab檔案中所列出的所有檔案系統,確保它們的後設資料處於可用的狀態。如果發現後設資料不一致,fsck將掃描和檢測後設資料,並糾正錯誤。如果檔案系統很大,這個過程將需要很長的時間。為解決這個問題,可以使用日誌檔案系統。日誌檔案系統用獨立的日誌檔案跟蹤磁碟內容的變化,在寫入檔案內容的同時寫入檔案的後設資料。每次修改檔案的後設資料時,都要先向稱為"日誌"的資料結構登記相應的條目。這樣,日誌檔案系統就維護了最近更改的後設資料的記錄。當載入日誌檔案系統時,如果發現了錯誤,不會掃描整個檔案系統的後設資料,而是根據日誌檢查最近被更改的後設資料。所以相對於傳統的檔案系統(如ext2),日誌檔案系統大大地加快了掃描和檢測的時間。
Linux下可用的日誌檔案系統很多,如XFS,JFS,Reiserfs,ext3等等。日誌檔案系統主要被設計為伺服器環境提供出色效能和高可用性。當然,
Linux 工作站和家用機器也可從具有高效能的可靠日誌檔案系統中獲益。安裝日誌檔案系統,一般需要下載相應的壓縮包、為核心打補丁、重新配置和重新編譯核心。
詳細的安裝過程可訪問相應檔案系統的官方網站。
新版本的 Linux 都支援日誌檔案系統,這類檔案系統不僅提供檔案完整性上快速恢復,在讀寫速度上也較普通的 ext2 檔案系統有很大提升。
檔案的最後存取時間,對很多人來說沒有任何用處,因此,我們可以關閉作業系統記錄檔案最後存取時間的功能,修改: /etc/fstab :
把 dev/hda6 /home ext2 defaults 1 2
改為:
/dev/hda6 /home ext2 defaults,noatime 1 2
六、關閉多餘的虛擬控制檯
我們知道從控制檯切換到 X 視窗,一般採用 Alt-F7 ,為什麼呢?因為系統預設定義了 6 個虛擬控制檯,所以 X
就成了第7個。實際上,很多人一般不會需要這麼多虛擬控制檯的,修改
/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
七、程式限制“ulimit”引數
Linux對於每個使用者,系統限制其最大程式數。可以在使用者根目錄下的“.bashrc”檔案或者實際使用與“.bashrc”功能相當的shell的指令碼中加入這種限制。為提高效能,可以設定超級使用者root的最大程式數為無限。編輯“.bashrc”檔案(例如:vi
/root/.bashrc)並加入下面一行:
ulimit -u unlimited
然後退出,重新登入。為了驗證,可以以root身份登入,然後鍵入: “ulimit –a”,在最大使用者程式數一項中應該顯示“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 * this line.
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343
注意:你可能更傾向於在命令列鍵入“unlimit
–u”而不是把它加入到檔案“/root/.bashrc”中。但為保險起見,建議還是把它加入檔案“/root/.bashrc”中。
一些更改使用者限制的例子如下:
ulimit -n 4096 將每個程式可以開啟的檔案數目加大到4096,預設為1024
ulimit -m 4096 限制每個程式使用的記憶體數。
八、其它方面的最佳化
1 調諧buffermem
檔案buffermen和核心虛擬記憶體子系統密切相關。檔案/proc/sys/vm/buffermem控制多大記憶體被用於緩衝區(百分數表示)。核心2.4的預設值為::
"2 10 60"。可以按如下方法修改:
# echo "70 10 60" >/proc/sys/vm/buffermem
並將之加到指令碼檔案/etc/rc.d/rc.local 中。或者在/etc/sysctl.conf檔案中加入
vm.buffermem = 70 10 60
第一個引數
70意味著至少分配70%的記憶體用作緩衝區。後兩個引數保持系統的預設值。第一個引數設定為多大合適,依賴於系統的記憶體大小和系統高負載時記憶體的使用情況(可用free監視)。
2 關閉X 相關的軟體
除非有必要否則不要安裝圖形介面,如果安裝了把機器啟動後的預設介面為 Console :
修改: /etc/inittab 把
id:5:initdefault:
修改為:
id:3:initdefault:
結論:
系統最佳化的哲學可以簡單的歸結為四個字:“少就是多”;只執行那些你需要的服務,使用正確的應用來完成任務,使用命令列方式,只有充分精簡了你的系統後,你的系統效能才能充分發揮。Linux是一個靈活而又開放的系統。使用者可以針對具體的應用環境,從系統的外圍到系統的
核心進行調諧。系統的外圍的調諧包括系統硬體的配置到系統安裝和系統服務的最佳化等。系統核心的調諧包括引數的修改和改進系統的原始碼。我們除了針對系統內外的調諧之外,還應該針對不同的應用進行調諧,比如我們在針對用作mysql資料庫伺服器的Linux系統的調諧中,針對mysql資料庫的特點,按照本文的各個調諧方面外,另外還包括網路的調諧,對應用系統效能進行了綜合調諧等。同樣針對不同應用要做不同的調整,比如apache,oracle,mysql,informix等等。
一、編譯選項
“etc/profile”檔案含有系統大量的環境和啟動程式的配置資訊。你在該檔案中進行的配置,可以透過申請全域性環境變數來實現。因此,在該檔案中設定最佳化標誌,是一種明智的選擇。要想使x86程式獲得最佳效能,可以在編譯時,使用最佳的最佳化選項-O9 。許多程式的“Makefile”檔案中已經含有-O2選項,而-O9使編譯器採用最高階別的最佳化。儘管它將增加最終程式的大小,但這樣可以獲得更高的執行速度。編譯時,使用“-fomit-frame-pointer”選項,程式執行時,訪問變數時將使用堆疊。但是,使用這一選項,生產的程式碼將無法除錯。使用“-mcpu=cpu_type”和“-march=cpu_type”選項,Gcc將針對這種型號CPU進行專門的最佳化,但生成的程式碼只能在所指定的CPU或更高系列的CPU上執行。當我們採用 -O9來編譯程式時,或許檔案位元組數是最大的,但是往往其執行速度也是最快的。根據不同的機器架構,你可以把下面的語句加入 /etc/profile 。
對於CPU i686或PentiumPro、Pentium II、Pentium III等:
CFLAGS='-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro
-march=pentiumpro -fomit-frame-pointer -fno-exceptions'
對於CPU i586或Pentium:
CFLAGS='-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops
-fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions'
對於CPU i486:
FLAGS='-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486
-fomit-frame-pointer -fno-exceptions'
在進行完以上設定之後,緊接著把“CFLAGS LANG LESSCHARSET”加入到“etc/profile”檔案中的“export”行中:
export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC CFLAGS
LANG LESSCHARSET
然後,重新登入,這時,環境變數CFLAGS已經被賦值,編譯器和其它配置工具可以使用它。對Pentium(Pro/II/III)的最佳化必須使用egcs或pgcc編譯器。Linux的預設安裝中,已經裝上了egcs,所以無需擔心。
另外,安裝程式時,使用 tarball 格式總要比 RPM 格式來得好,因為, tarball 需要重新編譯,能針對你的機器架構作最佳化,得到最好的效能。
二、重新編譯核心
一般的 Linux 發行商釋出的 Linux 版本,其核心總是會帶有一些對你來說不是很實用的東西,例如對HAM Radio的支援,對 Token Ring 的支援等。可以檢視下面的兩個網站的資料:
Linux Kernel Howto:
Linux Kernel :
編輯/usr/src/linux/Makefile檔案,可以根據具體的cpu最佳化核心編譯。以下的引數設定將得到最佳化的核心效能。
① vi +18 /usr/src/linux/Makefile ,將HOSTCC =gcc改為 HOSTCC =egcs.
② vi +25 /usr/src/linux/Makefile
將CC =$(CROSS_COMPILE)gcc D__KERNEL__ -I$(HPATH)
改為 CC =$(CROSS_COMPILE)egcs D__KERNEL__ -I$(HPATH).
③ vi +90 /usr/src/linux/Makefile
將CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
改為CFLAGS = -Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math
-malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer
-fno-exceptions
④ vi +19 /usr/src/linux/Makefile
將HOSTCFLAGS =-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
改為HOSTCFLAGS =-Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math
-malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer
-fno-exceptions
根據以上修改後的makefile檔案重新編譯核心將得到較優的效能。
三、停止不使用的服務
Sendmail, httpd, crond, kudzu, mysql, portmap, postgresql, smb, snortd, webmin,
inetd (或者 xinetd) 等都是很棒的程式,但是如果你不會使用他們,幹嗎要讓他們佔用您寶貴的資源呢?而且,這些程式都會帶來安全隱患。一般說來,一套“乾淨”的 Linux 系統,只需要gpm, network, syslog, ssh 和 xfs。如果臨時有需要,就手工啟動好了。這些啟動指令碼一般都在/etc/rc.d/init.d目錄下。
檢查自己的機器上使用中的服務,可以採用 nmap 工具掃描。
[]$ nmap -p1-65535 211.94.129.28
Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Interesting ports on freelamp.com (211.94.129.28):
(The 65492 ports scanned but not shown below are in state: closed)
---Edited version of the output due to space considerations--
Port State Service
...
514/tcp open shell
1025/tcp open listen
1099/tcp open unknown
1214/tcp open unknown
...
檢查特定埠上正在執行的程式名,可以採用:
[ /root]# netstat -anp|more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
....
tcp 0 0 203.199.66.200:8007 203.199.66.197:1060 CLOSE 1005/java
tcp 0 0 203.199.66.200:22 203.199.66.197:3768 ESTABLISHED 1381/sshd
tcp 0 0 203.199.66.200:23 192.168.57.46:1546 ESTABLISHED 1229/in.telnetd: 19
....
最後一列顯示執行的程式及其 PID。
我們還可以採用 ps 命令檢查機器上正在執行的守護程式:
[ root]# ps xc -u 0
PID TTY STAT TIME COMMAND
...
1475 ? S 0:02 sendmail
1498 ? S 0:04 gpm
16539 ? S 0:01 httpd
...
四、最佳化磁碟
1、最佳化分割槽
在安裝系統之前,您就需要對硬碟做好恰當的規劃。劃分一定的檔案系統,不僅僅是系統本身的需要,而且在安全層面上也十分有意義。在Linux系統中,我們可以自由地組織磁碟分割槽。一個最佳化的分割槽策略,可以很好地改進Linux系統的效能,減少磁碟碎片,提高磁碟I/O能力。根據磁碟的特點,我們知道越是靠磁碟外部的柱面,旋轉越快,而且每次旋轉時,磁碟讀寫頭可以覆蓋較多的區域,也就意味著靠外部的柱面可以得到較好的效能。所以在分割槽時,我們應該考慮將訪問頻率高的,對系統效能影響相對較大的分割槽置於磁碟的靠外部分。同時,為了減少磁碟碎片,應將內容經常改變的目錄放在單獨的分割槽。從方便備份資料的角度考慮,因為很多備份工具對整個分割槽進行備份的效率要高,所以我們應將Linux系統的幾個主要的目錄作為單獨的檔案系統,為它們各自分配一個區。推薦的分割槽策略如:
在上圖中,磁碟還有一部分未分割槽的空間,為什麼不在安裝系統時,將整個磁碟分割槽呢?現在的硬碟空間比較大,而在安裝系統時,也許你所安裝的檔案加上以後增長所需要的空間用不到整個磁碟儲存空間。保留一部分未分割槽空間,當以後有新的需要時,就可以用fdisk重新將之分割槽。在分割槽時,需要注意的是,根據系統將來執行的需要或過去的經驗來估計各個分割槽的大小,以免將來空間不夠。
/dev/hda5 swap swap defaults,pri=5 0 0
/dev/hdc5 swap swap defaults,pri=5 0 0
當然,如果你的系統記憶體足夠大,而你的系統又遠遠用不了那麼多的記憶體,那也就用不到什麼虛存了。分割槽時你就可以考慮去掉交換分割槽。不過作為一個Linux伺服器,即使你的記憶體足夠大,還是應該設定交換分割槽。如果有多個硬碟的話,可以在每個硬碟上各開 swap 分割槽,另外,建議 swap 分割槽的大小為實體記憶體的兩倍。
2、使用hdparm改善Linux系統效能
如果你的Linux系統執行於IDE硬碟,可以使用hdparm工具來提高磁碟I/O的效能。不過使用hdparm要小心,因為可能破壞硬碟上的資料。所以在使用hdparm之前,仔細閱讀你的硬碟手冊。根據你具體的硬碟規格來使用相應的hdparm開關引數。對一塊UltraATA/66
EIDE 硬碟,其控制晶片支援多 PIO 模式和DMA,我們使用以下命令來調諧磁碟效能:
# /sbin/hdparm -x66 -d1 -u1 -m16 -c3 /dev/hda
選項說明:
① c3 :就是把硬碟的16位格式轉換為32位模式(32-bit mode w/sync)。控制資料如何從pci匯流排傳遞到控制器。
② m16 :改變硬碟的多路扇區的讀功能,-m16可以使得硬碟在一次i/o中斷中讀入16個扇區的資料(據具體硬碟而定)。
③ d1:開啟DMA模式。
④ x66 :在支援UDMA-capable的硬碟中,這個引數可以支援雙DMA通道的資料傳輸模式。
⑤ u1 :Linux在處理磁碟中斷時,可以unmask其他的中斷或者響應其他中斷相關的任務。
檢視以上的更改情況可以使用命令:
# /sbin/hdparm /dev/hda
測試磁碟I/O效能可以使用命令:
# /sbin/hdparm -tT /dev/hda
如果磁碟的效能有改進的話,可以使用以下命令來儲存設定:
# /sbin/hdparm -k1 /dev/hda
3、Linux下使用軟RAID
RAID(磁碟冗餘陣列)是透過將資料分佈在多個磁碟上來增強磁碟效能和可靠性的技術。如果你的系統沒有硬體RAID控制器的話,在Linux下可以透過軟體來實現RAID。RAID有很多的級別,不同的級別對硬體有不同的要求,相應也會得到不同的效能和可靠性。RAID0為資料分割,資料塊被交替寫到磁碟,可以得到最好的讀寫效能,但是不提供資料冗餘。RAID1為磁碟映象,寫到磁碟1中的一切也寫到磁碟2中,從任何一個磁碟都可以讀取。RAID3除了資料分割之外,還指定一個磁碟驅動器來儲存奇偶資訊。
在LINUX下透過軟體來實現RAID, 需要LINUX的核心支援,可以透過編譯新核心來新增對RAID的支援。然後還需編譯並安裝 raidtools
軟體包。raidtools 是可以初始化、啟動、停止及控制 RAID 陣列的使用者級工具。下面是我們用兩塊IDE硬碟在LINUX核心2.4上實現RAID0的方法。
設定分割槽 使用RAID0至少需要兩個分割槽,它們位於不同的磁碟。最好做RAID0的兩個分割槽有相同的大小。建立分割槽時,將分割槽型別指定為 "FD"。以使 Linux 核心能將它們識別為 RAID 分割槽,這樣,這些分割槽就可在每次引導時自動被檢測並啟動。如果您沒有以這種方式標記 RAID 分割槽,則在每次引導之後,必須首先輸入 "raidstart --all" 才能掛載 RAID 陣列。我們做成RAID0的兩個分割槽為hda5和hdc5。
編輯/etc/raidtab檔案 建立/etc/raidtab檔案以描述RAID陣列的配置資訊。Linux 核心使用這些資訊在引導時自動檢測並啟動 RAID 陣列,因此必須對建立的每個 RAID 陣列進行這種配置。將分割槽hda5和hdc5組成md0 RAID0陣列的配置檔案如下:
raiddev /dev/md0
raid-level 0
nr-raid-disks 2
persistent-superblock 1
chunk-size 32
device /dev/hda5
raid-disk 0
device /dev/hdc5
raid-disk 1
在raidtab檔案中,"raiddev" 條目指明要建立的 RAID 陣列;"nr-raid-disks"
指定陣列中的磁碟數目;"persistent-superblock" 設定為 1,告訴 raid 工具何時建立該卷;
"chunk-size" 以K位元組指定 RAID0 使用的塊大小;
最後,要指定的是組成該陣列的裝置即分割槽。
建立檔案系統使用命令"# mkraid /dev/md0" 命令初始化/dev/md0分割槽,同時將啟動md0 RAID0陣列。接下來,即可在md0上建立你想要得檔案系統。我們在Linux伺服器上使用的是Reiserfs日誌檔案系統,建立的命令為"# mkreiserfs /dev/md0"。
這樣,就可以像其它檔案系統那樣來載入新建立的基於RAID0的檔案系統了。
4 使用elvtune調諧磁碟I/O
在Linux核心2.4以後的版本中,可以透過磁碟I/O的排程操作,來控制磁碟I/O的響應時間和吞吐量。透過調整I/O請求在佇列中的最大等待時間,可以在響應時間和吞吐量之間調諧。如果要求較少的響應時間,那麼吞吐量將降低,反之,較長的響應時間則可以得到較大的吞吐量。可以使用工具"/sbin/elvtune"來改變最大的響應時間值。使用方法如下:
檢視當前的設定
# /sbin/elvtune /dev/hda1
修改當前的配置
# /sbin/elvtune -r 2000 -w 4000 /dev/hda1
其中-r引數針對讀操作,-w引數針對寫操作.
可以透過命令"iostat -d -x
/dev/hda1"得到的平均資訊(包括平均請求大小和平均佇列長度)來監視以上I/O配置的效果,並調整配置,以得到最佳的效能。一般來講,對於讀寫頻繁,但操作的資料量較少的Linux伺服器,且對實時性要求較高,那麼可以將引數調小。反之如果對於讀寫不頻繁,但要求具有較大的吞吐量的Linux伺服器,可以將引數調大,以獲得較大的吞吐量。
五、檔案及檔案系統調諧
1、塊大小
建立檔案系統時,可以指定塊的大小。如果將來在你的檔案系統中是一些比較大的檔案的話,使用較大的塊大小將得到較好的效能。將ext2檔案系統的塊大小調整為4096byte而不是預設的1024byte,可以減少檔案碎片,加快fsck掃描的速度和檔案刪除以及讀操作的速度。另外,在ext2的檔案系統中,為根目錄保留了5%的空間,對一個大的檔案系統,除非用作日誌檔案,5%的比例有些過多。可以使用命令
# mke2fs -b 4096 -m 1 /dev/hda6
將它改為1%並以塊大小4096byte建立檔案系統。
使用多大的塊大小,需要根據你的系統綜合考慮,如果系統用作郵件或者新聞伺服器,使用較大的塊大小,雖然效能有所提高,但會造成磁碟空間較大的浪費。比如檔案系統中的檔案平均大小為2145byte,如果使用4096byte的塊大小,平均每一個檔案就會浪費1951byte空間。如果使用1024byte的塊大小,平均每一個檔案會浪費927byte空間。在效能和磁碟的代價上如何平衡,要看具體應用的需要。
2 不使用atime屬性
當檔案被建立,修改和訪問時,Linux系統會記錄這些時間資訊。記錄檔案最近一次被讀取的時間資訊,當系統的讀檔案操作頻繁時,將是一筆不少的開銷。所以,為了提高系統的效能,我們可以在讀取檔案時不修改檔案的atime屬性。可以透過在載入檔案系統時使用notime選項來做到這一點。當以noatime選項載入(mount)檔案系統時,對檔案的讀取不會更新檔案屬性中的atime資訊。設定noatime的重要性是消除了檔案系統對檔案的寫操作,檔案只是簡單地被系統讀取。由於寫操作相對讀來說要更消耗系統資源,所以這樣設定可以明顯提高伺服器的效能。注意wtime資訊仍然有效,任何時候檔案被寫,該資訊仍被更新。
比如在你的系統中,要為/home檔案系統設定notime選項,可以修改/etc/fstab檔案相應的行如下:
LABEL=/home /home ext2 noatime 1 2
要使該設定立即生效,可執行命令"#mount -oremount /home"。這樣以後系統讀取/home下的文 件時將不會再修改atime屬性。
3 調整緩衝區重新整理引數
Linux核心中,包含了一些對於系統執行態的可設定引數。緩衝重新整理的引數可以透過調整 /proc/sys/vm/bdflush檔案來完成,這個檔案的格式是這樣的:
# cat /proc/sys/vm/bdflush
30 64 64 256 500 3000 60 0 0
每一欄是一個引數,其中最重要的是前面幾個引數。第一個數字是在"dirty"緩衝區達到多少的時候強制喚醒bdflush程式重新整理硬碟,第二個數字是每次讓bdflush程式重新整理多少個dirty塊。所謂dirty塊是必須寫到磁碟中的快取塊。接下來的引數是每次允許bd flush將多少個記憶體塊排入空閒的緩衝塊列表。 以上值為RedHat Linux 7.1中的預設值。如何修改它們呢?對不同的系統有以下兩種方法
(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
以上的設定加大了緩衝區大小,降低了bdflush被啟動的頻度,同時也增加了萬一系統崩潰丟失資料的危險性。VFS的緩衝重新整理是Linux檔案系統高效的重要原因之一,如果效能對你真的很重要,應該考慮調整這個引數。
4 調整檔案控制程式碼數和i-節點數
在一個大型的網站伺服器其中,可能Linux預設的同時可開啟最大檔案數不能滿足系統需要,我們可以透過調整檔案控制程式碼數和i-節點數來增加系統的預設的限制。不同的Linux核心版本有不同的調整方法。
在Linux核心2.2.x中可以用如下命令修改:
# echo '8192' > /proc/sys/fs/file-max
# echo '32768' > /proc/sys/fs/inode-max
並將以上命令加到/etc/rc.c/rc.local檔案中,以使系統每次重新啟動時配置以上值。
在Linux核心2.4.x中需要修改原始碼,然後重新編譯核心才生效。編輯Linux核心原始碼中的 include/linux/fs.h檔案,將 NR_FILE
由8192改為 65536,將NR_RESERVED_FILES 由10 改為 128。編輯fs/inode.c 檔案將 MAX_INODE
由16384改為262144。
一般情況下,最大開啟檔案數比較合理的設定為每4M實體記憶體256,比如256M記憶體可以設為16384,而最大的使用的i節點的數目應該是最大開啟檔案數目的3倍到4倍。
5 使用記憶體檔案系統
在Linux中可以將一部分記憶體當作分割槽來使用,我們稱之為RamDisk。對於一些經常被訪問的檔案,而它們又不會被更改,可以將它們透過RamDisk放在記憶體中,即可明顯地提高系統的效能。當然你的記憶體可要足夠大了。RamDisk有兩種,一種可以格式化,載入,在Linux核心2.0/2.2就已經支援,其不足之處是大小固定。另一種是核心2.4才支援的,透過Ramfs或者tmpfs來實現,它們不能被格式化,但是用起來靈活,其大小隨所需要的空間而增加或減少。這裡主要介紹一下Ramfs和Tmpfs。
Ramfs顧名思義是記憶體檔案系統,它工作於虛擬檔案系統(VFS)層。不能格式化,可以建立多個,在建立時可以指定其最大能使用的記憶體大小。如果你的Linux已經將Ramfs編譯進核心,你就可以很容易地使用Ramfs了。建立一個目錄,載入Ramfs到該目錄即可。
# mkdir -p /RAM1
# mount -t ramfs none /RAM1
預設情況下,Ramfs被限制最多可使用記憶體大小的一半。可以透過maxsize(以kbyte為單位)選項來改變。
# mkdir -p /RAM1
# mount -t ramfs none /RAM1 -o maxsize=10000
以上即建立了一個限定了最大使用記憶體大小為10M的ramdisk。
Tmpfs是一個虛擬記憶體檔案系統,它不同於傳統的用塊裝置形式來實現的ramdisk,也不同於針對實體記憶體的Ramfs。Tmpfs可以使用實體記憶體,也可以使用交換分割槽。在Linux核心中,虛擬記憶體資源由實體記憶體(RAM)和交換分割槽組成,這些資源是由核心中的虛擬記憶體子系統來負責分配和管理。Tmpfs就是和虛擬記憶體子系統來"打交道"的,它向虛擬記憶體子系統請求頁來儲存檔案,它同Linux的其它請求頁的部分一樣,不知道分配給自己的頁是在記憶體中還是在交換分割槽中。Tmpfs同Ramfs一樣,其大小也不是固定的,而是隨著所需要的空間而動態的增減。使用tmpfs,首先你編譯核心時得選擇"虛擬記憶體檔案系統支援(Virtual
memory filesystem support)" ,然後就可以載入tmpfs檔案系統了。
# mkdir -p /mnt/tmpfs
# mount tmpfs /mnt/tmpfs -t tmpfs
為了防止tmpfs使用過多的記憶體資源而造成系統的效能下降或當機,可以在載入時指定tmpfs檔案系統大小的最大限制。
# mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m
以上建立的tmpfs檔案系統就規定了其最大的大小為32M。不管是使用ramfs還是tmpfs,必須明白的是,一旦系統重啟,它們中的內容將會丟失。所以那些東西可以放在記憶體檔案系統中得根據系統的具體情況而定。
6 使用日誌檔案系統
如果Linux系統由於意外情況而沒有正常關機,則可能引起檔案系統中某些檔案的後設資料(meta-data即和檔案有關的資訊,例如:許可權、所有者以及建立和訪問時間)遭到破壞。檔案系統需要維護檔案的後設資料來保證檔案的可組織和可存取,如果後設資料處於不合理或不一致的狀態,那麼就不能訪問和存取檔案。當系統重新啟動時,fsck將掃描/etc/fstab檔案中所列出的所有檔案系統,確保它們的後設資料處於可用的狀態。如果發現後設資料不一致,fsck將掃描和檢測後設資料,並糾正錯誤。如果檔案系統很大,這個過程將需要很長的時間。為解決這個問題,可以使用日誌檔案系統。日誌檔案系統用獨立的日誌檔案跟蹤磁碟內容的變化,在寫入檔案內容的同時寫入檔案的後設資料。每次修改檔案的後設資料時,都要先向稱為"日誌"的資料結構登記相應的條目。這樣,日誌檔案系統就維護了最近更改的後設資料的記錄。當載入日誌檔案系統時,如果發現了錯誤,不會掃描整個檔案系統的後設資料,而是根據日誌檢查最近被更改的後設資料。所以相對於傳統的檔案系統(如ext2),日誌檔案系統大大地加快了掃描和檢測的時間。
Linux下可用的日誌檔案系統很多,如XFS,JFS,Reiserfs,ext3等等。日誌檔案系統主要被設計為伺服器環境提供出色效能和高可用性。當然,
Linux 工作站和家用機器也可從具有高效能的可靠日誌檔案系統中獲益。安裝日誌檔案系統,一般需要下載相應的壓縮包、為核心打補丁、重新配置和重新編譯核心。
詳細的安裝過程可訪問相應檔案系統的官方網站。
新版本的 Linux 都支援日誌檔案系統,這類檔案系統不僅提供檔案完整性上快速恢復,在讀寫速度上也較普通的 ext2 檔案系統有很大提升。
檔案的最後存取時間,對很多人來說沒有任何用處,因此,我們可以關閉作業系統記錄檔案最後存取時間的功能,修改: /etc/fstab :
把 dev/hda6 /home ext2 defaults 1 2
改為:
/dev/hda6 /home ext2 defaults,noatime 1 2
六、關閉多餘的虛擬控制檯
我們知道從控制檯切換到 X 視窗,一般採用 Alt-F7 ,為什麼呢?因為系統預設定義了 6 個虛擬控制檯,所以 X
就成了第7個。實際上,很多人一般不會需要這麼多虛擬控制檯的,修改
/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
七、程式限制“ulimit”引數
Linux對於每個使用者,系統限制其最大程式數。可以在使用者根目錄下的“.bashrc”檔案或者實際使用與“.bashrc”功能相當的shell的指令碼中加入這種限制。為提高效能,可以設定超級使用者root的最大程式數為無限。編輯“.bashrc”檔案(例如:vi
/root/.bashrc)並加入下面一行:
ulimit -u unlimited
然後退出,重新登入。為了驗證,可以以root身份登入,然後鍵入: “ulimit –a”,在最大使用者程式數一項中應該顯示“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 * this line.
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343
注意:你可能更傾向於在命令列鍵入“unlimit
–u”而不是把它加入到檔案“/root/.bashrc”中。但為保險起見,建議還是把它加入檔案“/root/.bashrc”中。
一些更改使用者限制的例子如下:
ulimit -n 4096 將每個程式可以開啟的檔案數目加大到4096,預設為1024
ulimit -m 4096 限制每個程式使用的記憶體數。
八、其它方面的最佳化
1 調諧buffermem
檔案buffermen和核心虛擬記憶體子系統密切相關。檔案/proc/sys/vm/buffermem控制多大記憶體被用於緩衝區(百分數表示)。核心2.4的預設值為::
"2 10 60"。可以按如下方法修改:
# echo "70 10 60" >/proc/sys/vm/buffermem
並將之加到指令碼檔案/etc/rc.d/rc.local 中。或者在/etc/sysctl.conf檔案中加入
vm.buffermem = 70 10 60
第一個引數
70意味著至少分配70%的記憶體用作緩衝區。後兩個引數保持系統的預設值。第一個引數設定為多大合適,依賴於系統的記憶體大小和系統高負載時記憶體的使用情況(可用free監視)。
2 關閉X 相關的軟體
除非有必要否則不要安裝圖形介面,如果安裝了把機器啟動後的預設介面為 Console :
修改: /etc/inittab 把
id:5:initdefault:
修改為:
id:3:initdefault:
結論:
系統最佳化的哲學可以簡單的歸結為四個字:“少就是多”;只執行那些你需要的服務,使用正確的應用來完成任務,使用命令列方式,只有充分精簡了你的系統後,你的系統效能才能充分發揮。Linux是一個靈活而又開放的系統。使用者可以針對具體的應用環境,從系統的外圍到系統的
核心進行調諧。系統的外圍的調諧包括系統硬體的配置到系統安裝和系統服務的最佳化等。系統核心的調諧包括引數的修改和改進系統的原始碼。我們除了針對系統內外的調諧之外,還應該針對不同的應用進行調諧,比如我們在針對用作mysql資料庫伺服器的Linux系統的調諧中,針對mysql資料庫的特點,按照本文的各個調諧方面外,另外還包括網路的調諧,對應用系統效能進行了綜合調諧等。同樣針對不同應用要做不同的調整,比如apache,oracle,mysql,informix等等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961896/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 最佳化linux系統硬碟(轉)Linux硬碟
- Linux系統配置與最佳化經驗談(轉)Linux
- 淺談linux作業系統的最佳化及安全配置(轉)Linux作業系統
- 如何最佳化Linux系統安全?Linux學習Linux
- suse10系統最佳化方法(轉)
- 介面通用最佳化
- 拯救Linux系統(轉)Linux
- 在Unix系統下用shell製作通用介面(轉)
- Linux系統Docker最佳化詳細教程。LinuxDocker
- 高手談Windows作業系統最佳化(轉)Windows作業系統
- 秘籍:全面最佳化Windows電腦系統(轉)Windows
- Windows XP 系統最佳化全攻略(轉)Windows
- Windows XP作業系統最佳化精髓(轉)Windows作業系統
- Linux系統PHP效能最佳化詳細教程。LinuxPHP
- Linux系統Memcached效能最佳化詳細教程。Linux
- Linux系統Redis效能最佳化詳細教程。LinuxRedis
- Linux檔案系統 (轉)Linux
- Linux 系統管理(上)(轉)Linux
- Linux 系統管理(中)(轉)Linux
- Linux 系統管理(下)(轉)Linux
- linux系統防DDOS(轉)Linux
- 【原創】Linux中斷子系統(二)-通用框架處理Linux框架
- 系統最佳化
- gpio子系統與pinctrl子系統通用APIAPI
- 珍惜系統盤的空間10條措施最佳化系統盤(轉)
- 實時作業系統與通用作業系統的一些比較 (轉)作業系統
- 最佳化出適合玩遊戲的WindowsXP系統(轉)遊戲Windows
- Windows XP 最佳化設定之系統篇(轉)Windows
- (七)系統通用元件編寫元件
- 資訊系統通用架構架構
- Linux系統管理命令二(轉)Linux
- linux系統升級指南(轉)Linux
- Linux命令FAQ:系統配置(轉)Linux
- Linux(admin)系統管理(轉)Linux
- 安全使用RedHat Linux系統(轉)RedhatLinux
- Linux系統呼叫講義(轉)Linux
- LINUX系統效能調諧(轉)Linux
- Linux系統管理簡介(轉)Linux