memcached啟動過程1

2021-06-19 17:31:42 字數 3065 閱讀 6775

啟動過程安裝main函式呼叫函式來分析

1 sanitycheck 這個是完整性分析,主要是檢視libevent版本是不是1.1或者1.2,如果低於1.1 1.2 請公升級到1.1 或者最高(呼叫event_get_version返回乙個字串)(在自己的電腦上面得到的版本是2.0.21-stable 編譯的時候要加上-levent這個庫名字) 

2signal 定義sigint 處理辦法就是退出,這個是對中斷訊號的處理方法

3 setbuf呼叫此函式來關閉出錯緩衝setbuf(stderr,null);

4 (乙個大迴圈基本可以就結束了)while迴圈呼叫getopt 返回值不為-1

getopt 第一第二引數主函式的引數

後面解釋一下使用者輸入引數的選項的意思

-a  後面接的8八進位制表示unix socket許可權

-p tcp鏈結伺服器的埠

-s unix socket 目錄

-u udp埠

-m 最大記憶體

-m 記憶體耗盡返回錯誤 後面無需引數

-c 最大鏈結

-k鎖定所有分頁記憶體 後面無需引數

-hi 幫助資訊,以及註冊資訊(後面無需引數)

-v表示詳細資訊 無需引數

-d表示deamon模式執行

-l 表示監聽藉口

-p 儲存memcached程序pid檔案

-n 最小分配給key+value+flags記憶體空間大小

-t 執行緒數目

-l 大記憶體頁(不懂

-r 每個事件最大連線數

-c不適用cas 後面不帶引數

-b繫結協議

-s開啟sasl (這個需要首先安裝libsasl,然後安裝gsasl)

-o 擴充套件選項

(如果在迴圈內呼叫while (-1 != (c = getopt(argc, argv, "a:"   "p:"  "s:")) )

此時主函式的引數是-a 100 -p 999 -s fasdfas 

呼叫的時候輸出是

100999

fasdfas )

實際上在memcached中將所有的-* 後面的引數賦給全域性結構體settings中的某個成員

case a 是呼叫strtol將optarg轉換為8進製的書返回給settings成員access

case u 是呼叫atoi將optarg轉為整數賦給settings成員u***ort

case p 呼叫atoi將optarg轉為整數賦給settings成員port(也就是預設的tcp協議埠)

case s 將optarg直接賦給settings成員socketpath

case m 呼叫atoi將optarg轉為整數賦給settings成員maxbytes然後乘以1024*1024 實際上就是限制了最大的記憶體空間(以兆為單位)

case m 記憶體耗盡將settings成員evict_to_free賦為0

case c 呼叫atoi將optarg轉為整數賦給賦給settings成員 maxconns

case h 呼叫usage(),輸出用法資訊,然後呼叫exit退出

case i 呼叫useage_license,然後退出

case k 將main內變數lock_memory設為1

case v 將賦給settings成員verbose 自加1

case l 如果賦給settings成員inter不為空,則將-l後面的引數和inter一起放入inter,如果為空則將-l後面引數賦給inter

case d 使用deamon模式yunxing

case r 將main變數maxconre設為1

case r 將optarg轉為整數賦給賦給settings成員reqs_per_event

case u 將optarg賦給username

case p  將optarg賦給pid_file

case f  將optarg轉換為浮點數也就是每次相乘的不是2,而是轉為浮點數的賦給settings成員factor變數(且不能小於1)

case t 將呼叫atoi將optarg轉為整數賦給賦給settings成員賦給settings成員num_threads也就是多少個執行緒執行如果執行緒數大於64或者小於0都不行

case d 如果optarg為空或者第乙個字元為空,main函式返回,程式終止,如果不成立則將optarg第乙個字元賦給賦給settings成員prefix_delimiter,然後settings.detail_enabled = 1;

case l 如果支援大葉分配則將preallocate賦為true,如果不支援則返回錯誤資訊

case c settings成員use_cas賦為0

case b 呼叫atoi將optarg轉為整數賦給settings成員backlog

case b 如果optarg為auto則將settings成員binding_protocol 賦為negotiating_prot,如果為binary則將settings.binding_protocol = ascii_prot;settings.binding_protocol = binary_prot;如果為ascii則將settings.binding_protocol = ascii_prot;,其他選項都是錯誤的

case i,optarg最後乙個字元如果為k或者k,m,m,則將optarg轉為記憶體大(如果最後為k,k則是多少kb位元組,如果為m,m則是多少兆位元組),然後賦給settings.item_size_max,

case s如果 本系統支援sasl則將將settings成員sasl賦為true,如果不支援列印輸出

case o 呼叫getsubopt來得到optarg引數下的子引數,比如hashpower_init slab_reassign,slab_autmove等等

迴圈結束

如果全域性結構體settings成員inter不為空,且inter裡面有乙個,號,則settings.num_threads_per_udp = 1;否則settings.num_threads_per_udp = settings.num_threads;

如果settings成員sasl不為false,如果指定了協議,則將settings繫結的協議

太詳細了,換成自己的語言

u boot啟動過程 1

u boot的啟動過程 1.start.s檔案 此彙編檔案是u boot啟動的第乙個檔案,首先確定是冷啟動還是熱啟動,boot cold or boot warm 通過對r21寫0x01 cold or ox02 warm 完成。接著在boot warm中 1 判斷是否定義config cogent...

Android啟動過程分析 1

從系統的角度看,android的啟動過程可以分為bootloader引導 裝載和啟動linux核心,啟動andorid系統的3個大的階段。其中android系統的啟動還可以細分為啟動init程序,啟動zygote,啟動sytemserver,啟動各項服務等多個階段。1 bootloader的引導 b...

tomcat啟動過程分析(1)

以tomcat為例,看tomcat是怎樣啟動的。tomcat中有乙個startup.bat 批處理檔案,這個檔案會啟動另乙個批處理檔案 catalina.bat 而這個批處理會設定set classpath classpath catalina home bin bootstrap.jar 也就是把...