【问题标题】:How to fixed the Out of Memory Error for java8 [duplicate]如何修复 java8 的内存不足错误 [重复]
【发布时间】:2017-10-30 10:07:08
【问题描述】:

大家:

我的服务经常出现OOM Exception,错误信息如下:

    OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f3f6e360000, 65536, 1) failed; error='Cannot allocate memory' (errno=12)
    #
    # There is insufficient memory for the Java Runtime Environment to continue.
    # Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory.

我的服务器的JDK版本:

    java -version
    openjdk version "1.8.0_121"
    OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13)
    OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

我的服务器内存信息:

  free -m
                  total        used        free      shared  buff/cache   available
    Mem:           3951         515        3107           0         328        3197
    Swap:          4095        1067        3028

我的服务的启动shell是这样的:

    nohup java -Xmx2048m -Xms1024m -jar  myService.jar >nohup.out &

该服务在我的本地计算机上运行正常; 但是当我为我的云服务器部署服务时,发生了错误!

我本地电脑的内存是4G; 我的云服务器内存也是4G,swap内存是4G;

有人可以帮助我吗? 非常非常感谢!!!

【问题讨论】:

  • 查找正在使用该内存的内容,看看是否无法优化...
  • 这可能意味着您的服务器正在消耗大量内存,并且可能存在内存泄漏问题。拥有the JVM write a heapdump file on OOM 并使用 Eclipse MAT 之类的工具检查该文件。
  • 当我启动服务时,通过“free -m”查看使用的内存,我发现服务器也有很多内存。

标签: java java-8 out-of-memory openjdk


【解决方案1】:

使用 jvisualvm 之类的分析工具并找出使用您的内存的内容。然后要么修复它,要么给你的 JVM 足够的内存。

【讨论】:

  • 我本地电脑上运行的服务没问题;但是部署在VM服务器上,出现了oom错误。我觉得服务器内存够用了。
  • 那么你可能错误地配置了你的虚拟机(内存不足)或使用了 32 位版本的 Java。
【解决方案2】:

您可以使用选项 -XX:MaxDirectMemorySize=55m

运行应用程序

相同的默认值为ZERO(Java 7&8 中的默认值为 0)

【讨论】:

  • 我添加了选项-XX:MaxDirectMemorySize=200m,但也有错误,常见如下:nohup java -XX:MaxDirectMemorySize=200m -jar myService.jar >nohup.out &
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 2016-02-02
  • 2012-05-08
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多