記憶體優化思路 zhanghengpei的部落格

2022-09-23 03:27:12 字數 1139 閱讀 2155

效能定位套路雖然記憶體的效能指標很多,但都是為了描述記憶體的原理,指標間自然不會完全孤立,一般都會有關聯, 明白了原理, 在定位問題的時候就能更快更準舉個最簡單的例子,當你看到系統的剩餘記憶體很低時,是不是就說明,程序一定不能申請分配新記憶體了呢?

記憶體效能工具有很多,是不是每次碰到記憶體效能問題,都要把工具全跑一遍,把所有記憶體效能指標全分析一遍呢?這樣當然不行,效率太低了為了迅速定位記憶體問題,我通常會先執行幾個覆蓋面比較大的效能工具,比如 free、top、vmstat、pidstat 等

具體的分析定位思路:

先用 free 和 top,檢視系統整體的記憶體使用情況。

再用 vmstat 和 pidstat,檢視一段時間的趨勢,從而判斷出記憶體問題的型別。

最後進行詳細分析,比如記憶體分配分析、快取/緩衝區分析、具體程序的記憶體使用分析等。

例如:當你通過 free,發現大部分記憶體都被快取占用後,可以使用 vmstat 或者 sar 觀察一下快取的變化趨勢,確認快取的使用是否還在繼續增大。如果繼續增大,則說明導致快取公升高的程序還在執行,那你就能用快取 / 緩衝區分析工具(比如 cachetop、slabtop 等),分析這些快取到底被**占用

當你通過 vmstat 或者 sar 發現內存在不斷增長後,可以分析中是否存在記憶體洩漏的問題。比如你可以使用記憶體分配分析工具 memleak ,檢查是否存在記憶體洩漏。如果存在記憶體洩漏問題,memleak 會為你輸出記憶體洩漏的程序以及呼叫堆疊。

記憶體優化思路找到記憶體問題的**後,下一步就是相應的優化工作了。在我看來,記憶體調優最重要的就是,保證應用程式的熱點資料放到記憶體中,並儘量減少換頁和交換。

常見的優化思路有這麼幾種:

最好禁止 swap。如果必須開啟 swap,降低 swappiness 的值,減少記憶體**時 swap 的使用傾向。

減少記憶體的動態分配。比如,可以使用記憶體池、大頁(hugepage)等。

盡量使用快取和緩衝區來訪問資料。如可以使用堆疊明確宣告記憶體空間來儲存需要快取的資料;或者用 redis 這類的外部快取元件優化資料的訪問。

使用 cgroups 等方式限制程序的記憶體使用情況。這樣,可以確保系統記憶體不會被異常程序耗盡。

通過 /proc/pid/oom_adj ,調整核心應用的 oom_score。這樣,可以保證即使記憶體緊張,核心應用也不會被 oom 殺死

Linux效能優化 記憶體效能優化思路

目錄 記憶體效能指標 記憶體效能工具 如何快速分析記憶體的效能指標 系統記憶體使用情況 1.已用記憶體和剩餘記憶體 2.共享記憶體,通過tmpfs實現的,他的大小就是tmpfs使用的記憶體大小,這是乙個特殊的快取 3.可用記憶體是新程序可以使用的最大記憶體,包括剩餘記憶體和可 快取 4.快取包括,從...

mysql思路 MySQL優化思路

通過指令碼,重新整理觀察mysql的status,觀察是否有週期性故障活波動,一般由訪問高峰或者快取失效引起,家快取並更改快取失效策略,是失效時間分散或頁面定時失,show processlist顯示哪些執行緒正在執行。您也可以使用mysqladmin processlist語句得到此資訊。如果您有...

OXWALL優化思路

閱讀oxwall的初始化 日誌實現部分,重點關注主頁的資料讀取流程,在資料讀取流程中增加寫日誌,可以看到初始化頁面涉及資料庫讀取的操作異常多。這將是效率的瓶頸,應該考慮將資料快取到redis中,並結合訊息佇列更新快取和資料庫。研究 安全隱患sql注入 csrf 偽造的跨站點請求 跨站點指令碼 xss...