Memcached原始碼閱讀之初始化引數解析

2021-07-05 09:23:59 字數 2384 閱讀 9943

memcached啟動時,有很多配置引數可以選擇,這些配置引數嚴重影響著memcached的使用,下面分析下這些引數的意義,開源軟體版本之間差異比較大,我這次分析是基於1.4.15進行分析的,大家學習時記得核對版本。

[cpp]view plain

copy

"a:"

//unix socket的許可權位資訊,unix socket的許可權位資訊和普通檔案的許可權位資訊一樣

"p:"

//memcached監聽的tcp埠值,預設是11211

"s:"

//unix socket監聽的socket檔案路徑

"u:"

//memcached監聽的udp埠值,預設是11211

"m:"

//memcached使用的最大記憶體值,預設是64m

"m"//當memcached的記憶體使用完時,不進行lru淘汰資料,直接返回錯誤,該選項就是關閉lru

"c:"

//memcached的最大連線數,如果不指定,按系統的最大值進行

"k"//是否鎖定memcached所持有的記憶體,如果鎖定了記憶體,其他業務持有的記憶體就會減小

"hi"

//幫助資訊

"r"//core檔案的大小,如果不指定,按系統的最大值進行

"v"//除錯資訊

"d"//設定以daemon方式執行

"l:"

//繫結的ip資訊,如果伺服器有多個ip,可以在多個ip上面啟動多個memcached例項,注意:這個不是可接收的ip位址

"u:"

//memcached執行的使用者,如果以root啟動,需要指定使用者,否則程式錯誤,退出。

"p:"

//memcached以daemon方式執行時,儲存pid的檔案路徑資訊

"f:"

//記憶體的擴容因子,這個關係到memcached內部初始化空間時的乙個變化,後面詳細說明

"n:"

//chunk的最小大小(byte),後續的增長都是該值*factor來進行增長的

"t:"

//內部worker執行緒的個數,預設是4個,最大值推薦不超過64個

"d:"

//內部資料儲存時的分割符

"l"//指定記憶體頁的大小,預設記憶體頁大小為4k,頁最大不超過2m,調大頁的大小,可有效減小頁表的大小,提高記憶體訪問的效率

"r:"

//單個worker的最大請求個數

"c"//禁用業務的cas,即compare and set

"b:"

//listen操作快取連線個數

"b:"

//memcached內部使用的協議,支援二進位制協議和文字協議,早期只有文字協議,二進位制協議是後續加上的

"i:"

//單個item的最大值,預設是1m,可以修改,修改的最小值為1k,最大值不能超過128m

"s"//開啟sasl安全協議

"o:"

//有四個引數項可以設定:

maxconns_fast(如果連線數超過最大連線數,立即關閉新的連線)  

hashpower(hash表的大小的指數值,是按1

slab_automove(是否自動移動各個slab,如果該選項開啟,會有專門的執行緒來進行slab的調整)  

memcached內部是通過settings來抽象上面的這些初始化引數。

[cpp]view plain

copy

struct

settings ;  

改結構的初始化:

[cpp]view plain

copy

static

void

settings_init(

void

)    

這些值都是一些預設值,後續按啟動時所指定的進行修改,比如對監聽埠號的修改:

[cpp]view plain

copy

case

'a':

//修改unix socket的許可權位資訊

settings.access = strtol(optarg, null, 8);  

break

;  case

'u':

//udp埠資訊

settings.u***ort = atoi(optarg);  

udp_specified = true

;  break

;  case

'p':

//tcp埠資訊

settings.port = atoi(optarg);  

tcp_specified = true

;  break

;  

Memcached原始碼閱讀之伺服器資源調整

本篇部落格作為memcached原始碼分析的開篇,這次閱讀的原始碼版本為 1.4.15,開源軟體各個版本之間差異比較大,同學們學習時,記得核對版本。memcached的main函式位於memcached.c檔案中,從main函式啟動之後,會初始化一些資源和申請一些伺服器資源,如下面所示 1 core...

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...

原始碼閱讀 Glide原始碼閱讀之load方法(二)

原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...