Linux服務(wù)器性能優(yōu)化
Linux服務(wù)器全球知名,它和Windows之間最主要的差異在于,Linux服務(wù)器默認(rèn)情況下一般不提供GUI(圖形用戶界面),而是命令行界面,它的主要目的是高效處理非交互式進(jìn)程,響應(yīng)時(shí)間并不是那么重要,相反,能夠長(zhǎng)時(shí)間處理高負(fù)載才是最關(guān)鍵的。
Linux高可用服務(wù)器集群解決方案讓IT系統(tǒng)管理員可以從容應(yīng)對(duì)許多常見的硬件和軟件故障,允許多臺(tái)計(jì)算機(jī)一起工作,為關(guān)鍵服務(wù)正常運(yùn)行提供保障,系統(tǒng)管理員可以不中斷服務(wù)執(zhí)行維護(hù)和升級(jí)。
Linux服務(wù)器有各種用途,如Web服務(wù)器或分支機(jī)構(gòu)內(nèi)部服務(wù)器,CMS或CRS服務(wù)器,文件服務(wù)器(為Windows和或Linux用戶服務(wù)),VoIP電話服務(wù)器,郵件或域名服務(wù)器,數(shù)據(jù)庫服務(wù)器,云計(jì)算配置中的基礎(chǔ)設(shè)施節(jié)點(diǎn)等。
Linux功能豐富、強(qiáng)大、靈活,你可以用它完成各種任務(wù),在這篇文章中,我們將討論一些提高Linux服務(wù)器性能的技巧。
1. 為磁盤I/O調(diào)整Linux內(nèi)核電梯算法
在選擇文件系統(tǒng)后,有一些內(nèi)核和掛載選項(xiàng)可能會(huì)影響到它的性能表現(xiàn),其中一個(gè)內(nèi)核設(shè)置是電梯算法,通過調(diào)整電梯算法,系統(tǒng)可以平衡低延遲需求,收集足夠的數(shù)據(jù),以有效地組織對(duì)磁盤的讀和寫請(qǐng)求。
2. 禁用不必要的守護(hù)進(jìn)程
每臺(tái)服務(wù)器上都運(yùn)行著許多守護(hù)進(jìn)程或服務(wù),而具有諷刺意味的是,有很多通常不是必需的,這些服務(wù)沒有發(fā)揮作用,但卻消耗了寶貴的內(nèi)存和CPU時(shí)間。此外,它們可能將服務(wù)器置于危險(xiǎn)境地,多運(yùn)行一個(gè)服務(wù)就等于多向黑客打開一扇長(zhǎng)驅(qū)直入的門,因此,你應(yīng)該將它們從服務(wù)器移除,禁用它們最大的好處是可以加快啟動(dòng)時(shí)間,釋放內(nèi)存。另外,你可以減少CPU需要處理的進(jìn)程數(shù),禁用它們的另一個(gè)好處是增強(qiáng)服務(wù)器的安全性,因?yàn)樵缴俚氖刈o(hù)進(jìn)程意味著可被攻擊和利用的漏洞越少。
下面是一些應(yīng)該被禁用的Linux守護(hù)進(jìn)程,默認(rèn)情況下,它們都是自動(dòng)運(yùn)行的:
序號(hào) 守護(hù)進(jìn)程 描述
1 Apmd 高級(jí)電源管理守護(hù)進(jìn)程
2 Nfslock 用于NFS文件鎖定
3 Isdn ISDN Moderm支持
4 Autofs 在后臺(tái)自動(dòng)掛載文件系統(tǒng)(如自動(dòng)掛載CD-ROM)
5 Sendmail 郵件傳輸代理
6 Xfs X Window的字體服務(wù)器
3. 關(guān)掉GUI
一般說來,Linux服務(wù)器是不需要GUI的,所有管理任務(wù)都可以在命令行下完成,因此最好關(guān)掉GUI,重定向X顯示或通過一個(gè)Web瀏覽器界面顯示。為了禁用GUI,“init level(啟動(dòng)級(jí)別)”應(yīng)該被設(shè)置為3(命令行登錄),而不是5(圖形登錄),如果需要GUI,可以隨時(shí)運(yùn)行startx進(jìn)入圖形用戶界面。
4. 清理不需要的模塊或功能
在服務(wù)器軟件包中有太多被啟動(dòng)的功能或模塊實(shí)際上是不需要的(如Apache中的許多功能模塊),仔細(xì)查看Apache配置文件,確定FrontPage支持或其它額外的模塊是否真的要用到,如果不需要,應(yīng)該毫不猶豫地從服務(wù)器禁用掉,這樣有助于提高系統(tǒng)內(nèi)存可用量,騰出更多資源給那些真正需要的軟件,讓它們運(yùn)行得更快。
5. 禁用控制面板
在Linux中,有許多流行的控制面板,如Cpanel,Plesk,Webmin和phpMyAdmin等,相信每個(gè)Linux初級(jí)用戶都很喜歡這些控制面板,但是,禁用掉這些軟件包可以釋放出大約120MB內(nèi)存,因此,我強(qiáng)烈建議禁用掉這些控制面板,除非它們真的需要用到,它們可以通過PHP腳本(盡管有些不安全),或命令行命令啟用,這樣做后,內(nèi)存使用量大約可以下降30-40%。
6. 改善Linux Exim服務(wù)器性能
有許多種方法改善服務(wù)器的Exim性能,其中一個(gè)辦法是使用DNS緩存守護(hù)進(jìn)程,它可以降低解析DNS記錄需要的帶寬和CPU時(shí)間,DNS緩存通過消除每次都從根節(jié)點(diǎn)開始查找DNS記錄的需求,從而改善網(wǎng)絡(luò)性能,Djbdns是一個(gè)非常強(qiáng)大的DNS服務(wù)器,它具有DNS緩存功能,Djbdns比BIND DNS服務(wù)器更安全,性能更好,可以直接通過http://cr.yp.to/下載,或通過Red Hat提供的軟件包獲得。
7. 使用AES256增強(qiáng)gpg文件加密安全
為了提高備份文件或敏感信息的安全,許多Linux系統(tǒng)管理員都會(huì)使用gpg進(jìn)行加密,在使用gpg時(shí),最好指定gpg使用AES256加密算法,AES256使用256位密鑰,它是一個(gè)開放的加密算法,美國(guó)國(guó)家安全局(NSA)都使用它保護(hù)絕密信息,沒有什么比它更安全的了。
8. 遠(yuǎn)程備份服務(wù)安全
安全是選擇遠(yuǎn)程備份服務(wù)最重要的因素,大多數(shù)系統(tǒng)管理員都害怕兩件事:(黑客)可以刪除備份文件,不能從備份恢復(fù)系統(tǒng)。
為了保證備份文件100%的安全,備份服務(wù)公司提供遠(yuǎn)程備份服務(wù)器,使用scp腳本或RSYNC通過SSH傳輸數(shù)據(jù),這樣,沒有人可以直接進(jìn)入和訪問遠(yuǎn)程系統(tǒng),因此,也沒有人可以從備份服務(wù)刪除數(shù)據(jù)。在選擇遠(yuǎn)程備份服務(wù)提供商時(shí),最好從多個(gè)方面了解其服務(wù)強(qiáng)壯性,如果可以,可以親自測(cè)試一下。
9. 更新默認(rèn)內(nèi)核參數(shù)設(shè)置
為了順利和成功運(yùn)行企業(yè)應(yīng)用程序,如數(shù)據(jù)庫服務(wù)器,可能需要更新一些默認(rèn)的內(nèi)核參數(shù)設(shè)置,例如,2.4.x系列內(nèi)核消息隊(duì)列參數(shù)msgmni有一個(gè)默認(rèn)值(例如,共享內(nèi)存,或shmmax在Red Hat系統(tǒng)上默認(rèn)只有33554432字節(jié)),它只允許有限的數(shù)據(jù)庫并發(fā)連接,下面為數(shù)據(jù)庫服務(wù)器更好地運(yùn)行提供了一些建議值(來自IBM DB2支持網(wǎng)站):
kernel.shmmax=268435456 (32位) kernel.shmmax=1073741824 (64位) kernel.msgmni=1024 fs.file-max=8192 kernel.sem=”250 32000 32 1024″
10. 優(yōu)化TCP
優(yōu)化TCP協(xié)議有助于提高網(wǎng)絡(luò)吞吐量,跨廣域網(wǎng)的通信使用的帶寬越大,延遲時(shí)間越長(zhǎng)時(shí),建議使用越大的TCP Linux大小,以提高數(shù)據(jù)傳輸速率,TCP Linux大小決定了發(fā)送主機(jī)在沒有收到數(shù)據(jù)傳輸確認(rèn)時(shí),可以向接收主機(jī)發(fā)送多少數(shù)據(jù)。
11. 選擇正確的文件系統(tǒng)
使用ext4文件系統(tǒng)取代ext3
- Ext4是ext3文件系統(tǒng)的增強(qiáng)版,擴(kuò)展了存儲(chǔ)限制
- 它具有日志功能,保證高水平的數(shù)據(jù)完整性(在非正常關(guān)閉事件中)
- 在非正常關(guān)閉和重啟時(shí),它不需要檢查磁盤(這是一個(gè)非常耗時(shí)的動(dòng)作)
- 更快的寫入速度,ext4日志優(yōu)化了硬盤磁頭動(dòng)作
12. 使用noatime文件系統(tǒng)掛載選項(xiàng)
在文件系統(tǒng)啟動(dòng)配置文件fstab中使用noatime選項(xiàng),如果使用了外部存儲(chǔ),這個(gè)掛載選項(xiàng)可以有效改善性能。
13. 調(diào)整Linux文件描述符限制
Linux限制了任何進(jìn)程可以打開的文件描述符數(shù)量,默認(rèn)限制是每進(jìn)程1024,這些限制可能會(huì)阻礙基準(zhǔn)測(cè)試客戶端(如httperf和apachebench)和Web服務(wù)器本身獲得最佳性能,Apache每個(gè)連接使用一個(gè)進(jìn)程,因此不會(huì)受到影響,但單進(jìn)程Web服務(wù)器,如Zeus是每連接使用一個(gè)文件描述符,因此很容易受默認(rèn)限制的影響。
打開文件限制是一個(gè)可以用ulimit命令調(diào)整的限制,ulimit -aS命令顯示當(dāng)前的限制,ulimit -aH命令顯示硬限制(在未調(diào)整/proc中的內(nèi)核參數(shù)前,你不能增加限制)。
Linux第三方應(yīng)用程序性能技巧
對(duì)于運(yùn)行在Linux上的第三方應(yīng)用程序,一樣有許多性能優(yōu)化技巧,這些技巧可以幫助你提高Linux服務(wù)器的性能,降低運(yùn)行成本。
14. 正確配置MySQL
為了給MySQL分配更多的內(nèi)存,可設(shè)置MySQL緩存大小,要是MySQL服務(wù)器實(shí)例使用了更多內(nèi)存,就減少緩存大小,如果MySQL在請(qǐng)求增多時(shí)停滯不動(dòng),就增加MySQL緩存。
15. 正確配置Apache
檢查Apache使用了多少內(nèi)存,再調(diào)整StartServers和MinSpareServers參數(shù),以釋放更多的內(nèi)存,將有助于你節(jié)省30-40%的內(nèi)存。
下面是一些提高Linux服務(wù)器監(jiān)控和故障排除的技巧:
16. 分析Linux服務(wù)器性能
提高系統(tǒng)效率最好的辦法是找出導(dǎo)致整體速度下降的瓶頸并解決掉,下面是找出系統(tǒng)關(guān)鍵瓶頸的一些基本技巧:
● 當(dāng)大型應(yīng)用程序,如OpenOffice和Firefox同時(shí)運(yùn)行時(shí),計(jì)算機(jī)可能會(huì)開始變慢,內(nèi)存不足的出現(xiàn)幾率更高。
● 如果啟動(dòng)時(shí)真的很慢,可能是應(yīng)用程序初次啟動(dòng)需要較長(zhǎng)的加載時(shí)間,一旦啟動(dòng)好后運(yùn)行就正常了,否則很可能是硬盤太慢了。
●CPU負(fù)載持續(xù)很高,內(nèi)存也夠用,但CPU利用率很低,可以使用CPU負(fù)載分析工具監(jiān)控負(fù)載時(shí)間。
17. 學(xué)習(xí)5個(gè)Linux性能命令
使用幾個(gè)命令就可以管理Linux系統(tǒng)的性能了,下面列出了5個(gè)最常用的Linux性能命令,包括top、vmstat、iostat、free和sar,它們有助于系統(tǒng)管理員快速解決性能問題。
1). top
Top命令不僅顯示了當(dāng)前內(nèi)核服務(wù)的任務(wù),還顯示了許多關(guān)于主機(jī)狀態(tài)的統(tǒng)計(jì)數(shù)據(jù),默認(rèn)情況下,它每隔5秒自動(dòng)更新一次顯示的數(shù)據(jù)(這個(gè)時(shí)間間隔是可以配置的),通過top命令,我們可以得知幾個(gè)結(jié)果,如:當(dāng)前正常運(yùn)行時(shí)間,系統(tǒng)負(fù)載,進(jìn)程數(shù)量和內(nèi)存使用率,此外,這個(gè)命令也顯示了那些使用最多CPU時(shí)間的進(jìn)程(包括每個(gè)進(jìn)程的各種信息,如運(yùn)行用戶,執(zhí)行的命令等)。
2). vmstat
Vmstat命令提供當(dāng)前CPU、IO、進(jìn)程和內(nèi)存使用率的快照,它和top命令類似,自動(dòng)更新數(shù)據(jù),如:
$ vmstat 10
3). iostat
Iostat命令(在Ubuntu,Red Hat/Fedora上包含在sysstat軟件包中)提供三個(gè)報(bào)告:CPU利用率、設(shè)備利用率和網(wǎng)絡(luò)文件系統(tǒng)利用率,不加任何參數(shù)運(yùn)行時(shí),iostat將顯示這三個(gè)報(bào)告,使用-c,-d和-h參數(shù)可以分別獨(dú)立顯示這三個(gè)報(bào)告。
4). free
Free命令顯示主內(nèi)存和交換空間的內(nèi)存統(tǒng)計(jì)數(shù)據(jù),指定-t參數(shù)可以顯示總內(nèi)存數(shù)量,指定-b參數(shù)可以按字節(jié)為單位進(jìn)行顯示,使用-m則以兆為單位顯示,默認(rèn)情況下是以千字節(jié)為單位的。
Free命令也可以使用-s參數(shù)加一個(gè)延遲時(shí)間(單位:秒)連續(xù)運(yùn)行,如:
$ free -s 5
5). sar
Sar命令收集,查看和記錄性能數(shù)據(jù),這個(gè)命令比前面幾個(gè)命令歷史更悠久,它可以收集和顯示較長(zhǎng)周期的數(shù)據(jù)。
其它
下面是一些歸類為其它的性能技巧:
18. 將日志文件轉(zhuǎn)移到內(nèi)存中
當(dāng)一臺(tái)機(jī)器處于運(yùn)行中時(shí),最好是將系統(tǒng)日志放在內(nèi)存中,當(dāng)系統(tǒng)關(guān)閉時(shí)再將其復(fù)制到硬盤,當(dāng)你運(yùn)行一臺(tái)開啟了syslog功能的筆記本電腦或移動(dòng)設(shè)備時(shí),ramlog可以幫助你提高系統(tǒng)電池或移動(dòng)設(shè)備閃存驅(qū)動(dòng)器的壽命,使用ramlog的一個(gè)好處是,不用再擔(dān)心某個(gè)守護(hù)進(jìn)程每隔30秒向syslog發(fā)送一條消息,放在以前,硬盤必須隨時(shí)保持運(yùn)轉(zhuǎn),這樣對(duì)硬盤和電池都不好。
19. 先打包,后寫入
在內(nèi)存中劃分出固定大小的空間保存日志文件,這意味著筆記本電腦硬盤不用一直保持運(yùn)轉(zhuǎn),只有當(dāng)某個(gè)守護(hù)進(jìn)程需要寫入日志時(shí)才運(yùn)轉(zhuǎn),注意ramlog使用的內(nèi)存空間大小是固定的,否則系統(tǒng)內(nèi)存會(huì)很快被用光,如果筆記本使用固態(tài)硬盤,可以分配50-80MB內(nèi)存給ramlog使用,ramlog可以減少許多寫入周期,極大地提高固態(tài)硬盤的使用壽命。
20. 一般調(diào)優(yōu)技巧
盡可能使用靜態(tài)內(nèi)容替代動(dòng)態(tài)內(nèi)容,如果你在生成天氣預(yù)告,或其它每隔1小時(shí)就必須更新的數(shù)據(jù),最好是寫一個(gè)程序,每隔1小時(shí)生成一個(gè)靜態(tài)的文件,而不是讓用戶運(yùn)行一個(gè)CGI動(dòng)態(tài)地生成報(bào)告。
為動(dòng)態(tài)應(yīng)用程序選擇最快最合適的API,CGI可能最容易編程,但它會(huì)為每個(gè)請(qǐng)求產(chǎn)生一個(gè)進(jìn)程,通常,這是一個(gè)成本很高,且不必要的過程,F(xiàn)astCGI是更好的選擇,和Apache的mod_perl一樣,都可以極大地提高應(yīng)用程序的性能。