每乙個來自客戶端請求在varnish
中都是乙個
session
,乙個session
會被分配到乙個空閒的
thread
處理。 當沒有空閒的
thread
時,varnish
會建立新的
thread
來處理。 當全域性的
thread
數量超過
thread_pool_max * thread_pools
時, varnish
會將請求放入佇列,當佇列滿時,
varnish
開始丟棄請求。
varnish
的預設配置,
thread_pools為2
,thread_pool_max
為500
,也即最多
1000
個thread
。 當併發處理的請求量(注意不等價與併發請求量)大於
1000
時,varnish
就過載了。
下面我們來看看如何調整執行緒池
管理命令:
varnishadm
param.show -l //列出所有配置引數,與注釋。
param.show
thread_pool_max 1000 [threads] //定義執行緒池最大執行緒
thread_pool_min 50 [threads] //每個執行緒池最小活動執行緒
thread_pools 2 [pools] //啟用多少個執行緒池
lru_interval 2 [seconds] //使用(
lru)最近最少使用演算法,清理快取物件的頻率,預設
2秒一次。
listen_depth 1024 [connections] //當執行緒池滿了,後續請求佇列的長度。
現在我們對這些引數進行調整
param.set thread_pool_max 2000
param.set thread_pools 4
param.set thread_pool_min 100
調整完成檢視一下
注意:thread_pools
參考機器物理核心的數量,官方建議設定為2。執行緒數不建議太多,超過
5000
也許會帶來服務不穩定。
配置調優
beresp.grace 表示乙個
object
即使已經過期了,仍然在快取中存放一段時間。
req.grace 表示,當乙個請求命中了乙個剛過期的
object
,由於回源需要一段時間, 為了立刻返回,那麼在過期後的
req.grace
時間內, 可以將過期的那個
object
返回給客戶端, 當然,這要求
業務要求大致如此,對於乙個domain
下的請求,客戶端總是會帶
cookie
, 而該
domain
下面有一些請求是需要快取的。在之前的配置中,
vcl_recv
中設定了只要有
cookie
就return(pass)
, 因此如果某個
url需要快取,就需要手動對該
url在
vcl_recv
中 刪除
,並在vcl_fetch
中刪除beresp.http.set-cookie
。 這樣運維的工作與後端的開發工作就耦合了。期望的效果是,後端如果需要快取某個
url,則在該請求的返回頭中帶有
cache-control
頭, 然後
varnish
就自動根據該頭來快取相應的時間,而如果乙個請求的返回中沒有
cache-control
頭,則預設不能快取。
varnishstat 用於檢視varnish狀態
日誌功能的使用
檢視日誌
本章內容並非全部原創,有引用大牛網友的分享。
推薦閱讀:
高效能快取伺服器Varnish
varnish是一款高效能的 開源的反向 伺服器和快取伺服器,計算機系統的除了有記憶體外,還有cpu的l1 l2,甚至l3級別的快取,varnish的設計架構就是利用作業系統的快取機制處理訪問 vcl,即varnish configuration language,是varnish的配置語言。在執行...
MySQL效能診斷與調優 轉
book lamp 系統效能調優,第 3 部分 mysql 伺服器調優 loadrunner監控mysql advanced mysql performance optimization performance optimization.pdf improving mysql server perf...
效能調優之linux與架構
調優常用命令 學習linux命令技巧 1.抓大放小,記住命令本身,引數記住幾個最常用的即可。2.多敲,熟能生巧 3.命令 help 幫助文件 4.man 命令 詳細說明 使用命令存在的問題 1.學習成本高 2.只能操作一台機器 3.傳送了命令才能知道運 況 4.開發人員不一定能直接觸碰生產環境 監控...