memcached啟動引數詳解以及關鍵配置的預設值
阿新 • • 發佈:2019-01-07
轉載地址:https://blog.csdn.net/luotuo44/article/details/42672913
關鍵配置的預設值:
很多關鍵配置變數都是全域性結構體變數settings的成員變數。函式settings_init會將這些關鍵配置變數賦預設值。下面就把這些變數列出來並給予解釋。
- static void settings_init(void) {
- //開啟CAS業務,如果開啟了那麼在item裡面就會多一個用於CAS的欄位。可以在啟動memcached的時候通過-C選項禁用
- settings.use_cas = true
- settings.access = 0700; //unix socket的許可權位資訊
- settings.port = 11211;//memcached監聽的tcp埠
- settings.udpport = 11211;//memcached監聽的udp埠
- //memcached繫結的ip地址。如果該值為NULL,那麼就是INADDR_ANY。否則該值指向一個ip字串
- settings.inter = NULL;
- settings.maxbytes = 64 * 1024 * 1024; //memcached能夠使用的最大記憶體
- settings.maxconns = 1024; //最多允許多少個客戶端同時線上。不同於settings.backlog
- settings.verbose = 0;//執行資訊的輸出級別.該值越大輸出的資訊就越詳細
- settings.oldest_live = 0; //flush_all命令的時間界限。插入時間小於這個時間的item刪除。
- settings.evict_to_free = 1; //標記memcached是否允許LRU淘汰機制。預設是可以的。可以通過-M選項禁止
- settings.socketpath = NULL;//unix socket監聽的socket路徑.預設不使用unix socket
- settings.factor = 1.25; //item的擴容因子
- settings.chunk_size = 48; //最小的一個item能儲存多少位元組的資料(set、add命令中的資料)
- settings.num_threads = 4; //worker執行緒的個數
- //多少個worker執行緒為一個udp socket服務 number of worker threads serving each udp socket
- settings.num_threads_per_udp = 0;
- settings.prefix_delimiter = ':'; //分隔符
- settings.detail_enabled = 0;//是否自動收集狀態資訊
- //worker執行緒連續為某個客戶端執行命令的最大命令數。這主要是為了防止一個客戶端霸佔整個worker執行緒
- //,而該worker執行緒的其他客戶端的命令無法得到處理
- settings.reqs_per_event = 20;
- settings.backlog = 1024;//listen函式的第二個引數,不同於settings.maxconns
- //使用者命令的協議,有檔案和二進位制兩種。negotiating_prot是協商,自動根據命令內容判斷
- settings.binding_protocol = negotiating_prot;
- settings.item_size_max = 1024 * 1024;//slab記憶體頁的大小。單位是位元組
- settings.maxconns_fast = false;//如果連線數超過了最大同時線上數(由-c選項指定),是否立即關閉新連線上的客戶端。
- //用於指明memcached是否啟動了LRU爬蟲執行緒。預設值為false,不啟動LRU爬蟲執行緒。
- //可以在啟動memcached時通過-o lru_crawler將變數的值賦值為true,啟動LRU爬蟲執行緒
- settings.lru_crawler = false;
- settings.lru_crawler_sleep = 100;//LRU爬蟲執行緒工作時的休眠間隔。單位為微秒
- settings.lru_crawler_tocrawl = 0; //LRU爬蟲檢查每條LRU佇列中的多少個item,如果想讓LRU爬蟲工作必須修改這個值
- //雜湊表的長度是2^n。這個值就是n的初始值。可以在啟動memcached的時候通過-o hashpower_init
- //設定。設定的值要在[12, 64]之間。如果不設定,該值為0。雜湊表的冪將取預設值16
- settings.hashpower_init = 0; /* Starting hash power level */
- settings.slab_reassign = false;//是否開啟調節不同型別item所佔的記憶體數。可以通過 -o slab_reassign選項開啟
- settings.slab_automove = 0;//自動檢測是否需要進行不同型別item的記憶體調整,依賴於settings.slab_reassign的開啟
- settings.shutdown_command = false;//是否支援客戶端的關閉命令,該命令會關閉memcached程序
- //用於修復item的引用數。如果一個worker執行緒引用了某個item,還沒來得及解除引用這個執行緒就掛了
- //那麼這個item就永遠被這個已死的執行緒所引用而不能釋放。memcached用這個值來檢測是否出現這種
- //情況。因為這種情況很少發生,所以該變數的預設值為0(即不進行檢測)。
- //在啟動memcached時,通過-o tail_repair_time xxx設定。設定的值要大於10(單位為秒)
- //TAIL_REPAIR_TIME_DEFAULT 等於 0。
- settings.tail_repair_time = TAIL_REPAIR_TIME_DEFAULT;
- settings.flush_enabled = true;//是否執行客戶端使用flush_all命令
- }
static void settings_init(void) {
//開啟CAS業務,如果開啟了那麼在item裡面就會多一個用於CAS的欄位。可以在啟動memcached的時候通過-C選項禁用
settings.use_cas = true;
settings.access = 0700; //unix socket的許可權位資訊
settings.port = 11211;//memcached監聽的tcp埠
settings.udpport = 11211;//memcached監聽的udp埠
//memcached繫結的ip地址。如果該值為NULL,那麼就是INADDR_ANY。否則該值指向一個ip字串
settings.inter = NULL;
settings.maxbytes = 64 * 1024 * 1024; //memcached能夠使用的最大記憶體
settings.maxconns = 1024; //最多允許多少個客戶端同時線上。不同於settings.backlog
settings.verbose = 0;//執行資訊的輸出級別.該值越大輸出的資訊就越詳細
settings.oldest_live = 0; //flush_all命令的時間界限。插入時間小於這個時間的item刪除。
settings.evict_to_free = 1; //標記memcached是否允許LRU淘汰機制。預設是可以的。可以通過-M選項禁止
settings.socketpath = NULL;//unix socket監聽的socket路徑.預設不使用unix socket
settings.factor = 1.25; //item的擴容因子
settings.chunk_size = 48; //最小的一個item能儲存多少位元組的資料(set、add命令中的資料)
settings.num_threads = 4; //worker執行緒的個數
//多少個worker執行緒為一個udp socket服務 number of worker threads serving each udp socket
settings.num_threads_per_udp = 0;
settings.prefix_delimiter = ':'; //分隔符
settings.detail_enabled = 0;//是否自動收集狀態資訊
//worker執行緒連續為某個客戶端執行命令的最大命令數。這主要是為了防止一個客戶端霸佔整個worker執行緒
//,而該worker執行緒的其他客戶端的命令無法得到處理
settings.reqs_per_event = 20;
settings.backlog = 1024;//listen函式的第二個引數,不同於settings.maxconns
//使用者命令的協議,有檔案和二進位制兩種。negotiating_prot是協商,自動根據命令內容判斷
settings.binding_protocol = negotiating_prot;
settings.item_size_max = 1024 * 1024;//slab記憶體頁的大小。單位是位元組
settings.maxconns_fast = false;//如果連線數超過了最大同時線上數(由-c選項指定),是否立即關閉新連線上的客戶端。
//用於指明memcached是否啟動了LRU爬蟲執行緒。預設值為false,不啟動LRU爬蟲執行緒。
//可以在啟動memcached時通過-o lru_crawler將變數的值賦值為true,啟動LRU爬蟲執行緒
settings.lru_crawler = false;
settings.lru_crawler_sleep = 100;//LRU爬蟲執行緒工作時的休眠間隔。單位為微秒
settings.lru_crawler_tocrawl = 0; //LRU爬蟲檢查每條LRU佇列中的多少個item,如果想讓LRU爬蟲工作必須修改這個值
//雜湊表的長度是2^n。這個值就是n的初始值。可以在啟動memcached的時候通過-o hashpower_init
//設定。設定的值要在[12, 64]之間。如果不設定,該值為0。雜湊表的冪將取預設值16
settings.hashpower_init = 0; /* Starting hash power level */
settings.slab_reassign = false;//是否開啟調節不同型別item所佔的記憶體數。可以通過 -o slab_reassign選項開啟
settings.slab_automove = 0;//自動檢測是否需要進行不同型別item的記憶體調整,依賴於settings.slab_reassign的開啟
settings.shutdown_command = false;//是否支援客戶端的關閉命令,該命令會關閉memcached程序
//用於修復item的引用數。如果一個worker執行緒引用了某個item,還沒來得及解除引用這個執行緒就掛了
//那麼這個item就永遠被這個已死的執行緒所引用而不能釋放。memcached用這個值來檢測是否出現這種
//情況。因為這種情況很少發生,所以該變數的預設值為0(即不進行檢測)。
//在啟動memcached時,通過-o tail_repair_time xxx設定。設定的值要大於10(單位為秒)
//TAIL_REPAIR_TIME_DEFAULT 等於 0。
settings.tail_repair_time = TAIL_REPAIR_TIME_DEFAULT;
settings.flush_enabled = true;//是否執行客戶端使用flush_all命令
}
當然這個函式並沒有給settings的所有成員變數都賦值,剩下的那些成員變數不那麼重要。
命令列引數詳解:
memcached是使用getopt和getsubopt解析命令列引數的,下面給出的這些命令列選項與這兩個解析函式有關:凡是選項後面有冒號的就表示這個選項必須要有一個引數;沒有冒號的就沒有引數;memcached沒有使用雙冒號的選項。關於getopt和getsubopt的具體使用可以參考《getopt和getsubopt命令列解析函式》。
- "A" 是否執行客戶端使用shutdown命令。預設是不允許的。該選項將允許。客戶端的shutdown命令會將memcached程序殺死。該選項會將settings.shutdown_command賦值為false
- "a:" unix socket的許可權位資訊(訪問掩碼)。該選項的引數賦值給settings.access
- "U:" 大寫U。memcached監聽的UDP埠值,預設埠為11211。該選項的引數賦值給settings.udpport
- "p:" 小寫p,memcached監聽的tcp埠。預設埠為11211, 該選項的引數賦值給settings.port
- "s:" 小寫S。unix socket監聽的socket路徑。該選項的引數賦值給settings.socketpath
- "m:" 小寫m。memcached能夠使用的最大記憶體值,預設是64MB。引數單位為MB。該引數賦值給settings.maxbytes
- "M" 大寫M。預設情況下,當memcached的記憶體使用完後,將進行LRU機制淘汰item以騰出空間。如果使用本選項那麼將關閉LRU功能。當然關閉LRU不代表不能儲存新資料。如果memcached裡面存有過期失效的item,那麼就可以儲存新資料。否則將無法儲存。該選項將settings.evict_to_free賦值為0。
- "c:" 小寫c。最多允許多少個客戶端同時線上(這個值不等價於listen函式的第二個引數),該選項和後面的b選項有所不同。 預設值為1024個。該選項引數賦值給settings.maxconns。
- "h" 顯示幫助資訊
- "i" 顯示memcached和libevent的版權資訊
- "k" 小寫k。將memcached使用到的記憶體鎖定在記憶體中,不準OS把memcached的記憶體移動到虛擬記憶體。因為當OS把memcached的記憶體移動到虛擬記憶體可能會導致頁錯誤,降低memcached的響應時間
- "v" 小寫v。輸出memcached執行時的一些資訊。-v -vv -vvv輸出的資訊依次增加。該選項會增加settings.verbose的值
- "l:" 小寫L。memcached繫結的ip地址。如果不設定這個選項,那麼memcached將使用INADDR_ANY。如果想指定多個IP地址,那麼該選項的引數可以由多個ip組成,ip之間用逗號分隔。也可以多次使用這個選項,此時埠應該尾隨ip而不是單獨用-p選項指定。例如-l 127.0.0.1:8888,192.168.1.112:9999 或者 -l 127.0.0.1:8888 -l 192.168.1.112:9999該選項引數將賦值給settings.inter
- "d" 以守護程序的形式執行memcached
- "r" 將core檔案大小設定為不受限制
- "R:" worker執行緒連續為某個客戶端執行命令的最大命令數。該選項的引數賦值給settings.reqs_per_event
- "u:" 小寫u。當以root使用者啟動memcached的時候需要指定memcached的所屬使用者,其他使用者啟動memcached不需要此選項
- "P:" 大寫p。該選項的引數指明memcached的pid儲存檔案。要和-d選項配合使用。注意執行的使用者是否有許可權寫對應的檔案
- "f:" item的擴容因子。預設值為1.25。該選項的引數值可以是小數但必須大於1.0。該選項引數將賦值給settings.factor
- "n:" 設定最小的item能儲存多少位元組的資料。該選項引數賦值給settings.chunk_size
- "t:" 該選項的引數用於指定worker執行緒的個數,不建議超過64個。如果不設定該選項預設有4個執行緒。該引數會賦值給settings.num_threads
- "D:" 引數字元作為字首和ID的分隔符。使用了該選項才會自動收集狀態資訊。也可以在啟動memcached後,客戶端使用stats detail on命令開啟,此時預設的分隔符為冒號":"。該選項引數會賦值為settings.prefix_delimiter,並將settings.detail_enabled賦值為1
- "L" 如果OS允許的話,那麼向OS申請更大的記憶體頁。OS的預設記憶體頁為4KB。大的記憶體頁可以有效降低頁表的大小,提高效率。此選項會使得memcached預先先OS全部所需的申請記憶體。當然這些記憶體儘量是用大記憶體頁分配的
- "C:" 大寫C。memcached預設是使用CAS的,本選項是禁用CAS。本選項會將settings.use_cas賦值為false
- "b:" listen函式的第二個引數。該選項的引數賦值給settings.backlog。如果不設定該選項,那麼預設為1024。該選項和前面的c選項有所不同
- "B:" memcached支援文字協議和二進位制協議。該選項的引數用於指定使用的協議。預設情況下是根據客戶端的命令而自動判斷(也叫協商),引數只能取auto、binary、ascii這三個字串值。將引數將賦值給settings.binding_protocol
- "I:" 大寫i。slab分配器中,每一個頁的大小。這個選項的引數是一個數值表示頁的大小。預設單位是B也可以在數值後面帶K或者M(大小寫都行),表示KB和MB。頁的大小小於1KB或者大於128MB都是不允許的。不推薦使用該選項。本選項引數會賦值給settings.item_size_max
- "S" 大寫S。開啟sasl安全協議。會將settings.sasl賦值為true
- "F" 禁止客戶端的flush_all命令。預設是允許客戶端的flush_all命令的。該選項將settings.flush_enabled賦值為false
- "o:" 小寫o。有下面幾個子選項可以設定。這個選項是用來優化的
- maxconns_fast: 如果連線數超過了最大同時線上數(由-c選項指定),立即關閉新連線上的客戶端。該選項將settings.maxconns_fast賦值為true
- hashpower: 雜湊表的長度是2^n。可以通過選項hashpower設定指數n的初始值。如果不設定將取預設值16。該選項必須有引數,引數取值範圍只能為[12, 64]。本選項引數值賦值給settings.hashpower_init
- slab_reassign: 該選項沒有引數。用於調節不同型別的item所佔的記憶體。不同型別是指大小不同。某一類item已經很少使用了,但仍佔用著記憶體。可以通過開啟slab_reassign排程記憶體,減少這一類item的記憶體。如果使用了本選項,settings.slab_reassign賦值為true
- slab_automove: 依賴於slab_reassign。用於主動檢測是否需要進行記憶體排程。該選項的引數是可選的。引數的取值範圍只能為0、1、2。引數2是不建議的。本選項引數賦值給settings.slab_automove。如果本選項沒有引數,那麼settings.slab_automove賦值為1
- hash_algorithm: 用於指定雜湊演算法。該選項必須帶有引數。並且引數只能是字串jenkins或者murmur3
- tail_repair_time: 用於檢測是否有item被已死執行緒所引用。一般不會出現這種情況,所以預設不開啟這種檢測。如果需要開啟這種檢測,那麼需要使用本選項。本選項需要一個引數,引數值必須不小於10。該引數賦值給settings.tail_repair_time
- lru_crawler: 本選項用於啟動LRU爬蟲執行緒。該選項不需要引數。本選項會導致settings.lru_crawler賦值為true
- lru_crawler_sleep: LRU爬蟲執行緒工作時的休眠間隔。本選項需要一個引數作為休眠時間,單位為微秒,取值範圍是[0, 1000000]。該引數賦值給settings.lru_crawler_sleep
- lru_crawler_tocrawl: LRU爬蟲檢查每條LRU佇列中的多少個item。該選項帶有一個引數。引數會賦值給settings.lru_crawler_tocrawl
完!!