中文网站建设入门,百安居装修报价清单,哪个软件发视频可以赚钱,新开网络游戏排行背景
最近发现集群主节点总有进程宕机#xff0c;定位了大半天才找到原因#xff0c;分享一下
排查过程
查询hiveserver2和namenode日志#xff0c;都是正常的#xff0c;突然日志就不记录了#xff0c;直到我重启之后又恢复工作了。 排查各种日志都是正常的#xff0…背景
最近发现集群主节点总有进程宕机定位了大半天才找到原因分享一下
排查过程
查询hiveserver2和namenode日志都是正常的突然日志就不记录了直到我重启之后又恢复工作了。 排查各种日志都是正常的直到查看Grafana发现内存满了 在这个节点下已无内存资源可用在服务宕掉的节点内存使用突然下降猜测是linux内核的杰作故查询系统日志
grep Out of memory /var/log/messages果然存在因OOM被杀掉的进程
进程被杀的原因
Linux 内核有个机制叫OOM killer全称为 Out Of Memory killer很形象的一个名字——内存溢出杀手这个机制会监控那些占用内存过大尤其是瞬间占用内存很快的进程为防止机器内存耗尽而主动把该进程杀掉。
当内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码 linux/mm/oom_kill.c2023-4-4 23:24:07确认了此文件存在当系统内存不足的时候out_of_memory() 函数被触发然后调用 select_bad_process() 函数选择一个进程杀掉这个选择的过程是通过调用 oom_badness() 函数实现的挑选的算法和想法都暴力但朴实就是找到最占用内存的进程。
出现问题的原因
最近刚刚增加了sentry和hivemetastore内存大小导致机器内存不够了。
解决方案
1.调整机器进程分布确保机器不会出现内存超用 2.可以通过设置/proc/sys/vm/overcommit_memory为不同的值来调整OverCommit策略。
overcommit_memory可以取3个值
0默认值由Linux内核通过一些启发式算法来决定是否超售和超售的大小一般允许轻微的超售拒绝一些明显不可能提供的请求同时做一些规则限制比如不同用户overcommit的大小也不一样。1允许不做限制的超售当然这个也不是无限大还受到寻址空间的限制32位系统最大可能只有4G64位系统大概16T左右。2禁止禁止超售系统能够分配的内存不会超过swap实际物理内存*overcommit_ratio该值可以通过/proc/sys/vm/overcommit_ratio设置默认50%。
vi /etc/sysctl.conf
-- 添加
vm.overcommit_memory1
-- 重启生效
sysctl -p总结
如果你发现运行了一段时间的进程突然不见了那可能是内核嫉妒生恨把它给干掉了 查询内存溢出被杀掉的进程可以直接通过系统日志来查 grep “Out of memory” /var/log/messages 也可以通过专门的命令查找 dmesg -T | grep “Out of memory”
阿里P7数据技术专家修改简历、模拟面试vxwodatoucai