編輯:關於android開發
linux 內存性能調優
linux內存系統簡述
關於linux內存系統我們至少應該了解什麼?
linux 系統中內存地址分為虛擬地址和物理地址,虛擬地址必須通過mmu映射成物
理地址。為了完成虛擬地址到物理地址的映射,linux內核中必須為每一個用戶態
進程維護一個頁目錄和相應的頁表項。一般系統中頁表中一頁大小為4K,
利用getconf PAGESIZE可以獲取系統中頁大小。
linux伙伴系統,為了將系統中的內存頁做相應的管理,linux內核將系統中內存為
分為不同的node,zone. 系統將不同cpu訪問速率的內存歸納為不同的node.
zone表示同一個node不同內存區域,一般分問DMA, NORMAL, HIGHMEM.
每一個ZONE上面有active_list,inactive_list.
在每一個ZONE中需要管理這個ZONE中的活動頁和非活動頁,這樣就方便每個ZONE中
頁面的回收
nr_inactive_anon 3949
nr_active_anon 3299
nr_inactive_file 7305
nr_active_file 3182
nr_unevictable 0
頁面交換,linux可以將系統中匿名頁交換到交換分區或者交換文件中去,當系統
中的內存緊張時。
swapon -s 查看系統中交換分區或者交換文件使用情況
swapon -a 開啟系統的交換功能
swapoff -a 關閉系統的交換功能
系統中緩存類型分為頁緩存和塊緩存。當系統去讀取文件系統中的文件時,系統會
將讀到的文件的內容緩存到一個地址空間中,組成這個地址空間的內存頁就是頁緩
存,叫做cache.
系統在讀取文件系統中類似目錄,超級塊或者管理塊時,讀取到系統中的內存頁中
,這種頁面叫做塊緩存,也叫做buffer.
linux如果按頁管理分配內存,對較小的內存分配是一種嚴重的浪費。slab內存分
配器解決內核空間較小的內存分配問題。slab就是為了滿足內核中各個模塊特定大
小內存的快速分配,就從伙伴系統中要出內存頁,自己建立一個相對獨立的內存池
子,向特定的內核模塊分配特定大小的內存。
slabtop
cat /proc/slabinfo
linux系統中內存使用分類
可回收的頁和不可回收的頁
上面總結了linux中內存頁的不同種類,上面不同類型的頁面基本上可以分為兩種不同的類型,一種是可回收頁面,另外一種為不可以回收的頁面。除了第一種,內核系統中分配的內存為不可回收的外,其它類型的頁面都是可以回收的頁面。
可回收頁面分類
如何查看系統中不同類型內存數量
使用這個命令可以看到系統中空閒內存數量,buffer緩存數量,頁緩存數量.同時可以看到交換分區換入,換出頁面的數目.
root@localhost:~# vmstat 1 -S m
procs-----------memory---------- ---swap-- -----io---- -system-- ----cpu----
rb swpd free buffcache si sobi bo incs us sy id wa
21 0 0 665 69 508 0 0 0 0 19 5 38 3 59 0
19 0 0 665 69 508 0 0 0 0 2161 3112 97 4 0 0
20 0 0 665 69 508 0 0 0 0 1903 3394 97 3 0 0
查看進程內存使用情況
top
shift + m
linux系統中的進程按照消耗內存大小進行排列,VIRT表示虛擬地址空間內存大小,RES表示實際內存使用大小。
shift + p
linux系統中的進程按照消耗CPU大小進行排列
使用pmap查看進程內存使用情況
pmap pid
我們可以看到整個進程占用的虛擬內存的情況
查看slab使用情況
slabtop
cat/proc/slabinfo
用U盤安裝Ubuntu系統,u盤ubuntu用U盤安裝Ubuntu,需制作一個Ubuntu的U盤安裝盤,最為方便和可靠的制作方法是在Linux系統下使用dd命令,具體如下
Android 使用OpenCV的三種方式(Android Studio) 其實最早接觸OpenCV是很久很久之前的事了,大概在2013年的5,6月份,當時還是個菜逼(雖
【原創+譯文】官方文檔中聲明的如何創建抽屜導航欄(Navigation Drawer),navigationdrawer如需轉載請注明出處:http://www.cnbl
融雲如何實現文件發送(高級進階) 干貨來啦~! 想在聊天中發 小視頻?gif 動圖? 發紅包? 發 自定義表情? 沒有問題!在融雲統統都可以實現! 以上不管是 小視頻