ubuntu中报错:无法分配内存 (errno=12)

  今天碰到一个大坑,差点要了老命!

  之前装了ubuntu双系统,后来崩溃,想在就想装VMware虚拟机,再装ubuntu,一切进展顺利,直到在虚拟机的ubuntu中安装IDEA时出现了问题。
  安装过程并没有报错,但是启动后运行一个项目,项目还没加载呢就直接退出,生成个错误日志,如下: 

  


  OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f5a9b000, 66166784, 0) failed; error='无法分配内存' (errno=12)

  日志中的部分内容是:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 66166784 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=3309, tid=0x00007f0174cfc700
#
# JRE version: OpenJDK Runtime Environment (8.0_112-b16) (build 1.8.0_112-release-736-b16)
# Java VM: OpenJDK 64-Bit Server VM (25.112-b16 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

  真是走了很多弯路,尝试了无数次:重装idea,idea配置文件配置jvm的大小,把虚拟机的内存再调大一倍等等等等

  最后来根据 (errno=12)这个搜索到一篇文章,说道:
    后来看了美军一个文章(http://www.enchantedage.com/node/235),加一个配置即可:echo 1000000 > /proc/sys/vm/max_map_count

  我看了自己虚拟机ubuntu里面,/proc/sys/vm/max_map_count的初始值很小,只有65530,果断使用这个重设了一下。

  啊,终于好了,太艰难了。

 

  后来又请装双系统的同事看下他们系统里的这个值,也是65530,但是他们的却不报错,真是醉醉的。看来造成“无法分配内存”的原因,并不是这里,但是可以通过修改这个来解决。

    猜测这个原因:1、双系统和虚拟机不同  2、安装jdk方式的不同(之前的我,和现在的同事们,都是先下载好jdk再安装的;可是现在虚拟机我却使用命令安装,这样不需要配置环境变量)

    只是猜测,暂时就不去验证它了,如果再有遇到的同学,解决不了的话,可以朝这个方向尝试下。

 


 

  后来在IDEA中操作,实在是各种卡、慢,第二天还是决定重装jdk,不使用命令安装,而是使用解压缩包并且配置环境变量,并且将max_map_count的值改了回去

  echo 65530> /proc/sys/vm/max_map_count

 

  你猜怎么着,一点问题没有。Maven仓库下载jar包也很溜,果然还是jdk的问题啊。所以最终解决方案是:使用解压缩包并配置环境变量的方式,重新安装jdk!

 

  标签:虚拟机的ubuntu中安装Idea出错 无法分配内存 (errno=12)

 

  原创文章,欢迎转载,转载请注明处!

 

 


 

 附 美军文章的内容如下:

Linux mmap() ENOMEM error causing Segmentation Fault

 

I have a system that creates files on disk, then uses mmap and madvise and mflush to asynchronously do I/O to the disk. This system may potentially create many, many files, each of which will have three mmap sections, that will be rotated through the file.

After trying to run this system for a while, I started getting segmentation violations that I couldn't quite understand. Initially, I thought it was a threading problem, because I'm using boost::asio and boost::thread quite heavily. I used strace() to figure out what the system was doing, and found that right before the crashes, one or more calls to mmap() would fail.

Long story short: There is a limit to the number of mmap() segments that can be active in a Linux process at any one time. This limit is configurable in /proc/sys/vm/max_map_count. I already knew there was a file descriptor limit, and I raised that pretty high, but apparently Linux doesn't think you'll be using lots of mmap() just because you're using lots of files. Adding the following to /etc/rc.local will fix the problem:

echo 1000000 > /proc/sys/vm/max_map_count

 
Connection refused (OS Error: Connection refused, errno = 111)是一个常见的错误,它表示连接被拒绝。这通常是由于以下几种原因引起的: 1. 目标服务器未运行或未响应:当你尝试连接到一个服务器时,如果该服务器未运行或未响应,就会出现连接被拒绝的错误。这可能是由于服务器故障、网络问题或防火墙设置等原因引起的。 2. 端口被占用:当你尝试连接到一个服务器的特定端口时,如果该端口已被其他进程占用,就会出现连接被拒绝的错误。这可能是由于其他应用程序正在使用该端口,或者你的应用程序没有权限使用该端口。 3. 防火墙阻止连接:防火墙可以设置规则来限制网络连接。如果你的应用程序被防火墙阻止,就会出现连接被拒绝的错误。 为了解决这个问题,你可以尝试以下几种方法: 1. 确保目标服务器正在运行并且可以响应请求。你可以尝试通过ping命令或telnet命令来测试服务器的可访问性。 2. 检查目标服务器的端口是否被其他进程占用。你可以使用netstat命令或类似的工具来查看端口的占用情况,并尝试释放该端口或更改你的应用程序使用的端口。 3. 检查防火墙设置并确保允许你的应用程序进行网络连接。你可以联系系统管理员或网络管理员来获取更多帮助。 4. 如果你的应用程序在本地运行,你还可以尝试使用localhost或127.0.0.1作为目标地址来连接。 请注意,具体的解决方法可能因情况而异。如果以上方法都无法解决问题,建议你查阅相关文档或寻求专业人士的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值