Varnish 服務管理與效能調優

2021-09-03 09:00:04 字數 2498 閱讀 3486

每乙個來自客戶端請求在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.開發人員不一定能直接觸碰生產環境 監控...