2012年3月4日 星期日

對 Apache 連線數多 概念解析


今天說說Apache的最佳化。為什麼要最佳化?因為伺服器資源不夠用。資源有很多方麵,但根據木桶理論,只要有一種資源不夠用,整個伺服器的效能就會受到影響(所謂瓶頸)。
伺服器資源
那麼伺服器的資源包括哪些?對於網站來說主要是CPUTCP連線數這兩者。 CPU表現在工作數上,在Linux下使用平均負載(loadavg)來衡量。可透過以下指令來檢視(參考這篇文章):
cat /proc/loadavg
對於單CPU的伺服器,loadavg高於1,表明工作隊列出現了等待,CPU忙不過來了。超過2以上就會明顯感到效能降低了。
TCP連線數可透過以下指令檢視:
netstat -ant | grep :80 | wc -l
如果要即時監控伺服器資源,可參考OpenNMS項目。
注1:記憶體不算,低廉的價格使得網站伺服器很少有因為記憶體不夠而down掉的。
注2:CPU%是瞬時的CPU使用率,通常無法反映出整體負載。
Apache配置指令
Apache在資源方麵的配置指令主要有以下幾條。
KeepAlive是否允許持續連線
MaxKeepAliveRequests允許的持續連線的最大數
KeepAliveTimeout持續連線在沒有請求多少秒後切斷
StartServers最初啓動時啓動多少個伺服器處理序
MinSpareServers空閒伺服器處理序的最小數
MaxSpareServers空閒伺服器處理序的最大數
MaxRequestsPerChild每個子處理序處理的最大請求數
KeepAlive
前三個KeepAlive相關的指令用來設定持續連線。通常都是每個HTTP請求對應一個TCP連線,但對於一個包含許多圖片的網頁來說,用戶端會在瞬間發出多個HTTP請求,此時多次建立TCP連線會大大降低回應速度。此時透過持續連線,可以允許使用者在一個TCP連線中發出多個HTTP請求,減少TCP 連線建立次數,提高回應速度。
這種情況下,應當透過access_log統計出連續HTTP請求出現的次數、間隔時間、訪問量,以確定 MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小發揮不了持續連線的作用;太大了,持續連線遲遲不斷,浪費TCP連線數不說,更糟糕的是係統中的 httpd 處理序數目會因此不斷增加,使得係統負載升高,甚至會導緻伺服器失去回應。
但是在處理動態網頁請求時,由於使用者很少會瞬間請求多個動態網頁(一般都是開啟页面之後閱讀好半天才點下一頁),此時開啟KeepAlive無異於浪費TCP連線數。
結論就是,放動態網頁的就 KeepAlive Off 以提高吞吐量,放靜態內容如圖片、js程式碼等就 KeepAlive On 以減少TCP連線建立次數。
但一個Apache隻能有一種 KeepAlive 設定,怎麼辦?很簡單,弄兩臺伺服器,一個專門放指令檔,一個專門放圖片。
伺服器處理序數
再說說下麵的 StartServers、MinSpareServers、MaxSpareServers。 StartServers基本不用修改,因為Apache會自動調節子處理序數。 MinSpareServers和MaxSpareServers是空閒子處理序數目,何為空閒子處理序?假設某一時刻係統中共有30個httpd處理序,其中一個是父處理序,20個在處理請求,那麼空閒子處理序數就是9個。
空閒處理序少了,大量的突發請求會使伺服器疲於處理序建立,降低效率;而太多反而會增加係統處理序數,增大係統負載。
實際上,預設值已足夠處理一般的突發請求,所以除非是流量特別特別巨大的網站,否則不要修改這些設定。
就算流量特別特別大,也是透過負載平衡係統來降低每臺伺服器的訪問量,不會修改這幾個值。
MaxRequestsPerChild
這個值設定子處理序在處理多少個請求之後自動結束。這個選項是用來防止處理序由於記憶體泄漏等使用記憶體過多。一般預設值即可。
總結
說來說去其實最重要的還是 KeepAlive 的設定,而效能調節也就是調整 KeepAlive、KeepAliveTimeout 值。


更多内容 http://ssorc.tw/rewrite.php/read-907.html#ixzz1o6R3hEgX

Apache調教

打開apache2.2的錯誤日誌:
[Thu Feb 16 15:37:18 2012] [error] (OS 10038)在一個非套接字上嘗試了一個操作。  : Child 5316: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.
這個錯誤是CPU佔用率一直是100%
然後上網查了解決辦法:
httpd.conf文件中加入代碼:
<IfModule mpm_winnt.c>
ThreadsPerChild 1000
MaxRequestsPerChild 10000
Win32DisableAcceptEx
</IfModule>
重啟apache,發現
Cpu佔用率降下來了。
原因:apache2.0.49以上的accepteExwindows下出現這個問題。
[Thu Feb 16 16:49:10 2012] [error] (OS 10038)在一個非套接字上嘗試了一個操作。  : Too many errors in select loop. Child process exiting.
[Thu Feb 16 16:49:10 2012] [notice] Child 4216: Exit event signaled. Child process is ending. 
然後在dos運行命令netsh winsock reset再重啟apache
在瀏覽器裡面輸入localhost終於行了

2012年2月26日 星期日

Ubuntu 上安裝sun-java6-JDK


手動安裝JDK
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jdk


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
手動安裝JRE
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts


出處:http://tekibrain.blogspot.com/2011/05/ubuntu-1104-sun-java-6-jdk.html

2012年2月23日 星期四

某APP主機的架構及安裝紀錄


前端結構是 iphone app -> java -> mysql
維護介面是 php -> mysql

1.安裝TOMCAT元件
iphone是連 deploy 在 tomcat 上的 java 程式
war 是 java application 要發佈到 tomcat 中



2.備份目錄摘要

備份目錄 1:   /var/lib/tomcat7/webapps/ 全部
備份目錄 2:   /home/carnews 全部
備份目錄 3:   /etc/httpd/conf
備份目錄 4:   /etc/httpd/conf.d
備份目錄 5:   /etc/httpd/modules
備份目錄 6:   /etc/httpd/ 全部


3.DOMAIN 修改

一.  /home/carnews/admin/system/application/config
二.  /etc/apache2/conf.d
三. 


2012年2月15日 星期三

安裝php5-gd的元件方式

sudo /etc/init.d/apache2 stop
sudo apt-get install php5-gd
sudo /etc/init.d/apache2 start

2012年2月14日 星期二

SSH SCP 傳資料方式

scp是跑ssh
scp -r 來源  目標
如果是遠端
要加入登入的帳號
範例:
scp -r root@192.168.1.1:/etc /tmp