問題一
OOM和內存回收
內存緊張時,會採用三種方式來回收內存
1.LRU算法來回收緩存
2.swap機制來回收不常訪問的內存頁
3.OOM機制 (oom_score給進程打分)
活躍和非活躍的內存頁,按照類型的不同,又分爲文件頁和匿名頁。
問題二
文件系統和磁盤的區別
磁盤是塊設備,可以被劃分成不同的分區。而在磁盤或磁盤分區上,還可以創建文件系統,並且掛載到系統的某個目錄。這樣,系統就可以通過這個掛載目錄,來讀寫文件。
在讀寫普通文件時,IO請求會首先經過文件系統,然後由文件系統負責,來和磁盤進行交互。
而在讀寫塊設備文件時,會跳過文件系統,直接和磁盤交互,也就是所謂的“裸IO”。
問題3:
如何統計所有進程的物理內存使用量
有同學採用把所有進程的RSS都相加得出結果,實際上導致不少地方被重複計算。RSS表示常駐內存,把進程用到的共享內存也算了進去。
每個進程的PSS,是指把共享內存平分到各個進程後,再加上進程本身的非共享內存大小的和;這樣直接累加PSS,就不用擔心共享內存重複計算的問題了。
grep Pss /proc/[1-9]*/smaps | awk '{total+=$2};END {printf "%d kB\n",total}'
問題4
在centos 7上安裝bcc-tools
問題5
內存泄漏的優化方法
valgrind
tcmalloc
bcc-tools中memleak工具