執行root@android:/ # ./busybox free 得到結果如下:
root@android:/ # ./busybox free -m
total used free shared buffers
mem: 64 39 24 0 1
-/+ buffers: 38 26
swap: 0 0 0
從以上結果可知當前系統已使用記憶體為:約為39m 剩餘記憶體為 24m
3,接下來執行統計所有程序消耗的記憶體:
pid vss rss pss uss cmdline
59 82712k 31828k 31617k 31508k /system/bin/mediaserver //記憶體消耗大戶,潛在優化物件
58 3700k 3100k 2889k 2780k /system/bin/newcdr
347 408k 408k 303k 284k procrank
56 416k 416k 290k 264k /system/bin/vold
65 348k 348k 256k 240k /system/bin/sh
52 332k 332k 251k 208k /init
61 196k 196k 192k 192k /sbin/adbd
60 236k 236k 133k 112k /system/bin/debuggerd
51 188k 188k 115k 80k /sbin/ueventd
55 196k 196k 110k 96k /system/bin/servicemanager
1 180k 180k 99k 56k /init
------ ------ ------
36259k 35820k total
總共消耗:34.98m
那麼問題來了:系統總的記憶體used為39m ,程序消耗記憶體為:34.98m 中間有4m的差值?
我們在看cat/meminfo/這項裡的slab、pagetables這兩項,首先slab是核心為了高效能每個需要重複使用的物件都會有個池,這個slab池會cache大量常用的物件,所以會消耗大量的記憶體
slab:4416 kb
命令檢視:
echo `cat /proc/slabinfo |awk 'beginend'` mb
pagetables:是系統boot的時候就會根據記憶體大小算出來分配出去的,18核心是1.56%左右,32核心由於cgroup的原因會在2.3%
命令檢視:
echo `grep pagetables /proc/meminfo | awk ''` kb
總結:記憶體的去向主要有3個:1. 程序消耗。 2. slab消耗 3.pagetable消耗
sdv 記憶體分析(物理記憶體128m) 測試條件
***droid 記憶體項
啟動應用未錄影 1
linux系統核心保留
約6.8m
2ion 記憶體
80m3
mediaserver 多**
3.97m(4060k)
5logger
0.375m (384k)
6tcp/socket
74k7
buffers
12k8
sdv 應用
6.05 m (6188k)
9cached
4.63m(4744k)
10init
184k
11ueventd
188k
12servicemanager
320k
13vold
824k
14debuggerd
388k
15adbd
176k
16standbyservice
1604k
17sh
820k
18slab
5412k
19pagetables:
336k
20memfree
約18.7m (19068k)
測試條件: sdv 物理記憶體大小: 128m byte,通過
除錯方法:在commandline中 memblock=debug
memory layout
記憶體範圍
大小 byte
kernel _stext**段、data段
[0x000000400081c0-0x000000405efe57]
5.905m(0x5e7c98)
kernel initrd 段
[0x00000041000000-0x00000041037fe0]
224k
頁表記憶體
[0x00000040004000-0x00000040007fff]
16kandroid ram_console
[ 41f20800-41f307ff]
64ksys_config.fex
[0x00000041f00000-0x00000041f20000]
128k
standby_mem_size
[0x00000041f20000-0x00000041f20800]
2kalloc_base_nid
20.1k(0x5060)
中斷向量
4kbootmem bitmap
56kb
pmd表記憶體
8736byte
fixmap
896 kb
ion80m
cat proc/meminfo
top
cat proc/slabinfo
echo f > /proc/sysrq-trigger
root@camdroid:/ # [ 38.407329] [vfe]vfe_close
[ 38.410536] [h22_mipi raw]csi_subdev_pwr_off!
[ 38.415468] [vfe]mclk off
[ 38.456069] [vfe]..........................vfe clk close!.......................
[ 38.464462] [vfe]vfe_close end
[ 44.693656] ****************set_rset_cap=2***********
[ 75.998831] charger->usb_valid = 0
[ 76.002730] set usb vol-lim to 4000 mv, cur-lim to 0 ma
分析Linux記憶體
前言 在linux上不像在windows上看記憶體那樣方便,而且還有swap這個新的概念,所以知道如何來看linux記憶體還是有一定意義的.下面是buffers與cached的區別。buffers是指用來給塊裝置做的緩衝大小,他只記錄檔案系統的metadata以及 tracking in fligh...
Linux記憶體分析
linux 8v2i free m total used free shared buffers cached mem 3952 2773 178 0 130 1097 buffers cache 1545 2406swap 2055 0 2055 各引數含義 其中 大家都知道,linux伺服器為了...
Linux 記憶體分析 free meminfo
一.前言 監測linux系統的記憶體使用情況,使用 free 是最直接的。檢視機器的記憶體使用資訊 proc meminfo 二.分析 1.free 我們一起看下面的乙個輸出 free m 表示以m為單位檢視記憶體使用情況,在這個輸出中,我們 重點關注的應該是free列與cached列的輸出值。由輸...