<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的人生路  
    日歷
    <2005年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456
    統計
    • 隨筆 - 74
    • 文章 - 57
    • 評論 - 7
    • 引用 - 0

    導航

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    顏色

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     
    從簡化安裝==>性能調優==>方便維護的角度,討論WEB服務的規劃==>HTTPD安裝/應用模塊配置==>升級/維護等過程。
    讓APACHE的升級和PHP RESIN等應用模塊的升級完全互不影響。

    摘要:

    WEB應用容量規劃:根據硬件配置和WEB應用的特點進行WEB服務的規劃及一些簡單的估算公式;
    APACHE安裝過程:apache的通用的簡化安裝選項,方便以后的應用的模塊化配置;
    修改 HARD_SERVER_LIMIT:
    vi /path/to/apache_src/src/include/httpd.h
    #define HARD_SERVER_LIMIT 2560 <===將原來的 HARD_SERVER_LIMIT 256 后面加個“0”
    apache編譯:
    /path/to/apache_src/configure --prefix=/another_driver/apache --enable-shared=max --enable-module=most
    可選應用模塊/工具的安裝:php resin mod_gzip mod_expire及各個模塊之間的配合;
    PHP安裝:
    /path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --enable-track-vars --with-other-modules-you-need
    mod_resin安裝:
    /path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs
    Mod_gzip安裝:
    /path/to/apache/bin/apxs -i -a -c mod_gzip.c
    工具:cronolog安裝:http://www.cronolog.org
    升級/維護:看看通用和模塊化的安裝過程如何簡化了日常的升級/維護工作;
    按照以上的方法:系統管理員和應用管理員的職責可以清楚的分開,互相獨立。
    系統安裝:系統管理員的職責就是安裝系統=>安裝好一臺可以適應任何情況的APACHE,然后COLON,
    應用安裝:由應用管理員負責具體應用所需要的模塊并設置HTTPD。
    系統升級:系統管理員:升級系統/升級APACHE
    應用升級:系統管理員:升級應用模塊
    具體的說明:

    WEB應用的容量規劃

    APACHE主要是一個內存消耗型的服務應用,我個人總結的經驗公式:
    apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
    apache_max_process = apache_max_process_with_good_perfermance * 1.5

    為什么會有一個apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低負載下系統可以使用更多的內存用于文件系統的緩存,從而進一步提高單個請求的響應速度。在高負載下,系統的單個請求響應速度會慢不少,而超過apache_max_process,系統會因為開始使用硬盤做虛擬內存交換空間而導致系統崩潰。此外,同樣的服務:2G內存的機器的apache_max_process一般只設置到1G內存的1.7倍,因為APACHE本身會因為管理更多的進程而產生性能下降。

    例子1:
    一個apache + mod_php的服務器:一個apache進程一般需要4M內存
    因此在一個1G內存的機器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
    apache_max_process = 500 * 1.5 = 750
    所以規劃你的應用讓服務盡量跑在500個APACHE以下,并設置APACHE的軟上限在800個。

    例子2:
    一個apache + mod_resin的服務器: 一個apache進程一般需要2M內存
    在一個2G內存的機器上: apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
    因此:apache_max_process = 2000 * 1.5 = 3000

    以上估算都是按小文件服務估算的(一個請求一般大小在20k以下)。對于文件下載類型站點,可能還會受其他因素:比如帶寬等的影響。

    APACHE安裝過程

    服務器個數的硬上限HARD_SERVER_LIMIT的修改:
    在FREEBSD和LINUX等UNIX操作系統下APACHE缺省的最大進程數是256個,需要修改apache_1.3.xx/src/include/httpd.h
    #ifndef HARD_SERVER_LIMIT
    #ifdef WIN32
    #define HARD_SERVER_LIMIT 1024
    #elif defined(NETWARE)
    #define HARD_SERVER_LIMIT 2048
    #else
    #define HARD_SERVER_LIMIT 2560 <===將原來的HARD_SERVER_LIMIT 256 后面加個“0”
    #endif
    #endif

    解釋:
    APACHE缺省的最大用戶數是256個:這個配置對于服務器內存還是256M左右的時代是一個非常好的缺省設置,但隨著內存成本的急劇下降,現在大型站點的服務器內存配置一般比當時要高一個數量級不止。所以256個進程的硬限制對于一臺1G內存的機器來說是太浪費了,而且APACHE的軟上限max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服務器內存大于256M,都應該調高APACHE的HARD_SERVER_LIMIT。根據個人的經驗:2560已經可以滿足大部分小于2G內存的服務器的容量規劃了(APACHE的軟上限的規劃請看后面)。

    APACHE的編譯:通用的編譯選項能使安裝過程標準化
    ./configure --prefix=/another_driver/apache/ --enable-shared=max --enable-module=most

    解釋:
    --prefix=/another_driver/apache/: 一個系統使用壽命最低的一般就是硬盤,因此:將服務數據和系統完全分開,不僅能提高了數據的訪問速度,更重要的,大大方便系統升級,備份和恢復。

    --shared-module=max:使用動態加載方式會帶來5%的性能下降,但和帶來的好處相比更本不算什么:比如模塊升級方便,系統升級風險降低,安裝過程標準化

    --enable-module=most:用most可以將一些不常用的module編譯進來,比如后面講到的mod_expire是就不在apache的缺省常用模塊中

    如果不想build so, 也可以這樣:
    ./configure \
    "--with-layout=Apache" \
    "--prefix=/path/to/apache" \
    "--disable-module=access" \
    "--disable-module=actions" \
    "--disable-module=autoindex" \
    "--disable-module=env" \
    "--disable-module=imap" \
    "--disable-module=negotiation" \
    "--disable-module=setenvif" \
    "--disable-module=status" \
    "--disable-module=userdir" \
    "--disable-module=cgi" \
    "--disable-module=include" \
    "--disable-module=auth" \
    "--disable-module=asis"

    但結果會發現,這樣編譯對服務性能只能有微小的提高(5%左右),但卻失去了以后系統升級和模塊升級的靈活性,無論是模塊還是APACHE本身升級都必須把所有SOURCE加在一起重新編譯。

    apache的缺省配置文件一般比較大:我們可以使用去掉注釋的方法精簡一下:然后再進入具體的培植過程能讓你更快的定制出你所需要的。
    grep -v "#" httpd.conf.default >httpd.conf

    需要修改的通用項目有以下幾個:

    #服務端口,缺省是8080,建議將整個APACHE配置調整好后再將服務端口改到正式服務的端口
    Port 8080 => 80

    #服務器名:缺省沒有
    ServerName name.example.com

    #最大服務進程數:根據服務容量預測設置
    MaxClients 256 => 800

    #缺省啟動服務后的服務進程數:等服務比較平穩后,按平均負載下的httpd個數設置就可以
    StartServers 5 => 200

    不要修改:
    以前有建議說修改:
    MinSpareServers 5 => 100
    MaxSpareServers 10 => 200

    但從我的經驗看來:缺省值已經是非常優化的了,而且讓APACHE自己調整進程個數還是比較好的。

    特別修改:
    在solaris或一些比較容易出現內存泄露的應用上:
    MaxRequestsPerChild 0 =>3000

    應用模塊和工具的安裝配置:

    由于使用模塊動態加載的模式,所以可以方便的通過簡單的配置調整來把APACHE定制成你需要的:最好把不常用模塊全部清除(無論處于安全還是效率)。
    比如:對于靜態頁面服務器:就什么模塊都不加載,對于PHP應用就加上PHP模塊,對于JAVA應用就把RESIN模塊加載上。而且各種模塊的插拔非常簡單。


    一般說來,可以不需要的模塊包括:
    #LoadModule env_module libexec/mod_env.so
    #LoadModule negotiation_module libexec/mod_negotiation.so
    #LoadModule status_module libexec/mod_status.so
    #server side include已經過時了
    #LoadModule includes_module libexec/mod_include.so
    #不需要將沒有缺省index文件的目錄下所有文件列出
    #LoadModule autoindex_module libexec/mod_autoindex.so
    #盡量不使用CGI:一直是APACHE安全問題最多的地方
    #LoadModule cgi_module libexec/mod_cgi.so
    #LoadModule asis_module libexec/mod_asis.so
    #LoadModule imap_module libexec/mod_imap.so
    #LoadModule action_module libexec/mod_actions.so
    #不使用安全校驗可以大大提高訪問速度
    #LoadModule access_module libexec/mod_access.so
    #LoadModule auth_module libexec/mod_auth.so
    #LoadModule setenvif_module libexec/mod_setenvif.so

    最好保留的有:
    #用于定制log格式
    LoadModule config_log_module libexec/mod_log_config.so
    #用于增加文件應用的關聯
    LoadModule mime_module libexec/mod_mime.so
    #用于缺省index文件:index.php等
    LoadModule dir_module libexec/mod_dir.so

    可用可不用的有:
    #比如:需要在~/username/下調試php可以將
    LoadModule userdir_module libexec/mod_userdir.so
    #比如:需要將以前的URL進行轉向或者需要使用CGI script-alias
    LoadModule alias_module libexec/mod_alias.so


    常用的模塊:
    最常用的可能就是php和JAVA WEB應用的wrapper,此外,從性能上講:mod_gzip可以減少40%左右的流量,從而減少機器用于傳輸的負載,而mod_expires可以減少10%左右的重復請求,讓重復的用戶請求CACHE在本地,根本不向服務器發出請求。

    建議將所有MODULE的配置都放到

    PHP的安裝:
    /path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-modules-you-need
    需要修改的配置:
    AddType application/x-httpd-php .php .php3 .any_file_in_php

    resin的安裝設置:
    /path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs

    一般將具體的resin設置放在另外一個文件中:
    <IfModule mod_caucho.c>
    CauchoConfigFile /path/to/apache/conf/resin.conf
    </IfModule>

    mod_expires的安裝配置:
    <IfModule mod_expires.c>
    ExpiresActive on
    #所有的.gif文件1個月以后過期
    ExpiresByType image/gif "access plus 1 month"
    #所有的文件缺省1天以后過期
    ExpiresDefault "now plus 1 day"
    </IfModule>

    mod_gzip的安裝:
    /path/to/apache/bin/apxs -i -a -c mod_gzip.c


    mod_gzip和PHP在一起的配置
    <IfModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_minimum_file_size 1000
    mod_gzip_maximum_file_size 300000
    mod_gzip_item_include file \.htm$
    mod_gzip_item_include file \.html$
    mod_gzip_item_include file \.php$
    mod_gzip_item_include file \.php3$
    mod_gzip_item_include mime text/.*
    mod_gzip_item_include mime httpd/unix-directory
    #不要讓mod_gzip和php的session使用同一個臨時目錄:php_session需要通過php.ini設置session.save_path = /tmp/php_sess
    mod_gzip_temp_dir /tmp/mod_gzip
    mod_gzip_dechunk Yes
    mod_gzip_keep_workfiles No
    </IfModule>
    mod_gzip和mod_php的配合:不要讓mod_gzip和mod_php使用同一個臨時目錄;

    mod_gzip和RESIN配合:要讓mod_gzip在mod_caucho后LOAD,否則mod_gzip不起作用
    ...othr modules
    AddModule mod_so.c
    AddModule mod_caucho.c
    #notice: mod_gzip must load after mod_caucho
    AddModule mod_gzip.c
    AddModule mod_expires.c
    ...

    <IFModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_dechunk yes
    mod_gzip_keep_workfiles No
    mod_gzip_minimum_file_size 3000
    mod_gzip_maximum_file_size 300000
    mod_gzip_item_include file \.html$
    mod_gzip_item_include mime text/.*
    mod_gzip_item_include mime httpd/unix-directory
    mod_gzip_item_include handler 'caucho-request'
    </IFModule>

    日志輪循工具cronolog的安裝和設置:cronolog可以非常整齊的將日志按天輪循存儲
    缺省編譯安裝到/usr/local/bin/下,只需要將配置改成:

    CustomLog "|/usr/local/sbin/cronolog /path/to/apache/logs/%w/access_log" combined

    日志將按天截斷并存放在以weekday為目錄名的目錄下:比如:log/1是周一,log/5是周五, log/0是周日

    升級維護:

    由于使用標準化的DSO模式安裝APACHE,APACHE的HTTPD核心服務和應用模塊以及應用模塊之間都變的非常靈活,建議將所有獨立模塊的配置都放在
    <IfModule mod_name>
    CONFIGURATIONS..
    </IfModule>
    里,這樣配置非常容易通過屏蔽某個模塊來進行功能調整:比如:
    #AddModule mod_gzip.c
    就屏蔽了mod_gzip,其他模塊不首任何影響。

    安裝和維護過程:

    系統安裝:系統管理員的職責就是安裝系統和一個可以適應任何情況的APACHE,然后COLON。
    應用安裝:由應用管理員負責具體應用所需要的模塊并設置HTTPD。
    系統升級:系統管理員:升級系統/升級APACHE
    應用升級:應用管理員:升級應用模塊
    系統備份/恢復:如果APACHE不在缺省的系統盤上,只需要將APACHE目錄備份就可以了,遇到系統分區的硬件問題直接使用預先準備好的系統COLON,直接將APACHE所在物理盤恢復就行了。
    系統管理員:APACHE的最簡化安裝 OS + APACHE(httpd core only)
    應用管理員:應用模塊定制   +so
    +php
    +so
    +caucho
    +ssl
    應用: 純靜態頁面服務:
    image.example.com
    www.example.com bbs.example.com mall.example.com

     

    參考文檔:

    Apache
    http://httpd.apache.org

    php
    http://www.php.net

    Resin
    http://www.caucho.com

    mod_gzip
    http://www.remotecommunications.com/apache/mod_gzip/

    Cronolog
    http://www.cronolog.org

    mod_expires
    http://httpd.apache.org/docs/mod/mod_expires.html


    歡迎大家訪問我的個人網站 萌萌的IT人
    posted on 2005-07-07 18:07 一天一點愛戀 閱讀(178) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    Copyright © 一天一點愛戀 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 日本午夜免费福利视频| 国产大片免费网站不卡美女 | 一级毛片aaaaaa免费看| 国产aⅴ无码专区亚洲av麻豆| 鲁啊鲁在线视频免费播放| 亚洲精品无码99在线观看| 精品多毛少妇人妻AV免费久久| 激情97综合亚洲色婷婷五| 国产色爽免费无码视频| 亚洲人成亚洲精品| 1000部拍拍拍18免费网站| 亚洲中文无码mv| 免费国产成人午夜私人影视 | 你懂的在线免费观看| 亚洲AV无码乱码在线观看裸奔 | 在线精品亚洲一区二区小说| 男的把j放进女人下面视频免费| 内射少妇36P亚洲区| 国产精品无码免费播放| 免费无码专区毛片高潮喷水 | 亚洲一区无码中文字幕乱码| 成年女人免费视频播放体验区| 国产精品亚洲а∨无码播放麻豆| 久久久久亚洲精品天堂久久久久久 | 国产成人亚洲精品| 四虎永久成人免费影院域名| 一进一出60分钟免费视频| 亚洲成AV人片在线观看无| 99精品全国免费观看视频 | 亚洲色婷婷综合开心网| 久久午夜夜伦鲁鲁片无码免费| 亚洲国产日韩在线人成下载 | 国产亚洲精品免费| 国产一区二区免费视频| 亚洲AV无码无限在线观看不卡| 亚洲国产中文字幕在线观看 | 在线免费观看你懂的| 丰满亚洲大尺度无码无码专线| 国产精品亚洲精品日韩已满| 毛片免费在线视频| 国产免费人成视频尤勿视频|