1. 程式人生 > >linux 網站伺服器優化 web server優化

linux 網站伺服器優化 web server優化

伺服器的優化是我們最小化安裝系統時應該做的事情。其實,在做這項工作之前,我們就應該根據實際應用需求來選購Linux伺服器,然後有所偏重地選擇硬體,比如我們應該根據伺服器的應用來確定是需要RAID5,還是單塊硬碟等。 根據伺服器應用來選購伺服器 無論是租用伺服器還是託管都要面臨一個問題,那就是選擇伺服器的硬體配置。前面也說了,選購硬體配置時要根據我們的伺服器應用需求而定。因為你無法 通過一臺伺服器來滿足所有的需求、解決所有的問題。在專案實施或網站架構之前,我們應該從以下幾方面來考慮如何選購Linux伺服器: 伺服器執行的應用 需要支援的使用者訪問量 需要的儲存資料空間 業務的重要性 伺服器網絡卡方面的考慮 安全方面的考慮 機架合理化安排 伺服器的價格預算 下面分別來看一下。 1.伺服器執行的應用 這是首先需要考慮的問題,我們通常要根據伺服器的應用型別(也就是用途)來決定伺服器的效能、容量和可靠性需求。下面將按照負載均衡、快取伺服器、前端伺服器、應用程式伺服器、資料伺服器的常見基礎架構來討論。 負載均衡:它對伺服器的要求非常低,尤其是用來做LVS負載時,它會直接將所有的連線要求轉給後端的Web應用。所以,在保證網絡卡效能的前提下(很多時候我用的是品牌伺服器自帶的百兆網絡卡),可以將效能相對較差的配置用作負載均衡。 快取伺服器:主要是squid或varnish等,需要重點考慮兩方面的因素,即記憶體儘量多些,硬碟儘量快些,不要因為硬碟的I/O影響了整體效能。 Web 前端伺服器:正常情況下,大多數Web前端伺服器(Front-end)對伺服器的要求不高,例如靜態Web伺服器、動態伺服器、圖片 伺服器等。事實上現在很流行在一臺效能卓越的伺服器上同時執行Web前端+應用伺服器,比如Nginx+PHP-FPM、Nginx+Tomcat或 Nginx+Resin。 應用程式伺服器:由於它承擔了計算和功能實現的重任,我們需要為基於Web架構的應用程式伺服器 (Application Server)選擇足夠快的伺服器。另外應用程式伺服器可能需要用到大量的記憶體,尤其是基於Windows基礎架構的Ruby、Python、Java服 務器,這一類伺服器至少需要使用單路至強的配置。至於可靠性的問題,如果你的架構中只有一臺應用伺服器,那這臺伺服器需要足夠可靠,RAID是絕對不能忽 視的選項。但如果有兩臺或更多的應用伺服器,並設計了負載均衡機制、具有冗餘功能,那就不必過於擔心了。 特殊的應用:除了用於 Web架構中的應用程式之外,如果你的伺服器還要處理流媒體視訊編碼、伺服器虛擬化、媒體伺服器(Asterisk之 類),或者作為遊戲伺服器(邏輯、地圖、聊天)執行,那同樣會對CPU和記憶體的需求比較高,至少也要考慮單路至強的伺服器。其中,伺服器虛擬化對儲存可靠 性的要求非常高,因為一個籃子裡有十幾個雞蛋,籃子一定要足夠牢靠才行。 公共服務:這裡指的是郵件伺服器、檔案伺服器、DNS伺服器、域控伺服器等。通常我們會部署兩臺DNS伺服器互相備份,域控主伺服器也會擁有 一臺備份伺服器(專用的或非專用的),所以對於可靠性無須過於苛刻。至於郵件伺服器,至少需要具備足夠的硬體可靠性和容量大小,這主要是對郵件資料負責, 因為很多使用者沒有儲存和歸檔郵件資料的習慣,待其重灌系統後,就會習慣性地到伺服器上重新下載相應的資料。至於效能問題,則應評估使用者數量後再決定。另 外,考慮到它的重要性,建議還要儘量選擇穩定的伺服器系統,比如Linux或BSD系列。 資料庫:這是我們最後討論的應用,對伺服器的要求也是最高、最重要的。無論你使用的是MySQL、SQL Server還是Oracle,一般情況下,它都需要有足夠快的CPU、足夠大的記憶體、足夠穩定可靠的硬體。可直接採用Dell PowerEdge R710或HP 580G5,CPU和記憶體也要儘可能最大化。如果預算充分,建議用固態硬碟作為RAID10,因為資料庫伺服器對硬碟的I/O要求是最高的。 2.伺服器需要支援的使用者訪問量 伺服器就是為了給使用者提供某種服務的,所以使用這些服務的使用者同樣是我們必須考慮的因素。我們可以從下面幾個具體的問題進行評估: 有多少註冊使用者?正常情況下有多少使用者會同時線上訪問?每天同時線上訪問的最高峰值大概是多少? 一般在專案實施之前,客戶方面會針對這些問題給出一個大致的結果。但我們要儘量設計得比這更充分和具體。同時,我們還要對未來的使用者增長做一個儘可能準確的預測和規劃,因為你的伺服器可能會支援越來越多的使用者,所以在進行網站或系統架構時要讓機器能靈活地擴充套件。 3.需要的儲存資料空間 關於這個問題需要從兩個方面來考慮,一方面是有哪些類別的資料,包括:作業系統本身佔用的空間,安裝應用程式所需要的空間,應用程式所產生的資料、 資料庫、日誌檔案、郵件資料等,如果網站是Web 2.0的,還要計算每個使用者的儲存空間;另一方面是從時間軸上來考慮,這些資料每天都在增長,你至少要為未來1年(我們建議2~3年)的資料增長做個準確 的測算,這就需要軟體開發人員和業務人員一起來提供足夠的資訊了。最後可將計算出來的結果乘上1.5左右的係數,方便維護的時候做各種資料的備份和檔案轉 移操作。 4.業務的重要性 關於這個問題就需要根據自身的業務領域來考慮相關要求了。下面舉幾個簡單的例子,幫助你瞭解這些伺服器對可靠性、資料完整性等方面的要求。 如果你的伺服器是用來執行一個WordPress部落格、與朋友們分享觀點的,那麼,一臺酷睿伺服器、1GB的記憶體外加一塊160GB的硬碟就足夠了。就算伺服器出現了一點硬體故障,導致幾個小時甚至一兩天不能提供訪問,生活會照常繼續,天也不會塌下來。 如果你的伺服器是用作測試平臺的,那麼就不會像生產環境那樣對可靠性有極高的要求,你所需要的可能只是做好例行的資料備份,若伺服器宕機,只要能在當天把問題解決就行了。 如果是一個電子商務公司的伺服器,執行著電子商務網站平臺,那麼請一定要十分重視伺服器。當硬體發生故障而導致宕機時,你需要對以下“危言聳 聽”的後果做好心理準備:投訴電話被打爆、顧客大量流失、顧客要求退款、市場推廣費用打水漂、員工無事可幹、公司運營陷入癱瘓狀態、資料丟失等。事實上, 電子商務網站一般是需要365×24小時不間斷監控的,而且要有專人輪流值守,並且要有足夠的備份裝置,每天還要有專人檢查。個人感覺,在網站運維方面, 電子商務的技術含量也是最高的。 如果是大型廣告類或門戶類網站,那麼建議選擇CDN系統。由於它有提高網站響應速度、負載均衡、有效抵禦DDoS攻擊等特點,相對而言,每節點都會有大量的冗餘,所以,除了成本之外,CDN機器的硬碟問題不大。 這裡其實只是簡單地討論了業務對伺服器硬體可靠性的要求。換言之,如果你覺得業務不能承擔硬碟損壞帶來的停機或資料丟失風險,那麼一定要選擇一個合 適的RAID卡。對於冗餘電源問題,道理是一樣的(要全面解決這個問題,不能只考慮單個伺服器的硬體,還需要結合系統架構的規劃設計)。 在回答了以上問題後,接下來就可以決定下面這些具體選項了: (1)選擇什麼CPU 回憶一下上面關於“伺服器執行的應用”和“需要支援的使用者訪問量”兩個方面的考慮,這將幫助我們選擇合適的CPU。毫無疑問,CPU的主頻越高,其效能也 就越高;兩個CPU要比一個CPU來得更爽,至強肯定比酷睿更猛。但究竟怎樣的CPU才是合適的呢?下面為你提供一些常見情況下的建議: 如果你的業務剛剛起步,預算不是很充足,建議你選擇一款經典的酷睿伺服器,這可以幫你節約大量成本。而且,以後可以根據業務發展的情況,隨時升級到更高配置的伺服器。 如果你需要在一臺伺服器上同時執行多種應用服務,例如.Net+Exchange+SQL Server,那麼一個單核至強(例如X3330)或新一代的酷睿I3/I5(雙核四執行緒)將是最佳的選擇。雖然從技術的角度來說,這不是一個好主意,但 至少能夠幫你節約一大筆成本。 如果你的伺服器要執行SQL Server、MySQL或Oracle,而且目前有幾百個使用者同時線上,未來還會不斷增長,那麼你至少應該選擇安裝一個雙四核伺服器。 如果需要的是Web應用伺服器,雙四核基本就可以滿足我們的要求了。 (2)需要多大的記憶體 同樣,“伺服器執行的應用”和“需要支援的使用者訪問量”兩方面的考慮也將幫助我們選擇合適的記憶體容量。相比於CPU,我認為記憶體(RAM)才是影響 效能的最關鍵因素。因為在相當多正在執行的伺服器中,CPU的利用率一般都在10%~30%之間,甚至更低。但我們發現由於記憶體容量不夠而導致伺服器執行 緩慢的案例比比皆是,如果伺服器不能分配足夠的記憶體給應用程式,應用程式就需要通過硬碟介面緩慢地交換讀寫資料了,這將導致網站慢得令人無法接受。記憶體的 大小主要取決於伺服器的使用者數量,當然也和應用軟體對記憶體的最低需求及記憶體管理機制有關,所以,最好由程式設計師或軟體開發商給出最佳的記憶體配置建議。下面同 樣給出了一些常見應用環境下的記憶體配置建議: 無論是Windows下的IIS還是Linux下的Apache,一般情況下Web前端伺服器不需要配置特別高的記憶體,尤其是在叢集架構中,4GB的記憶體就已經足夠了。如果有幾千個併發使用者,而且他們同時執行動態指令碼程式,我們才會考慮使用8GB或更高的記憶體。 對於執行Tomcat、Resin、WebLogic、Websphere或.NET的應用伺服器,4GB記憶體應該是基準配置,更準確的數字需要根據使用者數量和技術架構來確定。 資料庫伺服器的記憶體由資料庫例項的數量、表大小、索引、使用者數來決定,一般建議配置4GB以上的記憶體,我們在許多專案方案中使用了24GB~48GB的記憶體。 諸如Postfix、Notes、Exchange這樣的郵件伺服器對記憶體的要求並不高,1GB~2GB就可以滿足了。 還有一些特殊的伺服器,我們需要為之配置儘可能高的記憶體容量,包括Squid、Varnish、Memcached的快取伺服器。 對於一臺檔案伺服器,1GB記憶體可能就足夠了。 事實上,上面的數字已經足夠“慷慨”,由於記憶體技術在不斷進化,價格也在不斷降低,我們才得以近乎奢侈地討論4GB、8GB、16GB這些曾經不可想象的記憶體容量。然而,除了花錢購買記憶體來滿足應用程式的“貪婪”之外,系統優化和資料庫優化仍然是我們需要重視的問題。 (3)需要怎樣的硬碟儲存系統 硬碟儲存系統的選擇和配置是整個伺服器系統裡最複雜的一部分,我們需要考慮硬碟的數量、容量、介面型別、轉速、快取大小,以及是否需要RAID卡、 RAID卡的型號和RAID級別等問題。甚至在一些高可靠性、高效能的應用環境中,我們還需要考慮使用怎樣的外部儲存系統(SAN、NAS或DAS)。下 面將伺服器的硬碟RAID卡的特點歸納一下: 如果是用作快取伺服器,比如squid、varnish還有memcached,可以考慮用RAID0。 如果是執行Nginx+PHP5或tomcat、resin等應用,可以考慮用RAID1。 如是是內網開發伺服器或存放重要程式碼的伺服器,可以考慮用RAID5。 如果是執行MySQL或Oracle等資料庫應用,可以考慮用固態硬碟做RAID5或RAID10。 5.網絡卡效能與資料方面的考慮 如果你的基礎架構是多伺服器環境,而且伺服器之間有大量的資料交換,那麼建議你為每臺伺服器配置兩個或更多的網絡卡,一個用來對外提供服務,另一個用 來做內部資料交換。由於現在專案外端都置於防火牆內,所以許多時候單網絡卡就足夠了;而像LVS+Keepalived這種只用公網地址的Linux叢集架 構,有時可能僅僅需要一塊網絡卡。目前,HP或Dell這種品牌伺服器自帶的網絡卡已經足夠使用了。 另外,資料的備份也是很重要的。在實際工作中我們也發現,rsync和scp這些Liunx下的備份工具同樣非常佔頻寬,所以,如果用scp,建議儘量用它的限速引數;而rsync則儘量選擇在非業務時間段執行。 6.伺服器安全方面的考慮 由於目前國內的DDoS攻擊還是比較普遍,建議給每個專案方案和自己的電子商務網站配備硬體防火牆,比如Juniper、Cisco或神盾等。當然 了,這個問題也是網站後期運營維護需要考慮的,這裡只是想讓大家有個概念性的認識。有時為了資料的安全,我會讓所有的機器都用RAID5。另外就是定期巡 視機房,檢查伺服器的硬碟燈指向,一有異常就迅速處理。 7.根據機架數合理安排伺服器的數量 這個問題應該在專案實施前就準備好,選擇伺服器時應該明確1U、2U和4U到底有多少臺,應該如何安排。在小專案中這個問題可能無關緊要,但在大型專案的實施過程中,這個問題就很突出了,我們應該根據現有或額定的機架數目確定到底應該選擇多少個伺服器。 8.成本考慮:伺服器的價格問題 這個問題無論是在替公司採購時,還是在專案實施過程中,都是重要的問題。我們的方案經常被退回,理由就是超出預算。尤其是一些小專案,預算更吃緊。 我做專案時經常面臨的一種需求是客戶做的是證券類資訊網站,只要求週一至週五的上午9點至下午3點網站不出問題即可,並不想做複雜的負載均衡高可用。所以 這時候,我會做成單Nginx或Haproxy,後面接兩臺Web應用。這種情況還好說,如果是做中大型電子商務網站,在伺服器成本上的控制就尤其重要。 事實上,我們經常遇到的問題是,客戶給出的成本預算有限,而我們的應用又需要更多的伺服器。這時候,我們不得不選擇Centos或FreeBSD下的免費 虛擬化軟體,這將在後面的章節中重點講述。 以上8個方面即是我們在採購伺服器時應該注意的因素,在選擇伺服器的元件時要有所偏重,然後根據系統或網站架構來決定伺服器的數量,儘量做到伺服器資源利用的最大化。 1.5.2 Centos5.5最小化安裝後的優化 購買了伺服器(現在主流配置都是雙四核),下一步就要安裝系統了。這裡推薦用64位的Centos5.5,安裝系統時我們要選擇最小化安裝(不要圖 形)。大家在用伺服器時要記得一個原則,系統的安裝包越少越好,這樣機器才會更穩定。前面已經介紹過線上伺服器的分割槽流程,如果遇到對磁碟I/O呼叫頻繁 的服務(例如MySQL),我們可以單獨拿一個分割槽(如/data)出來,不要跟/裝在一起,避免/分割槽被頻繁呼叫,出現I/O瓶頸。至於單伺服器的效能 調優,本著穩定安全的原則,儘量不要改動系統原有的配置(Centos自身的檔案和記憶體機制就很優秀),尤其是線上環境,穩定性要放在第一位來考慮。 1.關閉不需要的服務 眾知周知,服務越少,系統佔用的資源也會越少,所以應關閉不需要的服務。這樣做的好處是減少記憶體和CPU時間的佔用。命令如下所示:# ntsysv下面列出需要啟動的服務,未列出的服務一律關閉。 crond Linux下的時間計劃任務服務。 irqbalance 啟用irqbalance服務,既可以提升效能,又可以降低能耗。irqbalance用於優化中斷分配,它會自動收集系統資料以分析使用模式,並依據系 統負載狀況將工作置於Performance mode或Power-save mode狀態。處於Performance mode時,irqbalance會將中斷儘可能均勻地分發給各個CPU core,以充分利用CPU的多核,提升效能。處於Power-save mode時,irqbalance會將中斷集中分配給第一個CPU,以保證其他空閒CPU的睡眠時間,降低能耗。現在的主流伺服器都是雙四核,所以這項我 建議保留。 network sshd syslog 這是Linux的日誌系統,必須要啟動,否則機器出現問題時會找不到原因。 再說一下兩個比較特殊的服務,它們是iptables和SELinux。因為網站和系統之前均有硬體防火牆,如果沒有特殊需求的話,均可選擇關閉。要關閉它們可以在命令setup下操作,也可以使用命令列操作。 關閉iptables的程式碼如下:service iptables stop && #chkconfig iptables off關閉SELinux的方法如下:vim /etc/selinux/config然後將檔案中的selinux=""改為disabled,並重啟。如果不想重啟系統,使用命令 setenforce 0,此命令可以暫時關閉SELinux,重啟後失效。 說明 setenforce 1將SELinux設定成為enforcing模式;setenforce 0將SELinux設定成為permissive模式。 另外,在lilo或grub的啟動引數中增加:selinux=0,這樣也可以關閉SELinux。 2.關閉不需要的tty 先編輯/etc/inittab,找到如下一段命令: 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 這段命令會使init為你打開了6個控制檯,分別可以用[ALT+F1]到[ALT+F6]進行訪問。此6個控制檯預設都駐留在記憶體中,用ps -aux這個命令就可以看到,這是6個程序,如下所示:  [[email protected] ~]# ps -aux| grep tty Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ root   3219 0.0 0.0  3792  488 tty1   Ss+ Mar16  0:00 /sbin/mingetty tty1 root   3220 0.0 0.0  3792  484 tty2   Ss+ Mar16  0:00 /sbin/mingetty tty2 root   3221 0.0 0.0  3792  488 tty3   Ss+ Mar16  0:00 /sbin/mingetty tty3 root   3222 0.0 0.0  3792  488 tty4   Ss+ Mar16  0:00 /sbin/mingetty tty4 root   3224 0.0 0.0  3792  488 tty5   Ss+ Mar16  0:00 /sbin/mingetty tty5 root   3226 0.0 0.0  3792  488 tty6   Ss+ Mar16  0:00 /sbin/mingetty tty6 root   3325 0.0 0.1 90548 6264 tty7   Ss+ Mar16  0:01 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7 root   6767 0.0 0.0 68284 1564 tty8   Ss+ Mar17  0:00 /bin/bash root   31179 0.0 0.0 63372  756 pts/2  S+  17:03  0:00 grep tty 事實上沒有必要使用這麼多。應如何關閉不需要的程序呢?通常我們保留前兩個控制檯就可以了,把後面4個用#註釋掉,並且無需重啟,只需要執行init q這個命令即可,如下所示: init q 3.對TCP/IP網路引數進行調整 調整TCP/IP網路引數,可以增強抗SYN Flood的能力,命令如下所示: # echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf # sysctl -p 4.修改shell命令的history記錄個數 修改history記錄的命令如下所示: # vi /etc/profile 找到histsize=1000,將其改為histsize=100(這條可根據實際情況而定)。 不重啟系統就可讓其生效,如下所示: source /etc/profile 5.定時校正伺服器的時間 我們可以定時校正伺服器的時間,命令如下所示: # yum install ntp # crontab -e 加入如下一行: */5 * * * * ntpdate ntp.api.bz #ntp.api.bz是一組NTP伺服器叢集,目前有6臺伺服器。這項服務是api.bz繼http://sms.api.bz移動飛信免費簡訊傳送介面之後的第二項免費API服務。 6.停止列印服務 如果不準備提供列印服務,可停止預設設定為自動啟動的列印服務,命令如下所示: [
[email protected]
~]#/etc/rc.d/init.d/cups stop ← 停止列印服務Stopping cups:    [OK]  ← 停止服務成功,出現“OK” [[email protected] ~]#chkconfig cups off ← 禁止列印服務自動啟動 [[email protected] ~]#chkconfig -list cups ← 確認列印服務自啟動設定狀態 cups0:off 1:off 2:off 3:off 4:off 5:off 6:off ← 0~6都為off的狀態就OK(當前列印服務自啟動被禁止) 7.停止ipv6 在Centos5.5預設的狀態下,ipv6是被啟用的。因為我們不使用ipv6,所以,可以停止ipv6,以最大限度地保證安全和快速。首先確認一下ipv6是不是處於被啟動的狀態。[
[email protected]
~]#ifconfig -a ← 列出全部網路介面資訊 eth0 Link encap:Ethernet HWaddr 00:0C:29:B6:16:A3 inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:feb6:16a3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:84 errors:0 dropped:0 overruns:0 frame.:0 TX packets:93 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10288 (10.0 KiB) TX bytes:9337 (9.1 KiB) Interrupt:185 Base address:0×1400 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame.:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:952 (952.0 b) TX bytes:952 (952.0 b) sit0 Link encap:IPv6-in-IPv4 ← 確認ipv6是被啟動的狀態 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame.:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 然後修改相應配置檔案,停止ipv6,如下所示: [
[email protected]
~]#vi /etc/modprobe.conf ← 修改相應配置檔案,新增如下內容 alias net-pf-10 off alias ipv6 off echo "IPV6INIT=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0 [[email protected] ~]#shutdown -r now ← 重新啟動系統,使設定生效 最後確認ipv6的功能已經被關閉,如下所示: [[email protected] ~]#ifconfig -a ← 列出全部網路介面資訊 eth0 Link encap:Ethernet HWaddr 00:0C:29:B6:16:A3 inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:feb6:16a3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:84 errors:0 dropped:0 overruns:0 frame.:0 TX packets:93 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10288 (10.0 KiB) TX bytes:9337 (9.1 KiB) Interrupt:185 Base address:0×1400lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame.:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:952 (952.0 b) TX bytes:952 (952.0 b) 確認ipv6的相關資訊沒有被列出,說明ipv6功能已經關閉。 8.調整Linux的最大檔案開啟數 要調整一下Linux的最大檔案開啟數,否則squid在高負載時執行效能將會很低。另外,在Linux下面部署應用時,有時候會遇上 Socket/File:Can’t open so many files這樣的問題,這個值也會影響伺服器的最大併發數。其實Linux是有檔案控制代碼限制的,但預設不是很高,一般是1024,生產伺服器很容易就會達 到這個值,所以需要改動此值。剛開始我採用vim/etc/security/limit.conf命令,在最後一行新增如下程式碼: * soft nofile 60000 * hard nofile 65535 但重啟後一切都還原了。 正解做法應該為在Centos5.5的/etc/rc.local檔案裡新增如下命令列: ulimit -SHn 65535 當然了,我們也可以在Nginx的一些監控腳本里實時新增此命令列,達到重啟也能生效的目的。 另外,ulimit -n命令並不能真正看到檔案的最大檔案開啟數,大家可用如下指令碼檢視: #!/bin/bash for pid in 'ps aux |grep nginx |grep -v grep|awk '{print$2}'' do cat /proc/${pid}/limits |grep 'Max open files' done 9.啟動網絡卡 大家配置Centos5.5的網絡卡時,容易忽略的一項就是Linux啟動時未啟動網絡卡,其後果很明顯,那就是你的Linux機器永遠也沒有IP地址,下面是一臺線上伺服器的配置:[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 # Intel Corporation 82541GI Gigabit Ethernet Controller DEVICE=eth0 BOOTPROTO=none HWADDR=00:14:22:1B:71:20 IPV6INIT=yes IPV6_AUTOCONF=yes ONBOOT=yes →此項一定要記得為yes,它會在系統引導就啟動你的網絡卡裝置 NETMASK=255.255.255.192 IPADDR=203.93.236.146 GATEWAY=203.93.236.129 TYPE=Ethernet  PEERDNS=yes →允許從DHCP處獲得的DNS覆蓋本地的DNS USERCTL=no~ →不允許普通使用者修改網絡卡 10.關閉Centos5.5的寫磁碟I/O功能 一個Linux檔案預設有3個時間。 atime:對此檔案的訪問時間。 ctime:此檔案inode發生變化的時間。 mtime:此檔案的修改時間。 如果有多個小檔案(比如Web伺服器的頁面上有多個小圖片),通常就沒有必要記錄檔案的訪問時間了,這樣可以減少寫磁碟的I/O。這要如何配置呢? 首先,修改檔案系統的配置檔案:vim /etc/fstab。然後,在包含大量小檔案的分割槽中使用noatime和nodiratime這兩個命 令。例如:/dev/sda5 /data/pics ext3 noatime,nodiratime 0 0這樣檔案被訪問時就不會再產生寫磁碟的I/O了。 1.5.3 優化Linux下的核心TCP引數以提高系統性能 核心的優化跟伺服器的優化一樣,應本著穩定安全的原則。下面以64位的Centos5.5下的Squid伺服器為例來說明,待客戶端與伺服器端建立 TCP/IP連線後就會關閉SOCKET,伺服器端連線的埠狀態也就變為TIME_WAIT了。那是不是所有執行主動關閉的SOCKET都會進入 TIME_WAIT狀態呢?有沒有什麼情況使主動關閉的SOCKET直接進入CLOSED狀態呢?答案是主動關閉的一方在傳送最後一個ACK後就會進入 TIME_WAIT狀態,並停留2MSL(Max Segment LifeTime)時間,這個是TCP/IP必不可少的,也就是“解決”不了的。 TCP/IP的設計者如此設計,主要原因有兩個: 防止上一次連線中的包迷路後重新出現,影響新的連線(經過2MSL時間後,上一次連線中所有重複的包都會消失)。 為了可靠地關閉TCP連線。主動關閉方傳送的最後一個ACK(FIN)有可能會丟失,如果丟失,被動方會重新發FIN,這時如果主動方處於 CLOSED狀態,就會響應RST而不是ACK。所以主動方要處於TIME_WAIT狀態,而不能是CLOSED狀態。另外,TIME_WAIT並不會佔 用很大的資源,除非受到攻擊。 在Squid伺服器中可輸入檢視當前連線統計數的命令,如下所示: netstat -n| awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' LAST_ACK 14 SYN_RECV 348 ESTABLISHED 70 FIN_WAIT1 229 FIN_WAIT2 30 CLOSING 33 TIME_WAIT 18122 CLOSED:無連線是活動的或正在進行中的。 LISTEN:伺服器在等待進入呼叫。 SYN_RECV:一個連線請求已經到達,等待確認。 SYN_SENT:應用已經開始,開啟一個連線。 ESTABLISHED:正常資料傳輸狀態。 FIN_WAIT1:應用說它已經完成。 FIN_WAIT2:另一邊已同意釋放。 CLOSING:兩邊同時嘗試關閉。 TIME_WAIT:另一邊已初始化一個釋放。 LAST_ACK:等待所有分組死掉。 也就是說,這條命令可以把當前系統的網路連線狀態分類彙總。 在Linux下高併發的Squid伺服器中,TCP TIME_WAIT套接字數量經常可達兩三萬,伺服器很容易就會被拖死。不過,我們可以通過修改Linux核心引數來減少Squid伺服器的TIME_WAIT套接字數量,命令如下所示: vim /etc/sysctl.conf 然後,增加以下引數: net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000 其中: net.ipv4.tcp_syncookies=1表示開啟SYN Cookies。當出現SYN等待佇列溢位時,啟用cookie來處理,可防範少量的SYN攻擊。預設為0,表示關閉。 net.ipv4.tcp_tw_reuse=1表示開啟重用。允許將TIME-WAIT套接字重新用於新的TCP連線。預設為0,表示關閉。 net.ipv4.tcp_tw_recycle=1表示開啟TCP連線中TIME-WAIT套接字的快速回收。預設為0,表示關閉。 net.ipv4.tcp_fin_timeout=30表示如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間。 net.ipv4.tcp_keepalive_time=1200表示當keepalive啟用時,TCP傳送keepalive訊息的頻度。預設是2小時,這裡改為20分鐘。 net.ipv4.ip_local_port_range=1024 65000表示向外連線的埠範圍。預設值很小:32768~61000,改為1024~65000。 net.ipv4.tcp_max_syn_backlog=8192表示SYN佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。 net.ipv4.tcp_max_tw_buckets=5000 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數 字,TIME_WAIT套接字將立刻被清除並列印警告資訊。預設為180000,改為5000。對於Apache、Nginx等伺服器,前面介紹的幾個參 數已經可以很好地減少TIME_WAIT套接字數量,但是對於Squid來說,效果卻不大。有了此引數就可以控制TIME_WAIT套接字的最大數量,避 免Squid伺服器被大量的TIME_WAIT套接字拖死。 執行以下命令使核心配置立即生效: /sbin/sysctl -p 如果是用於Apache或Nginx等的Web伺服器,或Nginx的反向代理,則只需要更改以下幾項即可: net.ipv4.tcp_syncookies=1 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65000執行以下命令使核心配置立即生效: /sbin/sysctl -p如果是郵件伺服器,則建議核心方案如下:net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 5000 65000 kernel.shmmax = 134217728 執行以下命令使核心配置立即生效: /sbin/sysctl -p 當然這些都只是最基本的更改,大家還可以根據自己的需求來更改核心的設定,同樣也要本著穩定的原則,如果伺服器不穩定的話,一切工作和努力都會白 費。如果以上優化仍無法滿足你的要求,有可能你需要定製你的伺服器核心或升級伺服器硬體。至於服務的配置優化,超出了本章的內容,大家可根據自己的需求有 針對性地進行更改。 1.5.4 生產伺服器應儘量選擇編譯安裝軟體包 建議在安裝線上的生產伺服器軟體包時都用原始碼安裝,這是因為原始碼安裝可以自行調整編譯引數,最大化地定製安裝結果。這裡以MySQL 5線上環境的編譯安裝來說明之,其編譯引數如下所示: ./configure -prefix=/usr/local/mysql -without-debug -without-bench -enable-thread-safe-client -enable-assembler -enable-profiling -with-mysqld-ldflags=-all-static -with-client-ldflags=-all-static -with-charset=latin1 -with-extra-charset=utf8,gbk -with-innodb -with-csv-storage-engine -with-federated-storage-engine -with-mysqld-user=mysql -without-embedded-server -with-server-suffix=-community -with-unix-socket-path=/usr/local/mysql/sock/mysql.sock && make && make install 在安裝MySQL時,原始碼安裝與rpm安裝相較,其特點如下: 我們可以針對自己的硬體平臺選用合適的編譯器來優化編譯後的二進位制程式碼。 根據不同的軟體平臺環境調整相關的編譯引數(原始碼安裝不僅適用於rhel/centos,其他系統像FreeBSD、Solaris、Ubuntu等一樣適用)。 可針對特定的應用場景選擇需要什麼元件或不需要什麼元件。 同一臺主機上可以安裝多個MySQL(rpm安裝則僅能安裝一個MySQL)。 根據需要儲存的資料內容選擇只安裝需要的字符集。 理論上原始碼靜態編譯方式安裝效率會高一點,但到底比rpm方式高多少得看具體情況,一般在5%左右。 某次在線上環境工作,我用yum解除安裝一個軟體包時遇到了極其危險的情況,這裡也跟大家分享一下:當時,yum remove自動解除安裝了許多這個軟體包自身依賴的系統包,導致系統崩潰了,SSH不能登入,並且SCP及RSYNC也都不能用了,幸虧FTP命令還能用, 所以資料很快被FTP傳到其他伺服器上了,但系統已經徹底崩潰,只有重灌了。如果是原始碼安裝的軟體包就沒有這種危險,需要解除安裝時只需要刪除軟體包安裝的目 錄即可。 綜上所述,原始碼安裝的好處如下: 最大的好處就是可以自行調整編譯引數,最大化地定製安裝結果。 原始碼安裝可以選擇最新的軟體包,而Linux系統(包括FreeBSD)自帶的軟體包一般都是最穩定的版本,但不能保證是最新的。 相對而言,原始碼安裝的效能是最優異的。 原始碼包安裝的軟體解除安裝時極為方便和簡單,更重要的是,它比較安全,尤其是對線上的生產環境而言。 遷徙也比較方便,如果不涉及系統庫檔案,複製到另一臺機器上也可以使用。 這裡也簡單介紹一下在Linux/Unix下安裝軟體的原始碼三部曲,在後面我們會經常看到它們的身影。 ./configure make make install ./configure是用來檢查環境變數及配置編譯選項的,make是用來將原始碼編譯成二進位制檔案的,而make install則會將make編譯出來的檔案安裝到指定位置(或預設位置)。

