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

JVM崩溃时hs_err_pidxxx.log文件中错误的rlimit信息

公冶翰池
2023-03-14

    #
    # There is insufficient memory for the Java Runtime Environment to continue.
    # Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory.
    # Possible reasons:
    #   The system is out of physical RAM or swap space
    #   In 32 bit mode, the process size limit was hit
    # Possible solutions:
    #   Reduce memory load on the system
    #   Increase physical memory or swap space
    #   Check if swap backing store is full
    #   Use 64 bit Java on a 64 bit OS
    #   Decrease Java heap size (-Xmx/-Xms)
    #   Decrease number of Java threads
    #   Decrease Java thread stack sizes (-Xss)
    #   Set larger code cache with -XX:ReservedCodeCacheSize=
    # This output file may be truncated or incomplete.
    #
    #  Out of Memory Error (os_linux.cpp:2627), pid=1094, tid=0x00007fac4041e700
    #
    # JRE version: Java(TM) SE Runtime Environment (8.0_102-b14) (build 1.8.0_102-b14)
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.102-b14 mixed mode linux-amd64 compressed oops)
    # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
    #


    ---------------  S Y S T E M  ---------------

    OS:DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=14.04
    DISTRIB_CODENAME=trusty
    DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

    uname:Linux 3.13.0-101-generic #148-Ubuntu SMP Thu Oct 20 22:08:32 UTC 2016 x86_64
    libc:glibc 2.19 NPTL 2.19 
    rlimit: STACK 8192k, CORE 0k, NPROC 30034, NOFILE 4096, AS infinity
    load average:10.38 6.50 2.88

我的问题是:为什么NOFILE不对应于我在系统上设置的值(在limits.conf文件中,它应该是20000)?当我使用与运行jvm的用户相同的用户运行命令ulimit-n时,我有一个不同的值。请注意,显示的堆栈是我在系统上设置的正确值,而不是默认值。JVM运行在AWS C3.Large随需应变实例上。

以下是ulimit-a命令的结果:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30034
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 20000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 30034
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

共有1个答案

沙星波
2023-03-14

我检查了源代码1。事实证明,转储中打印的rlimit值是通过调用getrlimit获得的。这是一个直接从操作系统获取信息的POSIX库方法。JVM不会减少它的NOFILES rlimit,尽管在某些情况下,它会将软rlimit增加到硬rlimit的值。

因此,我怀疑转储中报告的rlimit必须在启动运行应用程序的JVM的环境中设置。这不能与运行ulimit的shell环境相同。

1-...使用findgrep,所以我可能遗漏了什么。

 类似资料:
  • 在JavaAccessBridge屏幕捕获中发现以下错误。 此错误随机发生。请告诉我这个错误的原因?请建议我如何修理它? > --------------T H R E A D----------- 当前线程(0x05D31800):JavaThread“thread-6”后台进程[_thread_in_java,ID=16140,堆栈(0x04D60000,0x04DB0000)] SIGINF

  • 不久前,我打开电脑处理我一直在开发的Minecraft mod,但我没有像往常一样运行,而是得到了这个例外: 在尝试了几个小时之后,我意识到我的代码没有问题。我试着运行我制作的其他java程序。一个简单的Hello World程序工作了,但我的LWJGL游戏也出现了同样的异常,我使用的任何程序都因文件未找到而崩溃。IO程序也适用于通过GitHub从事同一项目的其他人。 来自IntelliJ的日志太

  • 问题内容: 我的JVM一直在libzip.so上持续崩溃,并且出乎意料。我已经将该错误提交给了Oracle,但决定看看这里是否有人遇到过该问题,如果是,您如何处理它?这是一个正在运行的网络应用 Linux 2.6.34-gentoo-r6#1 SMP Fri Sep 24 00:15:06 EDT 2010 i686 Intel(R)Xeon(R)CPU X5460 @ 3.16GHz 真正的带j

  • 经过大量的谷歌搜索,我在LWJGL渲染VBO立方体时遇到了这个问题。基本上,当我启用法线时,JVM会崩溃。这很可能与我在Plane.java中设置常态的方式有关。由于我仍在学习VBO,我似乎不知道如何解决这个问题。你能看一看,让我知道我可能在哪里出错了吗? Cube.java: 平面. java: 让我知道你们的想法。我已经在三台独立的计算机上测试了代码,每一台都有相同的结果。

  • 在我的应用程序主页中,auto complete在对话框栏内的按钮上打开,该位置用于搜索查询。问题是,当我尝试通过再次按下按钮来更改位置时,应用程序崩溃,出现以下错误。 这是按钮按活动及其调用的方法。 下面是xml代码 以下是logcat 我已经研究了很多问题,几乎所有的答案都是在中添加一些代码行,而我没有这些代码行。在第一次点击片断的时候,问题是当我再次按下按钮来改变应用程序完全粉碎的位置。欢迎

  • 希望你做得很好。 我有一个C语言的JNI实现,其中一个C函数连接到当前JVM线程并回调一个Java方法,这实际上是在attachCurrentThread()函数调用时使JVM崩溃。我的实现基于链接中给出的答案,保持对JNIEnv环境的全局引用 线程创建部分,它将侦听套接字连接以接受事件并注入GetEvent函数。 回调函数 在接收到事件时执行GetEvent()后,我的JVM在AttachMon