目前,對系統進行性能調試的工具備不少,
這些能夠兩大類:一類是標準的分析工具,即全部的UNIX都會帶的分析工具;
另外一類是不一樣廠商的UNIX所特有的性能分析工具,好比HP-UX就有本身的增值性能分析工具。 php
標準的分析工具,即全部的UNIX都會帶的分析工具:
sar
iostat
vmstat
time
ps
bdf
top
ipcs
uptime java
HP-UX本身的增值性能分析工具:
glance/gpm
puma
xps node
按性能分析工具的用途來講,它能夠分爲:
CPU的使用狀況:sar,time,top,ps,puma,xps
內存的使用狀況:vmstat,ipcs
文件系統狀態:dbf,iostat,sar,swapinfo,nfsstat
I/O子系統狀態:iostat
網絡性能:netstat linux
按分析時間點來分,性能分析工具能夠分爲:
日誌型分析工具,如puma,xps,它們將在對系統在某一段時間的運行狀況進行取樣,而後得出某此結果。這種分析工具很是適合於 針對那些時斷時續發生的問題進行分析,由於經過取樣,能夠得出結論;
實時型分析工具,如glance,它們又稱「快照型分析工具」,即它們將實時取出系統運行環境的數據,這種分析工具很是適合於 那些在分析工具正在運行時發生的問題,或一直髮生的問題。 ios
1.性能分析的目的web
1)找出系統性能瓶頸(包括硬件瓶頸和軟件瓶頸);
2)提供性能優化的方案(升級硬件?改進系統系統結構?);
3)達到合理的硬件和軟件配置;
4)使系統資源使用達到最大的平衡。(通常狀況下系統良好運行的時候偏偏各項資源達到了一個平衡體,任何一項資源的過渡使用都會形成平衡體系破壞,從而形成系統負載極高或者響應遲緩。好比CPU過渡使用會形成大量進程等待CPU資源,系統響應變慢,等待會形成進程數增長,進程增長又會形成內存使用增長,內存耗盡又會形成虛擬內存使用,使用虛擬內存又會形成磁盤IO增長和CPU開銷增長)
2.影響性能的因素
1)CPU(cpu的速度與性能很大一部分決定了系統總體的性能,是否使用SMP)
2)內存(物理內存不夠時會使用交換內存,使用swap會帶來磁盤I0和cpu的開銷)
3)硬盤(存儲系統)
a.Raid技術使用(RAID0, RAID1, RAID5, RAID0+1)
b.小文件讀寫瓶頸是磁盤的尋址(tps),大文件讀寫的性能瓶頸是帶寬
c.Linux能夠利用空閒內存做文件系統訪問的cache,所以系統內存越大存儲系統的性能也越好
4)網絡帶寬。
3.性能分析的步驟
1)對資源的使用情況進行長期的監控和數據採集(nagios、cacti)
2)使用常見的性能分析工具(vmstat、top、free、iostat等)
3)經驗積累
a.應用程序設計的缺陷和數據庫查詢的濫用最有可能致使性能問題
b.性能瓶頸多是由於程序差/內存不足/磁盤瓶頸,但最終表現出的結果就是CPU耗盡,系統負載極高,響應遲緩,甚至暫時失去響應
c.物理內存不夠時會使用交換內存,使用swap會帶來磁盤I0和cpu的開銷
d.可能形成cpu瓶頸的問題:頻繁執Perl,php,java程序生成動態web;數據庫查詢大量的where子句、order by/group by排序……
e.可能形成內存瓶頸問題:高併發用戶訪問、系統進程多,java內存泄露……
f.可能形成磁盤IO瓶頸問題:生成cache文件,數據庫頻繁更新,或者查詢大表……算法
按照傳統,Linux不一樣的發行版本和不一樣的內核對各項參數及設置均作了改動,從而使得系統可以得到更好的性能。
Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系統下,用如下幾種技巧進行性能的優化
一、Disabling daemons (關閉 daemons)
二、Shutting down the GUI (關閉GUI)
三、Changing kernel parameters (改變內核參數)
四、Kernel parameters (內核參數)
五、Tuning the processor subsystem(處理器子系統調優)
六、Tuning the memory subsystem (內存子系統調優)
七、Tuning the file system(文件系統子系統調優)
八、Tuning the network subsystem(網絡子系統調優)shell
1 關閉daemons
有些運行在服務器中的daemons (後臺服務),並非徹底必要的。關閉這些daemons可釋放更多的內存、減小啓動時間並減小CPU處理的進程數。
減小daemons數量的同時也加強了服務器的安全性。缺省狀況下,多數服務器均可以安全地停掉幾個daemons。
提示:關閉xfs daemon將致使不能啓動X,所以只有在不須要啓動GUI圖形的時候才能夠關閉xfs daemon。使用startx命令前,開啓xfs daemon,恢復正常啓動X。
如要看到所有的daemons,使用以下命令:
/sbin/chkconfig –list數據庫
2 關閉GUI
只要有可能,就不要在Linux server上啓動GUI圖形,一般在Linux server上,沒有必要啓動GUI。全部的管理任務都可在命令行方式下完成、或者經過重定向X和Web瀏覽器界面。
有幾個可用的基於Web的工具(例 如webmin, Linuxconf, 和SWAT).
須要的時候啓動GUI,用完立刻關閉GUI。多數狀況,服務器運行在runlevel 3,即在機器啓動的時候不進入GUI。命令行方式下,執行startx 來啓動Xserver.
缺省狀況下,保存了6個控制檯:F1……F6。爲節省內存,能夠減小爲3個。使用mingetty ttyx命令來實現
提示:即使是已經關閉了GUI,依然能夠遠程鏈接並啓動GUI,可使用ssh -xapi
3 改變內核參數
Linux內核是操做系統的核心,對全部的Linux發行版本是通用的。內核參數能夠改變,在命令行下執行sysctl 命令。
提示:缺省狀況下,LINUX內核包括沒必要重啓就可使用sysctl命令的必要的模塊。儘管如此,若是你在安裝系統的時候選擇移除該功能,那麼你只有從新啓動LINUX,纔可使得改變生效。
Red Hat也提供了圖形界面下更改sysctl參數的方式:
/usr/bin/redhat-config-proc
內核參數保存在/proc(特別是/proc/sys),提供了內核、處理器、內存、網絡及其餘組件的相關參數。每一個執行的進程都有一個以相應PID命名的目錄。
4 內核的參數
與性能關係密切的一些內核參數。
5 處理器子系統調優
處理器對於應用和數據庫服務器來說是最重要的硬件子系統之一。然而在這些系統中,CPU常常是性能的瓶頸。
在配有Xeon處理器的高端服務器中,你能夠啓用或者關閉Hyper-Threading(超線程功能)。Hyper-Threading在操做系統裏將一顆處理器虛擬化爲兩顆使用。
Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server都支持該功能,從而可使處理器在同一時刻執行兩個線程或者進程。對於支持Hyper-Threading的操做系統和軟件來講,
不須要增長CPU時鐘頻率便可使性能獲得明顯的改進。例如,在4路的服務器上起用Hyper-Threading功能並使用性能監測工具(如top)來檢測,能夠看到8顆處理器。
提示:對於Hyper-Threading:
_ 基於SMP內核的LINUX才能夠支持Hyper-Threading
_ 安裝的CPU數量越多,從Hyper-Threading得到的性能上的提升就越少。可得到的性能提升大約爲:
2顆物理CPU: 15-25%
4顆物理CPU: 1-13%
8顆物理CPU: 0-5%
EM64T 是Intel IA-32處理器的64-bit擴展。意思是,處理器可以支持更多的內存並支持64-bit應用同時徹底兼容現存的32-bit應用。
Red Hat Enterprise Linux 3 Update 2 和 SUSE LINUX Enterprise Server 9支持這種新的處理器。
Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server都包括有若干個內核包,選擇合適的內核對性能很是重要。
6 內存子系統的調優
內存子系統的調優不是很容易,須要不停地監測來保證內存的改變不會對服務器的其餘子系統形成負面影響。若是要改變虛擬內存參數(在/proc/sys/vm),建議您每次只改變一個參數而後監測效果。
對於虛擬內存的調整包括如下幾個項目:
配置Linux內核如何更新dirty buffers到磁盤緩衝區用於暫存磁盤的數據。相對於內存來說,磁盤緩衝區的速度很慢。所以,若是服務器使用這類內存,性能會成問題。
當緩衝區內的數據徹底dirty,使用:
sysctl -w vm.bdflush="30 500 0 0 500 3000 60 20 0"
vm.bdflush有9個參數,可是建議您只改變其中的3個:
1 nfract, 爲排隊寫入磁盤前,bdflush daemon容許的緩衝區最大百分比
2 ndirty, 爲bdflush即刻寫的最大緩衝區的值。若是這個值很大,bdflush須要更多的時間完成磁盤的數據更新。
7 nfract_sync, 發生同步前,緩衝區變dirty的最大百分比。
配置kswapd daemon,指定Linux的內存交換頁數量
sysctl -w vm.kswapd="1024 32 64"
三個參數的描述以下:
– tries_base 至關於內核每次所交換的「頁」的數量的四倍。對於有不少交換信息的系統,增長這個值能夠改進性能。
– tries_min 是每次kswapd swaps出去的pages的最小數量。
– swap_cluster 是kswapd 即刻寫如的pages數量。數值小,會提升磁盤I/O的性能;數值大可能也會對請求隊列產生負面影響。
若是要對這些參數進行改動,請使用工具vmstat檢查對性能的影響。其它能夠改進性能的虛擬內存參數爲:
_ buffermem
_ freepages
_ overcommit_memory
_ page-cluster
_ pagecache
_ pagetable_cache
7 文件子系統的調優
整體而言,全部數據都要從磁盤獲取並都要保存到磁盤。磁盤訪問速度一般以毫秒來計算,比其它組件要慢上千倍(如內存、PCI操做是以納秒或者微秒來計算的)。
Linux文件系統定義了數據存儲和訪問的方式。
Linux可用的文件系統有多種,它們的性能和可擴展性各不相同。除了保存和管理磁盤數據,文件系統還負責保證數據的完整性。新版的Linux缺省安裝已經包括日誌文件系統(journaling file systems),
日誌文件系統可防止系統崩潰時致使的數據不一致問題。對文件系統元數據(metadata)的更改都被保存在一份單獨的日誌裏,當發生系統崩潰時能夠根據日誌正確地恢復數據。
除此以外,日誌使系統從新啓動時沒必要進行文件系統的檢查,從而縮短了恢復時間。同其餘方面的計算同樣,性能和完整性是相互平衡的。然而,因Linux服務器多用於企業環境及數據中心,
所以要求具有更高的可用性。這裏,咱們將介紹Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server的文件系統及其性能調優。
文件子系統的調優
ulimit -a 用來顯示當前的各類用戶進程限制。
Linux對於每一個用戶,系統限制其最大進程數。
暫時地,適用於經過 ulimit 命令登陸 shell 會話期間。
永久地,經過將一個相應的 ulimit 語句添加到由登陸 shell 讀取的文件中,即特定於 shell 的用戶資源文件,
解除 Linux 系統的最大進程數和最大文件打開數限制:
vi /etc/security/limits.conf
# 添加以下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
修改全部 linux 用戶的環境變量文件:
vi /etc/profile
有時候在程序裏面須要打開多個文件,進行分析,系統通常默認數量是1024,(用ulimit -a能夠看到)對於正常使用是夠了,可是對於程序來說,就太少了。
1./etc/security/limits.conf
2./etc/pam.d/login
3.通常用戶的 .bash_profile
磁盤子系統調優
磁盤在 LAMP 架構中扮演着重要的角色。靜態文件、模板和代碼都來自磁盤,組成數據庫的數據表和索引也來自磁盤。對磁盤的許多調優(尤爲是對於數據庫)集中於避免磁盤訪問,
由於磁盤訪問的延遲至關高。所以,花一些時間對磁盤硬件進行優化是有意義的。
首先要作的是,確保在文件系統上禁用 atime 日誌記錄特性。atime 是最近訪問文件的時間,每當訪問文件時,底層文件系統必須記錄這個時間戳。由於
系統管理員不多使用 atime,禁用它能夠減小磁盤訪問時間。禁用這個特性的方法是,在 /etc/fstab 的第四列中添加 noatime 選項。
/dev/VolGroup00/LogVol00 / ext3 defaults,noatime 1 1
在 /dev/hd 上執行的速度測試
# hdparm -t /dev/hda
不幸的是,對於 Fiber Channel and Small Computer Systems Interface(SCSI)系統,調優依賴於具體的驅動器。
7.1 安裝Linux前
硬件方面的考慮
當前Linux的發行版本對CPU、硬盤和內存方面均有明確的安裝要求。然而,對於如何設置磁盤子系統的說明遠遠不夠。因爲Linux服務器被普遍的應用於各類環境,數據中心的服務器整合,
咱們首先要回答的問題就是:「該服務器的功能是什麼?」
磁盤子系統多是整個服務器系統性能的主要方面。瞭解服務器的功能是判斷I/O子系統對性能產生多大影響的關鍵。
下面幾種服務器的磁盤I/O性能是很是重要的:
_ 文件和打印服務器要求在用戶和磁盤子系統之間快速地移動數據。因文件服務器的功能是向客戶端發送數據,因此要快速讀取全部的數據。
_ 數據庫服務器的最終目標是從磁盤上的數據倉庫裏查找和獲取數據。即使有足夠的內存,多數數據庫服務器依然須要大量的磁盤I/O將數據讀入內存和更新磁盤數據。
下面幾種服務器的磁盤I/O性能不是最重要的:
_ 郵件服務器用於電子郵件的存儲和轉發,一般產生較大的通訊量。對這類服務器來說,網絡性能更爲重要。
_ Web服務器用於發佈靜態和動態的Web頁面,網絡和內存子系統的性能很是重要。
磁盤技術的選擇
除了理解服務器功能,還要了解磁盤容量的部署。
下面是當前幾種可選的磁盤技術及其容量、特色:
技術 花費 功能 容量及其限制
EIDE 最低 直連、本地存儲 低端服務器,如x305 每控制器最多2塊盤
SCSI 低 直連、本地存儲 中、高端服務器,如x34六、x365 已經使用了10年的標準;對數據線長度、傳輸帶寬和磁盤數量均有限制,單個通道的併發訪問的數量也有所限制,限制了羣集功能
SATA 低 中端數據存儲應用 2002年開始出現,是EIDE技術的延續;點對點協議,每一個驅動器都有一個獨立的通道,加強擴展能力;連續的磁盤訪問性能可與SCSI相比;支持RAID
iSCSI 較低 中端數據存儲,如Web/文件服務器 定位於中端存儲和遠程啓動;節省基礎架構的開銷,提供了TCP/IP/Ethernet的靈活性和可靠性;TCP/IP的高延遲影響性能;目前Red Hat Enterprise Linux還不支持
Fibre Channel 高 高端的企業存儲,如數據庫服務器 低延遲、高吞吐量,長傳輸距離可達10千米 2 Gbps傳輸速率;路徑冗餘功能提升可靠性;一個光纖環路支持127個設備,共享帶寬,實現大規模羣集
磁盤數量的選擇
磁盤的數量多少會影響到系統性能。對磁盤容量的需求一般是考慮磁盤數量的惟一因素,而忽視了吞吐量的因素。好的性能是依賴於提供I/O讀寫的磁頭數量。
可經過RAID技術來實現,包括軟RAID和硬件RAID。許多型號的xSeries服務器提供了硬件RAID支持,Linux 還提供了軟RAID功能。2.4 Linux kernel的軟RAID是經過md設備驅動實現的,
支持EIDE或SCSI硬盤。支持的RAID級別爲RAID-0, RAID-1,和RAID-5,能夠在初始安裝配置或者用mdadm工具配置。
提示:一般增長硬盤數量是提升磁盤性能的一個最有效方法。
7.2 Ext3: Red Hat的缺省文件系統
從Red Hat 7.2開始,缺省文件系統爲Ext3。相對於Ext2,增長了日誌。其主要特色爲:
_ Availability(可用性):Ext3提供數據的寫一致功能。即意外宕機狀況下,不須要檢查數據的一致性,使系統恢復時間從幾小時縮短爲幾秒鐘。
_ Data integrity(數據完整性):經過mount命令定義日誌方式:data=journal,全部的數據,包括文件數據和元數據,都被定義爲日誌型。
_ Speed(速度):經過定義日誌方式:data=writeback, 能夠選擇得到數據完整性仍是寫速度的優點來知足不一樣的業務需求。
_ Flexibility(靈活性):從Ext2升級到Ext3很是簡單,且不須要從新格式化硬盤。使用命令tune2fs 並編輯文件/etc/fstab,即可完成升級。注意,Ext3可被mount爲不帶日誌屬性的ext2文件系統。
另外,許多第三方廠家兼容Ext3 file systems,如PartitionMagic。
7.3 ReiserFS: SUSE LINUX的缺省文件系統
從SUSE LINUX 7.1開始,缺省安裝的文件系統即爲由Hans Reiser開發的ResierFS。在其設計之初便包括以下性能方面的考慮 From its initial design, key performance aspects have included:
_ 日誌文件系統(Journaling)的設計提升了可靠性和恢復速度。
_ 使用平衡樹數據結構能夠同時存儲內容數據和安全元數據,使其得到更快的訪問速度。
_ 有效地利用磁盤空間,與其餘文件系統不一樣,ResierFS不依賴於數據塊的大小。Efficient use of disk space because, unlike other file systems, this file system does not rely on block sizes.
目前SUSE LINUX Enterprise Server 8的ReiserFS爲V3.6,下一代文件系統是Reiser4。Reiser4提供的是不間斷的文件系統,經過實現「atomic」文件系統避免系統崩潰,保證完成I/O操做;使用新的訪問算法來獲取2到5倍的性能提升。
提示: Red Hat Enterprise Linux AS不支持ReiserFS
7.4 經過Linux kernel對文件系統調優
缺省文件系統的設置或許適合大多數應用環境。儘管如此,咱們仍是提供了以下幾個提升磁盤性能的方法:
訪問時間更新
linux文件系統當文件被訪問,建立,更新的時候會保留紀錄。默認的,當文件讀寫操做的時候,系統會更新last-time-read屬性。由於寫操做是比較耗費資源的操做,減小沒必要要的i/o能夠總體上提升磁盤性能。
在掛接文件系統的時候,加入noatime參數能夠禁止inode節點訪問時間的修改。若是文件更新時間對於特定的應用不是很重要的話,好比web服務,就能夠把noatime參數加入/etc/fstab文件中
好比:
/dev/sdb1 /mountlocation ext3 defaults,noatime 1 2
推薦利用單獨的分區做爲掛接點並打開noatime開關
Tuning the elevator algorithm(調整階梯算法)
磁盤I/O 階梯算法產生於V2.4 kernel。它是經過控制I/O請求得到服務前在隊列中等待時間,來調整塊I/O的運算法則。
這是由調整階梯算法的讀寫值實現的。經過增長延遲(更大的讀、寫值),I/O請求在隊列中等待更長時間,給I/O scheduler更好地完成I/O操做,改進性能。
對應用於大量磁盤I/O的Linux服務器,要在吞吐量和延遲方面找到一個合理的平衡點。Linux文件系統使用塊設備,所以改進塊讀寫的頻率能夠改進文件系統的性能。
一個準則是,小緩存、平橫的長延遲讀寫有利於大量磁盤I/O的Linux服務器。階梯算法的調整是一個交互的過程,首先要得到基準性能曲線,
而後改動設置,觀察效果。Example 10-1給出瞭如何用/sbin/elvtune命令顯示當前設置以及如何改動讀寫隊列的數值。
提示:Red Hat建議您將讀延遲(-r)調整爲寫延遲(-w)的一半。
作過改動以後,確保/sbin/elvtune call被加到/etc/rc.d/rc.local (Red Hat)或者/etc/init.d/boot.local (SUSE LINUX)中,使設置在系統從新啓動後生效。
redhat推薦調整升降算法來讓讀延遲是寫延遲的一半
提示:2.6核心的linux指出elvtune命令已經做廢,取而代之的是調整/sys/block結構
選擇Ext3文件系統的日誌模式
Ext3文件系統可選三種日誌模式,使用mount命令來完成:
_ data=journal
文件數據和元數據均設置爲日誌方式,性能開銷比較大
_ data=ordered (缺省設置)
順序寫入,先寫文件數據,再寫元數據
_ data=writeback
提供最快的訪問速度,可是犧牲了數據的一致性。元數據仍然被記錄到日誌,從而確保元數據的完整。文件數據會在系統崩潰以後恢復到原先的狀態。
三種方法改變日誌模式:
_ 使用mount 命令:
mount -o data=writeback /dev/sdb1 /mnt/mountpoint 這裏/dev/sdb1 是掛載的文件系統
_ 在/etc/fstab文件的選項中:
/dev/sdb1 /testfs ext3 defaults,journal=writeback 0 0
_ 更改root分區的data=ordered,更改上述/etc/fstab 文件,執行mkinitrd命令來掃描/etc/fstab 文件並建立新的印象文件。升級grub或lilo指向新的印象文件。更多有關Ext3的介紹,請參考:
http://www.redhat.com/support/wpapers/redhat/ext3/
Tuning ReiserFS (調整ReiserFS)
ReiserFS的優點之一是支持大量的小文件。取代傳統Linux文件系統的塊結構,ReiserFS使用樹型結構,保存小文件的所有內容和大文件的結尾。ReiserFS不使用固定的塊大小,
避免出現碎片而浪費磁盤空間。掛載ReiserFS 文件系統時,有一個選項能夠改進系統性能,可是會消耗更多的磁盤空間。使用notail來關閉「tail packing」選項
Setting bdflush
經過調整虛擬內存子系統也能夠改進文件系統性能。Bdflush內核進程保證dirty buffers (任何當前被修改的只存在於易失性內存的數據)與磁盤一致。修改/proc/sys/vm/bdflush變量,
來改變寫入磁盤速率,避免磁盤競爭問題。對/proc下的任何修改即刻生效,可是從新啓動後會恢復到原來狀態。在/etc/rc.d/rc.local文件中加入echo命令使所作的修改永久生效。
1. 對於2.4 Linux kernels,在/proc/sys/vm/bdflush
包括九個變量:nfract:dirty buffers在buffer cache中的最大百分比。Nfract值越大,寫入磁盤的延遲越長。當內存不足時,大量的I/O操做被處理。爲使磁盤I/O操做均勻分佈,保持較低的值。
2. Ndirty:bdflush process能夠一次寫入磁盤的最大dirty buffers值。該值過大會致使大量I/O請求,太小會在bdflush daemon執行不夠頻繁的時候致使內存不足。
3. dummy2 未使用
4. dummy3 未使用
5. interval 喚醒kupdate的最低速率。缺省是5秒,最小0秒,最大600秒。
6. age_buffer操做系統將buffer cache寫入磁盤前等待的最長時間。缺省30秒,最小1秒,最大6000秒。
7. nfract_sync 激活bdflush同步的dirty buffers百分比,缺省爲60%.
8. nfract_stop 中止bdflush的dirty buffers百分比,卻省爲20%.
9. dummy5 未使用
SCSI 磁盤的標籤命令隊列Tagged command queuing (TCQ),產生於SCSI-2標準,是一種將到達SCSI驅動器的指令序列進行打標籤和從新排序的方法。對於繁重、隨機訪問的I/O負荷,
這種方法經過對I/O請求的重排序,使驅動器磁頭位置最優化,改進I/O性能。一些IBM xSeries服務器集成了Adaptec AIC-7xxx SCSI控制器。
執行命令:cat /proc/scsi/aic7xxx/0來檢查當前TCQ的設置,沒必要從新編譯內核。能夠在/etc/modules.conf中添加以下兩行內容,指定參數aic7xxx=global_tag_depth:xx
Block sizes塊大小
數據塊大小是磁盤讀寫的最小單位,直接影響服務器性能。若是服務器處理的多爲小文件,那麼較小的數據塊尺寸會更有效。反之,若是服務器處理的多爲大文件,
大的數據尺寸塊會提升系統性能。若是要改變數據塊的大小必須從新格式化磁盤。作了RAID的磁盤,stripe size 就是數據塊的容量(光纖盤採用segment)。根據應用的不一樣合理選擇正確的塊大小,
一般的原則是順序讀寫應用宜使用大的塊容量,象數據庫這樣的隨機讀寫操做使用等同於記錄大小的塊容量更合適。
不一樣系統版本,可選的塊大小不一樣:
_ Red Hat Enterprise Linux AS with Ext3 可選的塊大小爲1 KB, 2 KB和4 KB
_ SUSE LINUX Enterprise Server with ReiserFS可選的塊大小爲4 KB
分區設置的原則
Linux缺省安裝建立三個分區:
_ 一個swap分區(自動設定爲2倍內存大小但不超過2 GB)
_ 一個小的boot分區:/boot (例如100 MB)
_ 其它空間給根分區 /
關於Linux磁盤分區的優化存在許多的爭論。若是隻有一個根分區的話,對於未來要增長新分區時會比較麻煩。而分區太多對文件系統的管理又會變的複雜。Linux安裝過程當中,容許建立多個分區。
建立多個磁盤分區的好處:
_ 文件系統出色的顆粒度屬性使安全性獲得改進。例如,容許全部用戶和進程容易地訪問/var和/tmp分區,並防止惡意訪問。經過將這些分區分佈到不一樣的磁盤,可在不影響系統正常運行的狀況下對一些分區進行重建和恢復。
_ 某塊磁盤故障致使的數據丟失不影響其餘磁盤的數據,改進數據完整性。
_ 全新的安裝或升級不影響其它分區。
_ 更有效的備份過程
設計分區時要考慮到備份工具,要了解備份工具是以分區爲邊界或是以更細顆粒度級別,如文件系統爲邊界。下表列出了要考慮與根分區分開的五個分區,這些分區的劃分能夠改進性能和靈活性。
要更深層瞭解Linux文件系統和分區,訪問以下關於文件系統層次的網頁
http://www.pathname.com/fhs
7.5 交換分區
當物理內存被所有佔用,而系統又須要更多的內存時,交換設備發揮做用。這時,系統會將內存中不多使用的數據交換到磁盤的交換分區,釋放物理內存。
最初的交換分區在安裝系統的過程創建,原則上是兩倍的物理內存大小。Linux kernels 2.4 支持每分區24GB的交換分區,32-bit系統理論上支持最大8T分區大小。交換分區存在於獨立的磁盤。
對於安裝好的系統,增長內存時,須要設置更多的交換空間。兩種方法能夠實現:
·建立一個新的分區做爲交換分區。若是沒有空閒空間建立新的分區,能夠建立一個交換文件。
·若有選擇,最好是建立一個交換分區。
從磁盤I/O到交換分區繞過了文件系統,全部的性能開銷都在寫文件上,所以使提升了性能。
另一種改進性能的方法是建立多個交換空間,實現並行讀寫磁盤。增長了交換分區或交換文件後,/etc/fstab文件包含如Example 10-5所示內容:
一般狀況下,Linux首先使用/dev/sda2作爲交換分區,而後是/dev/sdb2,依次類推,直到得到足夠的交換空間。也就是說,當沒有更大空間需求的話,
只有/dev/sda2被使用。將數據分散到更多的交換分區能夠改進性能,這是由於全部的讀寫請求是被並行處理的。若是按照Example 10-6改變文件配置,能夠給前三個分區賦予更高的優先級。
交換分區是從最高優先級開始使用的(32767最高,0爲最低),給前三個分區賦予相同的優先級使數據被寫到三個磁盤中;而不是寫滿一個再寫下一個。三個分區並行使用,以提升性能。
當前三個分區用滿以後,第四個分區開始啓用。也能夠將全部分區設置爲同一個優先級,可是假如這裏有一塊磁盤的速度比其它磁盤慢的話,性能就會降低。
一般的作法是把交換分區放在最快的磁盤中。
提示:交換分區不是物理內存的替代品,它存在於物理磁盤中,性能遠遠低於內存訪問速度。
8 網絡子系統的調優
操做系統安裝完畢,就要對網絡子系統進行調優。對其它子系統的影響:影響CPU利用率,尤爲在有大量TCP鏈接、塊尺寸又很是小時,內存的使用會明顯增長。
如何預防性能降低
以下的sysctl命令用於改變安全設置,可是它也能夠防止網絡性能的降低。這些命令被設置爲缺省值。
a.關閉以下參數能夠防止黑客對服務器IP地址的攻擊
b.開啓TCP SYN cookies,保護服務器避免受syn-flood攻擊,包括服務取決denial-of-service (DoS) 或者分佈式服務拒絕distributed denial-of-service (DDoS) (僅適用Red Hat Enterprise Linux AS)
c.如下命令使服務器忽略來自被列入網關的服務器的重定向。因重定向能夠被用來進行攻擊,因此咱們只接受有可靠來源的重定向。
d.另外,你能夠配置接受或拒絕任何ICMP重定向。ICMP重定向是路由器傳輸路由信息的機制。好比,當網關接收到來自所接網絡主機的Internet數據報時,
網關能夠發送重定向信息到一臺主機。網關檢查路由表得到下一個網關的地址,第二個網關將數據報路由到目標網絡.關閉這些重定向的命令以下:
e.若是這個服務器不是一臺路由器,那麼它不會發送重定向,因此能夠關閉該功能:
f.配置服務器拒絕接受廣播風暴或者smurf 攻擊attacks:
g.忽略全部icmp包或者pings:
h.有些路由器針對廣播幀發送無效的迴應,每一個都產生警告並在內核產生日誌.這些迴應能夠被忽略:
針對TCP和UDP的調優
下邊的命令用來對鏈接數量很是大的服務器進行調優.
a.對於同時支持不少鏈接的服務器,新的鏈接能夠從新使用TIME-WAIT套接字.這對於Web服務器很是有效:
b.若是你使用該命令,還要啓動TIME-WAIT 套接字狀態的快速循環功能:
圖Figure 10-7顯示出將這些功能啓用,鏈接數量明顯下降.由於每一個TCP傳輸都包含遠程客戶端的協議信息緩存,因此有利於提升性能.緩存中存放round-trip時間、最大segment大小、擁塞窗口的信息。
c.參數tcp_fin_timeout 是套接字關閉時,保持FIN-WAIT-2狀態的時間。一個TCP鏈接以three-segment SYN序列開始, 以three-segment FIN序列結束.均不保留數據.經過改變tcp_fin_timeout的值,
從FIN序列到內存能夠空閒出來處理新鏈接的時間縮短了,使性能獲得改進.改變這個值的前要通過認真的監測,避免由於死套接字形成內存溢出.
d.服務器的一個問題是,同一時刻的大量TCP鏈接裏有不少的鏈接被打開可是沒有使用. TCP的keepalive功能檢測到這些鏈接,缺省狀況下,在2小時以後丟掉.
2個小時的可能致使內存過分使用,下降性能.所以改爲1800秒(30分鐘)是個更好的選擇:
e.對於全部協議的隊列,設置最大系統發送緩存(wmem) 和接收緩存(rmem)到8MB
這些設置指定了建立TCP套接字時爲其分配的內存容量. 另外,使用以下命令發送和接收緩存.該命令設定了三個值:最小值、初始值和最大值.第三個值必須小於或等於wmem_max和rmem_max。
f.(SUSE LINUX Enterprise Server適用) 經過保留路徑驗證來源數據包。缺省狀況下,路由器轉發全部的數據包,即使是明顯的異常網絡流量。經過啓動和是的過濾功能,丟掉這些數據包:
g.當服務器負載繁重或者是有不少客戶端都是超長延時的鏈接故障,可能會致使half-open鏈接數量的增長。這對於Web服務器很來說很日常,尤爲有不少撥號客戶時.
這些half-open鏈接保存在 backlog connections 隊列中.將這個值最少設置爲4096 (缺省爲1024). 即使是服務器不接收這類鏈接,設置這個值還能防止受到denial-of-service (syn-flood)的攻擊.
h.設置ipfrag參數,尤爲是NFS和Samba服務器。這裏,咱們能夠設置用於從新組合IP碎片的最大、最小內存。當ipfrag_high_thresh值被指派,碎片會被丟棄直到達到ipfrag_low_thres值。
當TCP數據包傳輸發生錯誤時,開始碎片整理。有效的數據包保留在內存,同時損壞的數據包被轉發。例如,設置可用內存範圍從256 MB到384 MB:
以上所作的這些優化在某種程度上會加強服務器的負載性能。但請注意,最佳的配置是實踐出來的。
典型的,提供大量靜態文件訪問的web服務器,緩存服務器(如squid), 均要注意這個問題
網上的教程,大約只是簡單說明了如何設置ulimit和file-max, 但並無說清楚這二者之間的差異,讓人一頭霧水
1. file-max的含義
man proc,可獲得file-max的描述:
/proc/sys/fs/file-max
This file defines a system-wide limit on the number of open files for all processes. (See
also setrlimit(2), which can be used by a process to set the per-process limit,
RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages
about running out of file handles, try increasing this value:
這個值在kernel的文檔裏是這樣描述的:
The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate. When you get a lot of error messages about running out of file handles, you might want to raise this limit. The default value is 10% of RAM in kilobytes. To change it, just write the new number into the file:
意思是file-max通常爲內存大小(KB)的10%來計算,若是使用shell,能夠這樣計算:
grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'
通常咱們不須要主動設置這個值,除非這個值確實較小(可能有各類其餘緣由致使file-max沒有設置爲內存的10%)
如何查看當前kernel的句柄;
cat /proc/sys/fs/file-nr
file-nr在內核文檔裏得解釋以下:
Historically, the three values in file-nr denoted the number of allocated file
handles, the number of allocated but unused file handles, and the maximum
number of file handles. Linux 2.6 always reports 0 as the number of free file
handles -- this is not an error, it just means that the number of allocated
file handles exactly matches the number of used file handles.
即file-max是設置 系統全部進程一共能夠打開的文件數量 。同時一些程序能夠經過setrlimit調用,設置每一個進程的限制。若是獲得大量使用完文件句柄的錯誤信息,是應該增長這個值。也就是說,這項參數是系統級別的。echo 6553560 > /proc/sys/fs/file-max或修改 /etc/sysctl.conf, 加入fs.file-max = 6553560 重啓生效2. ulimit的Provides control over the resources available to the shell and to processes started by it, on systems that allow such control.即設置當前shell以及由它啓動的進程的資源限制。顯然,對服務器來講,file-max, ulimit都須要設置,不然就可能出現文件描述符用盡的問題,爲了讓機器在重啓以後仍然有效,強烈創建做如下配置,以確保file-max, ulimit的值正確無誤:1. 修改/etc/sysctl.conf, 加入fs.file-max = 65535602.系統默認的ulimit對文件打開數量的限制是1024,修改/etc/security/limits.conf並加入如下配置,永久生效* soft nofile 65535* hard nofile 65535修改完以後,重啓便可生效