linux OOM Killer 如何破
所属分类 linux
浏览量 1137
某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:核心设计与实践原理 读书笔记