首页  

linux OOM Killer 如何破     所属分类 linux 浏览量 968
某java应用压测时,java进程物理内存占用一直缓慢增加,最后进程占用内存过多,被kill
 java应用oom被kill排查记录 


Surviving the Linux OOM Killer

How does OOM Killer choose which process to kill?


dmesg -T   |grep 'Out of memory: Kill process'

Linux 内核会给每个运行中的进程分配一个叫 oom_score 的分数,它表示当系统可用内存很低时,一个进程被kill掉的可能性有多大。
分数越高,越有可能被kill掉。分数值很简单:等于进程的内存占用百分比乘以10。
比如一个进程占50%的内存,它的oom_score值就是 50 X 10 = 500 
一个进程的oom_score记录在 /proc/$pid/oom_score 文件中

OOM Killer会检查 /proc/$pid/oom_score_adj文件来调整最终的分数 (oom_score)

oom_score_adj可以在-1000到1000间变化。
如果给了-1000,进程即使使用 100% 的内存也不会被OOM Killer干掉

Swappiness
设置一个很小的值 譬如 1
设置为0,当物理内存耗尽时,操作系统会触发OOM Killer
OOM Killer会随机挑选一个进程kill掉

   $ sysctl –p        【使配置生效】
   $ swapoff -a        【关闭虚拟内存】

 
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,
swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
linux的基本默认设置为60  内存在使用到100-60=40%的时候,就开始出现有交换分区的使用

cat /proc/sys/vm/swappiness

Java 应用  可限制最大堆内存



linux之dmesg命令总结 java应用oom被kill排查记录 java内存溢出 Linux常用优化设置 linux性能分析及调优

上一篇     下一篇
kafka发送端核心参数说明

kafka消息发送机制

Kafka中的分区分配

Kafka幂等和事务

kafka面试题及答案

深入理解Kafka:核心设计与实践原理 读书笔记