目錄
記憶體效能指標
記憶體效能工具
如何快速分析記憶體的效能指標
系統記憶體使用情況
1.已用記憶體和剩餘記憶體
2.共享記憶體,通過tmpfs實現的,他的大小就是tmpfs使用的記憶體大小,這是乙個特殊的快取
3.可用記憶體是新程序可以使用的最大記憶體,包括剩餘記憶體和可**快取
4.快取包括,從磁碟讀取檔案頁的buffer快取,用來快取從磁碟讀取的資料加速再次訪問
還包括slab分歧中的可**記憶體
5.緩衝區是對原始磁碟塊的臨時儲存,用來快取將要寫入磁碟的資料,核心可以把分散的寫集中起來,統一
優化磁碟寫入
程序記憶體使用情況
如程序的虛擬記憶體,常駐記憶體,共享記憶體,swap記憶體等
1.虛擬記憶體,包括了程序**段,資料段,共享記憶體,已經申請的堆記憶體和已經換出的記憶體等,注意,已經
申請的記憶體,即使還沒有分配物理記憶體,也算作虛擬記憶體
2.常駐記憶體是程序實際使用的物理記憶體,不包括swap和共享記憶體,一般會換算成佔系統總記憶體的百分比,
也就是程序的記憶體使用率
3.共享記憶體,包括與其他程序共同使用的真是的共享記憶體,還包括了載入的動態鏈結庫以及程式**段等
4.swap記憶體,是指通過swap換出到磁碟的記憶體
缺頁異常
系統呼叫記憶體分配請求後,並不會立刻為其分配物理記憶體,而是在首次訪問時,通過缺頁異常來分配,缺頁
異常包括兩類
1.可以直接從物理記憶體中分配時,稱為次缺頁異常
2.需要磁碟i/o介入,比如swap時,被成為主缺頁異常,主缺頁異常公升高,意味著需要磁碟i/o,會導致
記憶體訪問變慢很多
swap的使用情況
如swap的已用空間,剩餘空間,換入速度和換出速度等
1.已用空間和剩餘空間很好理解,就是字面上的意思,已使用和沒有使用的記憶體空間
2.換入和換出速度,則表示每秒鐘換入和換出記憶體的大小
記憶體的效能指標相關的思維導圖
比如free 檢視整體記憶體和swap情況
top和ps 檢視程序的記憶體情況
在proc中還有很多記憶體指標的**,如/proc/zoneinfo等
通過vmstat可以動態觀察記憶體變化情況
通過cachestat 檢視整個系統快取的讀寫命中情況
通過cachetop來觀察每個程序快取的讀寫命中情況
memleak檢視記憶體分配,找到記憶體洩露的位置
通過sar也可以實時的檢視記憶體使用情況
效能指標和工具聯絡
同cpu一樣,可以從兩個不同維度出發
1.從記憶體指標出發,把工具和工作原理關聯起來
2.從效能工具出發,可以更快的利用工具,找出我們想觀察的效能指標,特別是工具有限的情況下,得充分
利用手頭的每乙個工具,挖掘更多問題
根據指標找工具
從效能工具出發,最大化利用已有的工具,找到想要的指標
根據工具查詢指標(記憶體效能)
在實際環境中,我們希望盡可能快的定位系統瓶頸,然後盡可能快的優化效能,就是要又快又準的效能相關的問題
雖然記憶體效能指標很多,但都是魏了描述記憶體的原理,指標間自然不會完全孤立,一般都會有關聯,反過來說,這些關聯也正是源於系統的記憶體原理
為了快速定位記憶體問題,可以先執行幾個覆蓋面比較大的效能工具,如free,top,vmstat,pidstat等
具體粉絲思路如下
1.先用free和top,檢視系統整體的記憶體使用情況
2.再用vmstat和pidstat,檢視一段時間的趨勢,從而判斷出記憶體的問題型別
3.最後進行詳細分析,比如記憶體分配分析,快取/緩衝區分析,具體程序的記憶體使用分析等
相關流程圖如下
幾個例子
1.當通過free發現大部分記憶體都會快取占用後,就可以使用vmstat或者sar觀察快取變化趨勢,確認快取的
使用是否還在繼續增大,如果繼續增大,說明導致快取公升高的程序還在執行,再用cachestat和cachetop
分析這些快取到底被**占用
2.用free發現可用記憶體不足,首先要確認記憶體是否被快取/緩衝區占用,排除快取/緩衝區後,可以繼續用
pidstat或top,定位占用記憶體最多的程序,找出程序後,再通過程序記憶體空間工具(如pmap)分析
程序位址空間中記憶體的使用情況
3.當通過vmstat或sar發現記憶體不斷增長,可以分析是否存在記憶體洩露問題,使用memleak檢查是否存在
記憶體洩露,memleak輸出記憶體洩露的程序以及呼叫堆疊
效能記憶體優化
整個對於linux 的優化,應該區分為從整個層面的系統優化,和從模組角度的演算法效能優化。最終追尋的優化是原來原理層面的追尋。linux系統的優化也是,屬於系統層面的優化。針對特定的場景要求根據優先順序做出取捨關係。二 cpu執行效能 效能優化也就是下面的幾個策略 1 用空間換時間。各種cache如...
Android效能優化 記憶體優化
記憶體優化 下面介紹一下常用的一些記憶體優化的方法 從慕課網學來的 資料結果優化 1,如果經常使用字串拼接的話,要用stringbuilder,避免直接使用使用 的方式 2,使用arraymap,sparsearray代替hashmap 3,避免記憶體抖動的情況 物件復用 1,復用系統自帶資源 2,...
linux效能優化
調優必須有效能指標,一開始調優必須確定指標 確定基線 確定目標。如果可能的話分離問題,刪除任何執行於被調查系統的多餘的程式或應用!工具 gnome system monitor 圖形介面,可以說是top的圖形化 執行 gnome system monitor 多處理器統計 mpstat,最大的優點是...