Linux通用系統優化 (1) |
發布時間: 2012/8/14 19:42:07 |
針對系統的優化工作需要根據不同的系統采用不同的辦法。本文旨在描述通用的優化 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: www.linuxdoc.org/HOWTO/Kernel-HOWTO.html Linux Kernel : www.kernel.org 編輯/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 工具掃描。 [xyj@freelamp.com]$ 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@freelamp.com /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@freelamp.com 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 和創建文件系統 使用命令"# mkraid /dev/md0" 命令初始化/dev/md0分區,
本文出自:億恩科技【www.laynepeng.cn】 |