关注
74.
7、 Kill process or sacrifice child
有一种内核作业(Kernel Job)名为 Out of Memory Killer,它会在可用内存极低的情况下“杀死”(kill)某些进程。OOM Killer 会对所有进程进行打分,然后将评分较低的进程“杀死”,具体的评分规则可以参考 Surviving the Linux OOM Killer。
不同于其他的 OOM 错误, Killprocessorsacrifice child 错误不是由 JVM 层面触发的,而是由操作系统层面触发的。
原因分析
默认情况下,Linux 内核允许进程申请的内存总量大于系统可用内存,通过这种“错峰复用”的方式可以更有效的利用系统资源。
然而,这种方式也会无可避免地带来一定的“超卖”风险。例如某些进程持续占用系统内存,然后导致其他进程没有可用内存。此时,系统将自动激活 OOM Killer,寻找评分低的进程,并将其“杀死”,释放内存资源。
解决方案
1、升级服务器配置/隔离部署,避免争用。
2、OOM Killer 调优。
8、Requested array size exceeds VM limit
JVM 限制了数组的最大长度,该错误表示程序请求创建的数组超过最大长度限制。
JVM 在为数组分配内存前,会检查要分配的数据结构在系统中是否可寻址,通常为 Integer.MAX_VALUE-2。
此类问题比较罕见,通常需要检查代码,确认业务是否需要创建如此大的数组,是否可以拆分为多个块,分批执行。
9、Direct buffer memory
Java 允许应用程序通过 Direct ByteBuffer 直接访问堆外内存,许多高性能程序通过 Direct ByteBuffer 结合内存映射文件(Memory Mapped File)实现高速 IO。
原因分析
Direct ByteBuffer 的默认大小为 64 MB,一旦使用超出限制,就会抛出 Directbuffer memory 错误。
查看原帖
点赞 评论
相关推荐
10-26 17:59
中南大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作能把i人逼成什么样 #
14684次浏览 174人参与
# 上班到公司第一件事做什么? #
109377次浏览 740人参与
# 你今年做了几份实习? #
9776次浏览 145人参与
# 工作两年想退休了 #
203426次浏览 1799人参与
# 你开始找寒假实习了吗? #
15898次浏览 210人参与
# 新凯来求职进展汇总 #
64127次浏览 171人参与
# 影石Insta360求职进展汇总 #
166505次浏览 1335人参与
# 大厂面试初体验 #
83630次浏览 385人参与
# 0经验如何找实习? #
27047次浏览 456人参与
# 面试尴尬现场 #
205404次浏览 821人参与
# 大学最后一个寒假,我想…… #
72260次浏览 726人参与
# 25届秋招公司红黑榜 #
306651次浏览 1252人参与
# 什么样的公司千万别去 #
28026次浏览 148人参与
# 大家每天通勤多久? #
64497次浏览 415人参与
# 金融财经春招备战日记 #
43896次浏览 216人参与
# 央国企投递记录 #
166052次浏览 1622人参与
# 你找工作经历过哪些骗局? #
9730次浏览 144人参与
# 机械人值得去的半导体企业 #
32983次浏览 183人参与
# 字节出了豆包coding模型 #
6874次浏览 61人参与
# 一起聊华为 #
168560次浏览 820人参与
查看13道真题和解析
