1. 程式人生 > >memcached啟動引數詳解以及關鍵配置的預設值

memcached啟動引數詳解以及關鍵配置的預設值

轉載地址:https://blog.csdn.net/luotuo44/article/details/42672913

關鍵配置的預設值:

        很多關鍵配置變數都是全域性結構體變數settings的成員變數。函式settings_init會將這些關鍵配置變數賦預設值。下面就把這些變數列出來並給予解釋。

[cpp] view plain copy print?
  1. static void settings_init(void) {  
  2.     //開啟CAS業務,如果開啟了那麼在item裡面就會多一個用於CAS的欄位。可以在啟動memcached的時候通過-C選項禁用  
  3.     settings.use_cas = true
    ;  
  4.     settings.access = 0700; //unix socket的許可權位資訊  
  5.     settings.port = 11211;//memcached監聽的tcp埠  
  6.     settings.udpport = 11211;//memcached監聽的udp埠  
  7.     //memcached繫結的ip地址。如果該值為NULL,那麼就是INADDR_ANY。否則該值指向一個ip字串  
  8.     settings.inter = NULL;  
  9.     settings.maxbytes = 64 * 1024 * 1024; //memcached能夠使用的最大記憶體  
  10.     settings.maxconns = 1024; //最多允許多少個客戶端同時線上。不同於settings.backlog
      
  11.     settings.verbose = 0;//執行資訊的輸出級別.該值越大輸出的資訊就越詳細  
  12.     settings.oldest_live = 0; //flush_all命令的時間界限。插入時間小於這個時間的item刪除。  
  13.     settings.evict_to_free = 1;  //標記memcached是否允許LRU淘汰機制。預設是可以的。可以通過-M選項禁止    
  14.     settings.socketpath = NULL;//unix socket監聽的socket路徑.預設不使用unix socket   
  15.     settings.factor = 1.25; //item的擴容因子
      
  16.     settings.chunk_size = 48; //最小的一個item能儲存多少位元組的資料(set、add命令中的資料)  
  17.     settings.num_threads = 4; //worker執行緒的個數  
  18.      //多少個worker執行緒為一個udp socket服務 number of worker threads serving each udp socket  
  19.     settings.num_threads_per_udp = 0;  
  20.     settings.prefix_delimiter = ':'//分隔符  
  21.     settings.detail_enabled = 0;//是否自動收集狀態資訊  
  22.     //worker執行緒連續為某個客戶端執行命令的最大命令數。這主要是為了防止一個客戶端霸佔整個worker執行緒  
  23.     //,而該worker執行緒的其他客戶端的命令無法得到處理  
  24.     settings.reqs_per_event = 20;  
  25.     settings.backlog = 1024;//listen函式的第二個引數,不同於settings.maxconns  
  26.     //使用者命令的協議,有檔案和二進位制兩種。negotiating_prot是協商,自動根據命令內容判斷  
  27.     settings.binding_protocol = negotiating_prot;  
  28.     settings.item_size_max = 1024 * 1024;//slab記憶體頁的大小。單位是位元組  
  29.     settings.maxconns_fast = false;//如果連線數超過了最大同時線上數(由-c選項指定),是否立即關閉新連線上的客戶端。  
  30.     //用於指明memcached是否啟動了LRU爬蟲執行緒。預設值為false,不啟動LRU爬蟲執行緒。  
  31.     //可以在啟動memcached時通過-o lru_crawler將變數的值賦值為true,啟動LRU爬蟲執行緒  
  32.     settings.lru_crawler = false;  
  33.     settings.lru_crawler_sleep = 100;//LRU爬蟲執行緒工作時的休眠間隔。單位為微秒   
  34.     settings.lru_crawler_tocrawl = 0; //LRU爬蟲檢查每條LRU佇列中的多少個item,如果想讓LRU爬蟲工作必須修改這個值  
  35.     //雜湊表的長度是2^n。這個值就是n的初始值。可以在啟動memcached的時候通過-o hashpower_init  
  36.     //設定。設定的值要在[12, 64]之間。如果不設定,該值為0。雜湊表的冪將取預設值16  
  37.     settings.hashpower_init = 0;  /* Starting hash power level */  
  38.     settings.slab_reassign = false;//是否開啟調節不同型別item所佔的記憶體數。可以通過 -o slab_reassign選項開啟  
  39.     settings.slab_automove = 0;//自動檢測是否需要進行不同型別item的記憶體調整,依賴於settings.slab_reassign的開啟  
  40.     settings.shutdown_command = false;//是否支援客戶端的關閉命令,該命令會關閉memcached程序  
  41.     //用於修復item的引用數。如果一個worker執行緒引用了某個item,還沒來得及解除引用這個執行緒就掛了  
  42.     //那麼這個item就永遠被這個已死的執行緒所引用而不能釋放。memcached用這個值來檢測是否出現這種  
  43.     //情況。因為這種情況很少發生,所以該變數的預設值為0(即不進行檢測)。  
  44.     //在啟動memcached時,通過-o tail_repair_time xxx設定。設定的值要大於10(單位為秒)  
  45.     //TAIL_REPAIR_TIME_DEFAULT 等於 0。  
  46.     settings.tail_repair_time = TAIL_REPAIR_TIME_DEFAULT;   
  47.     settings.flush_enabled = true;//是否執行客戶端使用flush_all命令  
  48. }     
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

完!!