今天看了 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。
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>
然後在你的 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)。
- Previous: [文件] Apache2 網頁伺服器架設與管理 (rev. 22) @2005/05/04
- Next: [文件] Samba - 整合Windows Network @2005/05/08
Please send trackback to: http://blog.seety.org/everydaywork/2005/5/7/312/trackback/.