Android meminfo

 

root@htc_e56ml_dtul:/ # dumpsys meminfo -a com.crash.test
Applications Memory Usage (kB):
Uptime: 18856935 Realtime: 77339653

** MEMINFO in pid 21813 [com.crash.test] **
                   Pss      Pss   Shared  Private   Shared  Private  Swapped     Heap     Heap     Heap
                 Total    Clean    Dirty    Dirty    Clean    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------   ------   ------   ------
  Native Heap     3000        0    28736     2096        0        0      980    31948    31831      116
  Dalvik Heap     1673        0     2556     1136        0        0        0    27024    24087     2937
Dalvik Other      1087        0    11524      512        0        0     3516                           
        Stack      240        0        0      240        0        0        0                           
       Ashmem       31        0       56       16        0        0        0                           
    Other dev        5        0       60        0        0        4        0                           
     .so mmap     1479      124     1448      156     9156      124     2132                           
    .apk mmap      100        4        0        0      664        4        0                           
    .ttf mmap       37        0        0        0       84        0        0                           
    .dex mmap      276      272        0        4        4      272        4                           
    .oat mmap      947       84        0        0     8668       84        4                           
    .art mmap     1014        8     2204      560     9384        8      168                           
   Other mmap       10        0       12        8      184        0        4                           
   EGL mtrack    17929        0        0    17929        0        0        0                           
    GL mtrack     8045        0        0     8045        0        0        0                           
      Unknown      204        0      100      204        0        0       96                           
        TOTAL    36077      492    46696    30906    28144      496     6904    58972    55918     3053

Dalvik Details
        .Heap     1508        0     1008     1016        0        0        0                           
.LinearAlloc       11        0      136        8        0        0        0                           
          .GC     1000        0    11388      428        0        0     3512                           
      .Zygote      161        0     1548      116        0        0        0                           
   .NonMoving        4        0        0        4        0        0        0                           
.IndirectRef       76        0        0       76        0        0        4                           

App Summary
                       Pss(KB)
                        ------
           Java Heap:     1704
         Native Heap:     2096
                Code:      644
               Stack:      240
            Graphics:    25974
       Private Other:      744
              System:     4675

               TOTAL:    36077      TOTAL SWAP (KB):     6904

Objects
               Views:       18         ViewRootImpl:        1
         AppContexts:        2           Activities:        1
              Assets:        4        AssetManagers:        2
       Local Binders:        9        Proxy Binders:       14
       Parcel memory:        3         Parcel count:       12
    Death Recipients:        0      OpenSSL Sockets:        0

SQL
         MEMORY_USED:        0
  PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0

Uptime: 18857217 Realtime now=77339935

Cursor

下面我们对一些显示出来的数据做分析
Native 层:
Naitve Heap Size(31948): 从mallinfo usmblks获得,代表最大总共分配空间
Native Heap Alloc(31831): 从mallinfo uorblks获得,总共分配空间
Native Heap Free(116): 从mallinfo fordblks获得,代表总共剩余空间
算最后的值时要除以1024
Native Heap Size = Native Heap Alloc + Native Heap Free
31948 = 31831 + 116
Note: mallinfo()是标准C提供的API函数,它返回struct mallinfo结构体。
我分析结果显示:mallinfo ()返回的值并不包含java堆里面分配的内存。java堆和native堆里的内存是分开计算的。

void getMemStatus()
{
    struct mallinfo info = mallinfo ();
    printf("arena = %ld\n", (long)info.arena);
    printf("ordblks = %ld\n", (long)info.ordblks);
    printf("smblks = %ld\n", (long)info.smblks);
    printf("hblks = %ld\n", (long)info.hblks);
    printf("hblkhd = %ld\n", (long)info.hblkhd);
    printf("usmblks = %ld\n", (long)info.usmblks);  // = 31948 * 1024
    printf("fsmblks = %ld\n", (long)info.fsmblks);
    printf("uordblks = %ld\n", (long)info.uordblks);  // = 31831 * 1024 
    printf("fordblks = %ld\n", (long)info.fordblks);  // = 116 * 1024
    printf("keepcost = %ld\n", (long)info.keepcost);
}

Java层:
Dalvik Heap size: Dalvik Heap总共的内存大小 27024 = Runtime.getRuntime().totalMemory();
Dalvik Heap free: Dalvik Heap空闲内存大小 2937 = Runtime.getRuntime().freeMemory();
Dalvik Heap Alloc: Dalvik Heap分配内存的大小,这个貌似没有专门的API接口调用
Dalvik Heap size = Dalvik Heap Alloc + Dalvik Heap free
27024 = 24087 + 2937
Runtime 还提供一个显示当前可扩展最大内存的函数: Runtime.getRuntime().maxMemory() 返回值为201326592 = 192M
属性值 [dalvik.vm.heapgrowthlimit]: [192m]    192 = 201326592/(1024*1024)


下面这些是从网上搜集来的信息:
Objects and SQL 信息都是从Android Debug信息中获得。
其他类型               smap 路径名称          描述
Cursor                  /dev/ashmem/Cursor  Cursor消耗的内存(KB)
Ashmem               /dev/ashmem            匿名共享内存用来提供共享内存通过分配一个多个进程
Other dev             /dev/                        内部driver占用的在 “Other dev”
.so mmap             .so                            C 库代码占用的内存
.jar mmap            .jar                           Java 文件代码占用的内存
.apk mmap            .apk                           apk代码占用的内存
.ttf mmap            .ttf                           ttf 文件代码占用的内存
.dex mmap            .dex                         Dex 文件代码占用的内存
Other mmap                                          其他文件占用的内存

-------------------------------------------------------------------------------------------------------------
dex2oat编译dex时会出现以下log:
dex2oat took 129.456s (threads: 4) arenaalloc=54MB java alloc=87MB native alloc=183MB free=1773KB swap=144MBdex_size=70MB oat_size=170MB
其中:
native alloc:struct mallinfo中的int uordblks字段,表示Native层分配的内存
free: struct mallinfo中的int fordblks字段,表示Native层空闲未使用的内存

-----------------------------------------------------------------------------------------------------------------------------------

打印堆栈

    #include <execinfo.h>
     #include <stdio.h>
     #include <stdlib.h>   

     /* Obtain a backtrace and print it to stdout. */
     void print_trace (void)
     {
       void *array[10];
       size_t size;
       size_t i;   

       size = backtrace (array, 10);
       printf ("Obtained %zd stack frames./n", size);   

       for (i = 0; i < size; i++)
          printf ("%p /n",  array [i]);
     }
   
     /* A dummy function to make the backtrace more interesting. */
     void dummy_function (void)
     {
       print_trace ();
     }

     int main (void)
     {
       dummy_function ();
       return 0;
     }

 

posted @ 2015-12-03 17:22  牧 天  阅读(1555)  评论(0)    收藏  举报