相關推薦

linux 網站伺服器優化 web server優化

伺服器的優化是我們最小化安裝系統時應該做的事情。其實,在做這項工作之前,我們就應該根據實際應用需求來選購Linux伺服器,然後有所偏重地選擇硬體,比如我們應該根據伺服器的應用來確定是需要RAID5,還是單塊硬碟等。 根據伺服器應用來選購伺服器 無論是租用伺服器還是託管都要面臨一個問題,那就是選擇伺服器的硬體

Linux網站伺服器資料恢復_伺服器宕機資料恢復

[資料恢復故障描述] 一臺linux網站伺服器,DELL R200,管理約50個左右網站,使用一塊SATA 160GB硬碟。正常使用中突然宕機,嘗試再次啟動失敗,將硬碟拆下檢測時發現存在約100個壞扇區。 某資料恢復公司修復壞道後,嘗試了約3天時間,未恢復成功。 [資料恢復

web網站集群之企業級Nginx Web服務優化詳解(二)

監牢模式 優雅顯示 防盜鏈 非法解析 12 配置Nginx gzip壓縮實現性能優化 100k ---- 1s 90k 100k ---- 5s 10k gzip on; gzip_min_length 1k; gzip_buffers

通過Python利用ADSL伺服器和tinyproxy構建資料自己的動態代理IP池,用django+redis做web服務 (優化版)

代理池初始版:https://blog.csdn.net/MeteorCountry/article/details/82085238 上一篇文章中所搭建的代理池在使用過程中出現了點小問題,代理池中莫名的多出了一些無效代理,檢查日誌後返現是在更新代理 池時舊的代理IP沒有刪除成功,就添加了新

Linux伺服器效能評估與優化

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

網站伺服器不穩定對seo優化會產生影響嗎?

伺服器對企業網站是不可或缺的,伺服器的安穩對網站的持續性開展至關重要,伺服器的安穩性不只會影響網站的運營速度,並且還關係到網站的seo優化。下面愛搜客網站優化運營小編就和大家聊聊網站伺服器不穩定對seo優化會產生哪些重要影響?     1.網站常常打不開,資訊量流失太大  

web server效能優化淺談

Update: 2018.8.8 在無鎖小節增加了一些內容 效能優化,優化的東西一定得在主路徑上,結合測量的結果去優化。不然即使效能再好,邏輯相對而言執行不了幾次,其實對提示效能的影響微乎其微。記得抖哥以前說多隆在幫忙查廣告搜尋引擎的問題,看到了一處程式碼,激動的說這裡用

linux伺服器歷險之sysctl優化linux網路

                1, 優化網路裝置接收佇列   net.core.netdev_max_backlog=3000    該檔案表示在每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目。    預設值:Red Hat Linux release 9 (Shri

linux上zabbix-server優化(配置檔案和資料庫)

linux上zabbix-server優化(配置檔案和資料庫) 一、:修改配置檔案       vim /usr/local/zabbix/etc/zabbix_server.conf        Timeout=20 &

Web效能優化系列:藉助響應式圖片來改進網站圖片顯示

開始使用 <picture> 元素 響應式網頁設計太棒了,它改變了我們向手機端使用者呈現內容的方式,無論使用者使用何種尺寸的手機,我們都能夠為其提供定製化的體驗。響應式網頁設計使用起來很靈活,也容易上手。然而,如果沒有正確使用,它會對網頁效能帶來負面影響。 用於在

關於大型網站技術演進的思考(十九)--網站靜態化處理—web前端優化—上(11)

對於一個網路請求的處理,是由兩個不同型別的操作共同完成,這兩個操作是CPU的計算操作和IO操作,如果我們以處理效率角度來評判這兩個操作,CPU操作效率是光速的,而IO操作就不盡然了,計算機裡的IO操作就是對儲存資料介質的操作,計算機裡有如下幾個介質可以儲存資料,它們分別是:CPU的一級快取、二級快取、記憶

Web前端優化網站效能

1. 減少HTTP請求數一個完整的請求都需要經過DNS存址、與伺服器建立連線、傳送資料、等待伺服器響應、接收資料這樣一個漫長而複雜的過程。資源上由於每個請求都要攜帶資料,因此每個請求都需要佔用頻寬。另外,由於瀏覽器進行併發請求的請求數是有上限的,因此請求數多了以後,瀏覽器需要

優化Web伺服器的啟動速度

方法一、更改index.html的配置,版本改為3.0,新增absolute-ordering標籤<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001

Linux伺服器效能評估與優化(二)

網路內容總結(感謝原創) 1、Linux核心引數優化      核心引數是使用者和系統核心之間互動的一個介面,通過這個介面,使用者可以在系統執行的同時動態更新核心配置,而這些核心引數是通過Linux Proc檔案系統存在的。因此,可以通過調整Proc檔案系統達到優化

開發者應該瞭解的 web 效能 and Web效能優化教程:如何對網站圖片優化

http://www.wtoutiao.com/p/1deiv1x.html 開發者應該瞭解的 web 效能 併發程式設計網(ifeve) · 2016-01-04 22:16 網站的快和慢有什麼區別呢? 存在一種正確答案嗎? 沒有,很不幸,還沒

Linux運維學習筆記之十七:LNMP的WEB架構深度優化之效能優化

第二十七章LNMP的WEB架構深度優化之效能優化 一、Nginx效能優化-配置Nginx的worker程序個數 1、worker的作用和初始設定 worker_processes就是worker角色的程序個數,也就是nginx啟動後有多少個worker處理http請求。ma

Web 性能優化: 圖片優化網站大小減少 62%

屏幕 缺陷 通過 -a 缺點 理解 空間 圖片壓縮 gif 摘要: 壓縮各種格式的圖片。 原文:Web 性能優化: 圖片優化讓網站大小減少 62% 作者:前端小智 Fundebug經授權轉載,版權歸原作者所有。 這是 Web 性能優化的第二篇,上一篇在下面看點擊查看:

IIS網站伺服器效能優化攻略

Windows Server自帶的網際網路資訊伺服器(Internet Information Server,IIS)是架設網站伺服器的常用工具,它是一個既簡單而又麻煩的東西,新手都可以使用IIS架設一個像模像樣的Web站點來,但配置、優化 IIS的效能,使得網站訪問效能達到最優狀態卻不是一件簡單的事情,這裡

從數據庫、代碼和服務器對PHP網站Mysql做性能優化

now() image 最好 提高 mysql 避免 允許 大數 rdate 數據庫優化是PHP面試幾乎都會被問到的事情,也是我們工作中應該註意的事情,當然,如果是小網站無所謂優化不優化,網站訪問量大了自然會暴漏數據庫的瓶頸,這個瓶頸是各方面問題綜合導致的,下面我們來做下數

web前端優化之內容優化

找問題 有效 背景 pri 相關 下載 data url 並行 前端內容優化主要有以下幾條: 1.盡量減少http請求   (1)合並文件,把多個css文件合並在一起;   (2)css Sprites,把css相關的background元素進行背景圖絕對定位;   (3)