Linux oom-killer的问题
今天遇到了一个奇怪的问题,往一块嵌入式开发板上写文件当文件写入到一定长度时程序就会出现fault,整个程序死掉。发现串口下出现了oom的打印
什么是oom-killer?
OOM killer(Out Of Memory killer)是Linux下的一套内存保护机制,当设备内存低于某一个阈值时,会选择性的杀掉一些程序来释放内存。
如何修改阈值
echo xxxx > /proc/sys/vm/min_free_kbytes
关闭oom
echo “0” > /proc/sys/vm/oom-kill
什么情况下使用
当然,oom和阈值不是随便关闭或者变小的,做过anroid系统优化的同学可能知道当降低oom阈值内存很低的时候apk运行效率是非常低的,因为这时候当实际内存不够时,触发系统做swap的倾向也会很大,我们知道IO和内存不在一个数量级上,如果是实时性很强的程序,这时候会出现一些意想不到的问题,所以当非常清楚自己系统正常情况下内存的使用情况下和降低到多少合适并且经过测试后再去这么做。当然上面两个参数只是vm参数的冰山一角,请见:vm参数