当前位置: 首页 > 知识库问答 >
问题:

Java进程可能由于Linux OOM杀手而被杀死

刘建中
2023-03-14

错误:

内存不足,Java运行时环境无法继续。本机内存分配(mmap)无法映射71827456字节以提交保留内存。可能的原因:系统在32位模式下没有物理RAM或交换空间,遇到了进程大小限制。可能的解决方案:减少系统上的内存负载增加物理内存或交换空间检查交换备份存储是否已满在64位OS上使用64位Java减少Java堆大小(-xmx/-xms)减少Java线程数量减少Java线程堆栈大小(-xs)设置更大的代码缓存与-xx:reservedCodeCacheSize=此输出文件可能被截断或不完整。

内存不足错误(os_linux.cpp:2673),PID=21171,TID=140547280430848

但是对于堆最小2GB,最大3GB,以及G1GC,我们会看到64 Mb的大量块。

根据文档,对于具有2个内核的64位系统,64MB块(malloc arena)的最大数量可以是2*8=16,但我们看到的不止16个。

共有1个答案

孔硕
2023-03-14

这看起来不像Linux的OOM杀手。

您描述的症状表明您已经耗尽了物理内存和交换空间。事实上,错误消息正是这样说的:

内存不足,Java运行时环境无法继续。本机内存分配(mmap)无法映射71827456字节以提交保留内存。可能的原因:

    null

G1GC参数(除了最大堆大小之外)在很大程度上是不相关的。我的理解是,最大堆大小是Java堆允许占用的(虚拟)内存总量。

如果这不是Linux OOM杀手,那是什么呢?

实际上,OOM杀手是一种识别应用程序的机制,这种应用程序通过执行过多的分页而导致危险的性能问题。正如我在开始时提到的,虚拟内存由内存中或磁盘上的页组成。通常,应用程序不知道任何VM页是否驻留RAM。操作系统只是负责它。

    null

OOM杀手的目的是识别导致危险的高寻呼速率的进程,以及....杀了他们。

如果一个JVM进程被OOM杀手杀死,它就没有机会打印错误消息(就像您得到的那样)。这个过程得到了一个“sigkill”:瞬间死亡。

但是...如果您查看系统日志文件,您应该会看到一条消息,说某某进程已经被OOM杀手杀死了。

    null
 类似资料:
  • 问题内容: 当Linux内存不足(OOM)耗尽时,OOM杀手根据一些启发式方法选择一个要杀死的进程(这很有趣: http //lwn.net/Articles/317814/)。 如何以 编程方式 确定OOM杀手最近杀死了哪些进程? 问题答案: 试试看:

  • 问题内容: 我正在使用SUSE SLES 11在POWER7系统上运行多程序工作负载(基于SPEC CPU2006基准)。 有时,工作负载中的每个应用程序都会消耗大量内存,并且总内存占用量会超过系统中安装的可用内存(32 GB)。 我禁用了交换,因为否则使用交换的过程可能会严重影响测量结果。我知道通过这样做,内核可以通过OOM杀手来杀死某些进程。很好 问题是我希望内核杀死的线程以错误条件退出(例如

  • 问题内容: 我想知道如何“杀死”已启动的过程。我知道Process API,但是不确定,是否可以使用它来杀死已经运行的进程,例如firefox.exe等。如果可以使用Process API,可以请您指向正确的方向?如果没有,还有哪些其他可用选项?谢谢。 问题答案: 如果你从Java应用程序中以从头开始处理(例如,通过调用或),那么你将对其具有有效的引用,并且可以在Process类中调用该方法以终止

  • 问题内容: 我从python脚本生成了5个不同的进程,如下所示: 我的问题是,当父进程(主脚本)以某种方式被杀死时,子进程继续运行。 当父进程被杀死时,有没有办法杀死这样生成的子进程? 编辑:我正在尝试: 但这似乎不起作用 问题答案: 我自己也遇到了同样的问题,我有以下解决方案: 打电话之前,您可以设置。然后如此处所述python.org multiprocessing 进程退出时,它将尝试终止其

  • 我试图执行: 致命错误:中允许的内存大小94371840字节已用尽(尝试分配71字节)phar:///home/xxxxxxx/bin/composer.phar/src/Composer/DependencyResolver/RuleSetGenerator.php 在线123 xxxxxxx是用户。 然后我试着执行: 和: 然后我收到了这个: 哎呀!您的一个进程(php,pid 14331)因

  • 我们试图将我们的一个node js应用程序(AngularJS/NodeJS tech stack)部署到生产环境中。随机地,当节点进程被终止时,一些ec2实例就停止了。但是没有记录应用程序/系统级别的错误消息。我们无法在本地/开发/it环境中重现此问题。有人面临过类似的事情吗?非常感谢任何帮助。谢谢!