内存信息
adb shell dumpsys meminfo com.test.launcher > d:/dumpsys_mem.txt
** MEMINFO in pid 5560 [com.test.wallpaper] ** Pss Private Private Swap Rss Heap Heap Heap Total Dirty Clean Dirty Total Size Alloc Free ------ ------ ------ ------ ------ ------ ------ ------ Native Heap 53378 53284 0 0 56932 91708 55578 29736 Dalvik Heap 78945 78328 0 0 102588 102485 77909 24576 Dalvik Other 8741 7016 0 0 28276 Stack 2108 2108 0 0 2124 Ashmem 177 0 0 0 916 Other dev 128 0 124 0 492 .so mmap 4777 592 88 0 60192 .jar mmap 1065 0 0 0 34904 .apk mmap 18763 20 18016 0 20916 .ttf mmap 182 0 0 0 1224 .dex mmap 380 0 380 0 380 Other mmap 10959 6032 4848 0 12472 Unknown 715 680 0 0 1560 TOTAL 180318 148060 23456 0 322976 194193 133487 54312
Pss是进程实际占用的物理内存大小,Rss是进程在物理内存中实际映射的总大小(包括代码段(.so/.jar)、缓存页等非匿名内存)
heapdump.hprof
可以直接拖进AS中
当碰到 ActivityTaskManager: START u0 {flg=0x10000000 cmp=com.test/com.test.activity.TestActivity} from uid 1000 pid -1
发现pid等于-1,由于是taskview启动,所以需要进一步查找pid信息
Line 130094: 09-08 11:47:36.379 1247 3323 E ActivityTaskManager: Starting window is not removed, kill it : com.zeekr.carlauncher3d
Line 130740: 09-08 11:47:36.503 1247 3323 I ActivityManager: Killing 3253:com.test/1000 (adj 0): stop com.test due to from pid 1247
Line 130741: 09-08 11:47:36.503 1247 3323 I am_kill : [0,3253,com.test,0,stop com.test due to from pid 1247]

很显然是system_server进程杀死的
不排除人为(使用adb force-stop),adb 执行命令时 的 pid 是0 或者null,所以这里排除adb命令,是系统层调用干掉的
当user% + sys%持续超过80%时,系统进入高负载状态
若irq% + sirq%超过30%,表明硬件中断频繁,可能触发系统保护机制

进程被杀后内存立马恢复
如果pid是其它进程,就需要排查该进程原因,是否自己异常导致的把其它进程也给同时结束了
比如自己进程crash了,可以看到pid就是自己杀死的
浙公网安备 33010602011771号