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

2021-07-05 09:22:53 字數 2061 閱讀 7993

本篇部落格作為memcached原始碼分析的開篇,這次閱讀的原始碼版本為:1.4.15,開源軟體各個版本之間差異比較大,同學們學習時,記得核對版本。

memcached的main函式位於memcached.c檔案中,從main函式啟動之後,會初始化一些資源和申請一些伺服器資源,如下面所示:

1 core檔案大小和程序開啟檔案個數限制的調整。

[cpp]view plain

copy

if(maxcore != 0)  

}  //再次確認core檔案允許的大小,如果當前的core檔案的大小為0,則不允許core檔案產生,和maxcore!=0不符,程式結束

if((getrlimit(rlimit_core, &rlim) != 0) || rlim.rlim_cur == 0)  

}  //讀取程序允許開啟的檔案數資訊,讀取失敗,程式退出

if(getrlimit(rlimit_nofile, &rlim) != 0)  

else

}  2 啟動使用者的選擇。

[cpp]view plain

copy

//uid==0表示以root執行程式

if(getuid() == 0 || geteuid() == 0)  

//判斷是否存在指定的使用者名稱

if((pw = getpwnam(username)) == 0)  

//按新的使用者修改memcached的執行許可權位

if(setgid(pw->pw_gid) pw_uid) 

}  3 以daemon的方式啟動,daemon的實現如下,該daemon沒有進行2次fork,apue上面也有說第二次fork不是必須的。

[cpp]view plain

copy

intdaemonize(

intnochdir, 

intnoclose)  

//setsid呼叫成功之後,返回新的會話的id,呼叫setsid函式的程序成為新的會話的領頭程序,並與其父程序的會話組和程序組脫離

if(setsid() == -1)  

return

(-1);  

if(nochdir == 0)   

}  if

(noclose == 0 && (fd = open(

"/dev/null"

, o_rdwr, 0)) != -1)   

if(dup2(fd, stdout_fileno) 

if(dup2(fd, stderr_fileno) 

if(fd > stderr_fileno)   

}  }  

return

(0);  

}  

4 鎖定記憶體,預設分配的記憶體都是虛擬記憶體,在程式執行過程中可以按需換出,如果記憶體充足的話,可以鎖定記憶體,不讓系統將該程序所持有的記憶體換出。

[cpp]view plain

copy

if(lock_memory)  

#else

fprintf(stderr,  

"warning: -k invalid, mlockall() not supported on this platform.  proceeding without.\n"

);  

#endif

}  

5 忽略pipe訊號,pipe訊號是當網路連線一端已經斷開,這時傳送資料,會進行rst的重定向,再次傳送資料,會觸發pipe訊號,而pipe訊號的預設動作是退出程序,所以需要忽略該訊號。

[cpp]view plain

copy

if(sigignore(sigpipe) == -1)    

6 儲存daemon程序的程序id到檔案中,這樣便於控制程式,讀取檔案內容,即可得到程序id。 

[cpp]view plain

copy

if(pid_file != null)  

原始碼閱讀 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...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...