Linux性能調優--內存套路篇

總結一些解決內存問題,優化內存的一些思路
1 內存性能指標
系統內存使用情況
已用內存和剩餘內存很容易理解,就是已經使用和還未使用的內存。
共享內存是通過 tmpfs 實現的,所以它的大小也就是 tmpfs 使用的內存大小。tmpfs 其實也是一種特殊的緩存。
可用內存是新進程可以使用的最大內存,它包括剩餘內存和可回收緩存。
緩存包括兩部分,一部分是磁盤讀取文件的頁緩存,用來緩存從磁盤讀取的數據,可以加快以後再次訪問的速度。另一部分,則是 Slab 分配器中的可回收內存。
緩衝區是對原始磁盤塊的臨時存儲,用來緩存將要寫入磁盤的數據。這樣,內核就可以把分散的寫集中起來,統一優化磁盤寫入。
進程內存使用情況
虛擬內存,包括了進程代碼段、數據段、共享內存、已經申請的堆內存和已經換出的內存等。這裏要注意,已經申請的內存,即使還沒有分配物理內存,也算作虛擬內存。
常駐內存是進程實際使用的物理內存,不過,它不包括 Swap 和共享內存。
共享內存,既包括與其他進程共同使用的真實的共享內存,還包括了加載的動態鏈接庫以及程序的代碼段等。
Swap 內存,是指通過 Swap 換出到磁盤的內存
系統調用內存分配請求後,並不會立刻爲其分配物理內存,而是在請求首次訪問時,通過缺頁異常來分配。
可以直接從物理內存中分配時,被稱爲次缺頁異常。
需要磁盤 I/O 介入(比如 Swap)時,被稱爲主缺頁異常。
主缺頁異常升高,就意味着需要磁盤 I/O,那麼內存訪問也會慢很多。
內存性能指標: 在這裏插入圖片描述
工具:
free 可以查看系統的整體內存和 Swap 使用情況
top ps 查看進程的內存使用情況。
proc 文件系統,找到了內存指標的來源
vmstat,動態觀察了內存的變化情況。
cachestat ,查看整個系統緩存的讀寫命中情況
cachetop 來觀察每個進程緩存的讀寫命中情況
memleak 查找內存泄漏
sar 是目前 Linux 上最爲全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告
/proc/zoneinfo NUMA系統內存閥值
性能指標和工具的聯繫
1 從指標出發在這裏插入圖片描述
2 從工具出發在這裏插入圖片描述
但是也不可能每個工具都用一遍,還是有些套路可以遵循的。
具體的分析思路主要有這幾步:
1 先用 free 和 top,查看系統整體的內存使用情況。
2 再用 vmstat 和 pidstat,查看一段時間的趨勢,從而判斷出內存問題的類型。
3 最後進行詳細分析,比如內存分配分析、緩存 / 緩衝區分析、具體進程的內存使用分析等。
流程圖:在這裏插入圖片描述
常見的優化思路有這麼幾種。
1 最好禁止 Swap。如果必須開啓 Swap,降低 swappiness 的值,減少內存回收時 Swap 的使用傾向。
2 減少內存的動態分配。比如,可以使用內存池、大頁(HugePage)等。
3 儘量使用緩存和緩衝區來訪問數據。比如,可以使用堆棧明確聲明內存空間,來存儲需要緩存的數據;或者用 Redis 這類的外部緩存組件,優化數據的訪問。
3 使用 cgroups 等方式限制進程的內存使用情況。這樣,可以確保系統內存不會被異常進程耗盡。4 通過 /proc/pid/oom_adj ,調整核心應用的 oom_score。這樣,可以保證即使內存緊張,核心應用也不會被 OOM 殺死。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章