今天看了 czug-plone 的討論 ,才覺得自己太鴕鳥了,竟然滿足於 http://www.seety.org/ 5 hits/sec 的速度,於是開始想辦法調整一下伺服器。

目前先採取 Apache2 mod_proxy 加上 mod_cache,用 Apache2 的快取 (記憶體與磁碟快取雙管齊下) 機制來加速 Plone 網站,結果得到了 5x hits/sec;10 倍的加速效果。

下一步是採用 ZEO,有空再試試看 squid;P4 3.0 不應該輸 Athlon 1.2G 那麼多。

以下詳列作法。

作法

要改的有兩個地方:Plone (2.0.5) 的 header 和 Apache2。

  1. Plone 2.0.5 的 /portal_skins/plone_templates/global_cache_settings 要自訂一下,允許快取頁面:

    <metal:cacheheaders define-macro="cacheheaders">
        <metal:block
         tal:define="dummy python:request.RESPONSE.setHeader("
         "'Content-Type', 'text/html;;charset = %s' % charset)" />
        <metal:block
         tal:define="dummy python:request.RESPONSE.setHeader("
         "'Content-Language', lang)" />
        <metal:block
         tal:define="dummy python:request.RESPONSE.setHeader("
         "'Vary', 'Accept-Language,Accept-Encoding,User-Agent,Cookie')" />
        <metal:block
         tal:define="dummy python:request.RESPONSE.setHeader("
         "'Cache-Control', 'max-age=3600, must-revalidate ')" />
        <metal:block
         tal:define="dummy python:request.RESPONSE.setHeader("
         "'Connection', 'keep-alive')" />
        <metal:block
         tal:content="structure python:here.enableHTTPCompression("
         "request=request, debug=0)" />
    </metal:cacheheaders>
    
  2. 然後在你的 Apache2 組態檔裡加上 mod_cache 的相關指令 (不要忘了載入 mod_cache, mod_mem_cache 和 mod_disk_cache):

    # Cache General Setting
    CacheEnable mem /
    CacheEnable disk /
    CacheForceCompletion 100
    CacheDefaultExpire 3600
    CacheMaxExpire 86400
    CacheLastModifiedFactor 0.1
    
    # Memory Cache Setting
    MCacheSize 8192
    MCacheMaxObjectCount 10000
    MCacheMinObjectSize 1
    MCacheMaxObjectSize 51200
    
    # Disk Cache Setting
    CacheRoot "/var/cache/apache2/your/path"
    CacheSize 327680
    CacheDirLength 4
    CacheDirLevels 5
    CacheGcInterval 4
    

參考資料

mod_cache:

  • CacheEnable: 啟動 mod_cache,其後接兩個參數。第一個參數指定快取的種類,應設為 mem (記憶體快取) 或 disk (磁碟快取) 之其一;第二個參數指定使用快取的 URI 路徑,如果對整個網站 (或虛擬主機) 進行快取,簡單指定為根目錄 (/) 即可。

  • CacheForceCompletion: 這個值指定當 HTTP request 被取消時,內容的產生動作要完成的百分比;預設是 60(%)。

  • CacheDefaultExpire: 指定快取的預設過期秒數;預設值是一小時 (3600)。

  • CacheMaxExpire: 指定快取最大的過期秒數;預設值是一天 (86400)。

  • CacheLastModifiedFactor: 用來從回應裡 Last Modified 資訊算出 expire date。計算方式是:

    expire period (過期時距) = 最後更新後至今的時間間距 * CacheLastModifiedFactor

    expire date = 目前時間 + expire period

    不過無論如何,過期時間不能超過 CacheMaxExpire 的設定值。

mod_disk_cache:

  • CacheRoot: 指定磁碟快取所使用的目錄。
  • CacheSize: 以 KByte 為單位指定快取使用的磁碟空間大小。
  • CacheDirLength: 指定各目錄 (的鍵值) 存在於快取階層 (hierarchy) 中所使用的字元數。
  • CacheDirLevels: 指定快取的目錄層數; CacheDirLength 與此 CacheDirLevels 設定值相乘不能超過 20。
  • CacheGcInterval: 指定收垃圾 (Garbage Collection) 的動作間隔時間;單位是小時。不過根據 Apache2 文件,這個指令還 沒有被實作

mod_mem_cache:

  • MCacheSize: 以 KByte 為單位指定快取使用的記憶體空間大小。
  • MCacheMaxObjectCount: 指定快取物件數目的最大值;預設值是 1009。
  • MCacheMaxObjectSize: 指定最大可快取物件的大小,單位是 Byte;預設值是 10000 (Bytes)。
  • MCacheMinObjectSize: 指定最小可快取物件的大小,單位是 Byte;預設值是 0 (Bytes)。
Posted by yungyuc at 22:33, 0 comment, 0 trackback.
Add a trackback
Add a comment

Your name. (required)

Your personal website. (optional)

Your email address. Will not show in page. (suggested, but optional)

Text format is "Plain Text".

Enter "QKNBE"
© hover year to navigate month: powered by django