在开发过程中发现,经过长时间运行的系统,会发生c层service重启的情况。
如果service重启了,一般就是内存泄漏或者指针错误。
经过使用dumpsys meminfo查看发现经过一段时间,这个内存是不断增加的,就判断发生了oom现象。
通过这个命令,可以查看内存oom_adj临界值:
cat /sys/module/lowmemorykiller/parameters/adj
0,58,117,176,529,1000
这个指定储存空闲页面的数量:
cat /sys/module/lowmemorykiller/parameters/minfree
12288,15360,18432,21504,24576,30720
lower memory killer原理介绍:
举例:
0,8写入oom_adj中,1024,4096写入minfree中,
那么就表示,当一个进程的空闲存储空间下降到4096个页面的时候,oom_adj值为8或者更大的进程会被kill掉;
同理,当一个进程的空闲空间下降到1024个页面的时候,oom_adj值为0或者更大的进程会被kill掉。
越大的进程越先被kill掉
占用物理内存最多的那个进程会被kill掉。
当某个进程被选中,内核会发送SIGKILL信号将其kill掉。
查看某个进程的adj值
ps 查看进程pid
cat /proc/进程pid/oom_adj