当前位置: 首页 > 面试题库 >

在Docker容器中运行时JVM无法映射保留的内存

连晟
2023-03-14
问题内容

我似乎根本无法在服务器上的Docker容器中运行Java。即使在发出时java -version,我也会收到以下错误。

root@86088d679103:/# java -version
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000035ce1000000, 2555904, 1) failed; error='Operation not permitted' (errno=1)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2555904 bytes for committing reserved memory.
# An error report file with more information is saved as:
# //hs_err_pid17.log

据此,java不能为保留内存映射2.5Mb的空间吗?这似乎不正确…

我在末尾包含了完整的日志,但是为了提供一些额外的信息,我的系统报告了以下内容:

root@86088d679103:/# uname -m
x86_64
root@86088d679103:/# free -mh
             total       used       free     shared    buffers     cached
Mem:           15G       9.7G       5.8G       912K       148M       8.9G
-/+ buffers/cache:       639M        14G
Swap:          15G         0B        15G

谁能指出我正确的方向?

完整日志:https :
//gist.github.com/KayoticSully/e206c44681ce261674ba

更新资料

@Yobert解决了这个问题,我强烈建议您阅读评论和聊天记录。那里的好信息。

对于那些想要使Java工作的最终命令的人: setfattr -n user.pax.flags -v "mr" /usr/bin/java

如果您的发行版setfattr默认未安装,则应通过心率调节器,apt-get等将其包含在可安装软件包attr中。


问题答案:

使用启用了Grsec的内核时,我遇到了同样的问题。为了使Java发挥出色,我不得不在Java二进制文件上禁用MPROTECT。您可以paxctl为此使用该实用程序:

paxctl -m /usr/lib/jvm/java-7-openjdk/jre/bin/java

你需要做paxctl -c的第一,如果你从来没有使用过的二进制前的二进制文件:

paxctl -c /usr/lib/jvm/java-7-openjdk/jre/bin/java

有关paxctl的更多信息,请参见:http
:
//en.wikibooks.org/wiki/Grsecurity/Additional_Utilities



 类似资料:
  • 问题内容: 我只是无法再在Docker中创建和运行新容器。但是同时a可以运行以前创建的容器。 当我尝试做这样的事情: 从 docker.log : dmsetup状态 但是它们在磁盘上有很多可用空间。 dmsetup信息 码头工人信息 码头工人版本 问题答案: 以下内容适用于Fedora / RHEL系统,因此您需要针对Debian进行调整… 如果没有错误,请继续: 要安装命令,请运行:

  • docker 运行示例如下 网上找的相关示例,无外乎下面三种方式, 但我的测试却是全都不生效 以上方法,CentOS和Ubuntu都试过, 不额外在容器内安装工具, 不直接date -s 设置的情况下, 还有什么方法可以实现同步宿主机的时间吗?

  • 本文向大家介绍Docker 给运行中的容器设置端口映射的方法,包括了Docker 给运行中的容器设置端口映射的方法的使用技巧和注意事项,需要的朋友参考一下 一、概念 Docker 端口映射即映射容器内应用的服务端口到本机宿主机器。 二、实现 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。 1. 随机映射 使用 -P 参数时,Docker 会

  • 问题内容: 我无法在Docker容器中运行任何yum命令,而没有出现以下错误: 我很困惑,因为我非常确定docker容器是使用默认用户root运行的。不过,如果我尝试将sudo放在a 或command 前面,则会得到: 我正在使用以下基本映像,以便可以在Docker中轻松运行Java Wildfly应用程序:https ://hub.docker.com/r/jboss/wildfly/ 底层发行

  • 我从OS X VM docker主机创建了一个docker容器。我使用run命令创建了它,并基于image-off-docker-hub创建了容器。 我现在连接到我的容器后,它创建并登录为根和在我的容器内的命令提示符。 我试图安装homebrew,但由于某些原因,我无法运行命令来安装homebrew: 当我跑步时,我会得到一个痛击: curl:找不到命令 不知道为什么我不能在我的容器里使用卷曲。

  • 问题内容: 遵循此示例:https : //docs.docker.com/engine/examples/mongodb/ 当尝试使用以下命令连接到mongoDB时:( 其中ip是boot2docker ip的名称)+ docker ps的端口号: 27017 / tcp 或-P 0.0.0.0:49155->27017/tcp 无论哪种方式,我都会收到以下错误: 警告:无法连接到ip:2701