linux 記憶體分析

2021-07-03 16:13:48 字數 3709 閱讀 5059

執行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列的輸出值。由輸...