异常 - 虚拟机初始化错误 - Error occurred during initialization of VM
1 环境配置信息
1.1 服务器配置信息
服务器是物理机, 配置信息如下:
| CPU型号 | CPU个数 | CPU核数 | CPU线程数 | 内存 |
|---|---|---|---|---|
| Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz | 2个 | 2 * 10 = 20个核 | 2 * 20 = 40个线程 | 126G |
1.2 Tomcat启动参数
查看$TOMCAT_HOME/bin/catalina.sh文件, 其中JVM参数配置信息如下:
JAVA_OPTS="-server -Xms90g -Xmx90g -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
2 问题描述
在服务器(CentOS-6.5)中部署项目上线前的仿真测试环境, 启动Tomcat时, 抛出如下错误:
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
也就是: 初始化VM时出错, 无法为heap(堆)对象保留足够的空间.
错误: 无法创建Java虚拟机.
错误: 发生了致命异常. 程序将会退出.
3 问题解决
根据问题描述可知, Linux系统不允许初始化JVM时就申请这么大的内存.
(1) JVM可用内存测试方法:
# 配置好JDK的环境变量后, 在终端键入如下命令:
java -Xmx32g -version
# 如果能够正常显示JDK的版本信息, 说明可以申请到指定大小的内存.
# 若报错, 说明申请的内存大小超出限制, 不被操作系统所允许.
(2) 继续查看系统资源限制情况:
# 在终端键入如下命令:
ulimit -a
# 发现内存的使用并未受限:
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
经过排查, 原来某同事在测试Greenplum DB时, 修改了/etc/sysctl.conf文件中的系统内核参数.
# 将如下参数的值设置为1或0
vm.overcommit_memory=2
# 保存退出后, 使得更改生效:
sysctl -p
此时再次启动Tomcat, 发现启动成功.
4 关于vm.overcommit_memory参数
vm.overcommit_memory表示系统内核在分配内存时做检查的方式.
此参数有 [0、1、2] 3个值可选, 处理方式定义在内核源码mm/mmap.c的_vm_enough_memory函数中.
4.1 vm.overcommit_memory=0
默认设置. 宏为OVERCOMMIT_GUESS.
内核计算: NR_FILE_PAGES总量 + SWAP总量 + slab中可以释放的内存总量, 如果申请空间超过此数值, 则将此数值与空闲内存总量减掉 totalreserve_pages() 的总量相加. 如果申请空间依然超过此数值, 则分配失败.
该设置可能造成内存超载, 但也可以提升大量使用内存的任务的性能.
4.2 vm.overcommit_memory=1
宏为OVERCOMMIT_ALWAYS.
函数直接 return 0, 分配成功.
4.3 vm.overcommit_memory=2
宏为OVERCOMMIT_NEVER.
内核计算: 总物理内存 * vm.overcommit_ratio / 100 +SWAP总量, 如果申请空间超过此数值, 则分配失败. vm.overcommit_ratio 默认值为50.
该设置可以有效减少内存过度使用的风险.
4.4 查看系统的可用内存
查看命令如下:
[root@localhost ~]# grep -i commit /proc/meminfo
CommitLimit: 66020980 kB
Committed_AS: 100135888 kB
其中:
CommitLimit: 当前系统还可以申请的总内存;
Committed_AS: 当前系统中所有应用申请了的总内存 —— 只是申请, 并未完全分配.
参考资料
版权声明
作者: 马瘦风
出处: 博客园 马瘦风的博客
您的支持是对博主的极大鼓励, 感谢您的阅读.
本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.
异常 - 虚拟机初始化错误 - Error occurred during initialization of VM的更多相关文章
- Logstash测试的时候,报Error occurred during initialization of VM,Could not reserve enough space for object heap
今天配置Logstash的时候,启动输入logstash ‐e 'input { stdin { } } output { stdout {} }'就开始报错了,Error occurred duri ...
- jboss服务启动失败报:Error occurred during initialization of VM
今天下午突然间公司的GTV管理平台上不去了 访问确实,提示找不到页面 登录终端查看服务进程. ps -ef | grep jboss 发现没有这个进程.怎么办,启动被. 输入nohup /home/c ...
- Error occurred during initialization of VM Could not reserve enough space for 2097152KB object heap
ionic build Android后的报错问题 ionic 升级了splashscreen和statusbar的插件后,执行ionic build android会一直报打包错误.原因是过低的An ...
- Error occurred during initialization of VM Could not reserve enough space for object heap
Error occurred during initialization of VM Could not reserve enough space for object heap Java虚拟机(JV ...
- fisheye Error occurred during initialization of VM Could not reserve enough space for object heap 问题解决!
参考文章:https://answers.atlassian.com/questions/9397/not-enough-heap-space-to-run-fisheye fisheye下载好了之后 ...
- debian 7 linux 安装jdk出现Error occurred during initialization of VM java/lang/NoClassDefFoun
debian 7 linux 安装jdk出现Error occurred during initialization of VM java/lang/NoClassDefFoun 这两天一直研究lin ...
- 踩坑系列《三》 java -version 报错出现Error occurred during initialization of VM java/lang/NoClassDefFoundError:
之前导入一个项目,因为该项目Spring版本过低,只能适用于1.7版本,装了jdk1.7版本.安装配置好后,打开cmd窗口,执行 java -version 指令发现没像正常一样显示版本信息,而是报了 ...
- Error occurred during initialization of VM Could not reserve enough space fo
通过es的elasticsearch.bat 启动.发现错误:Error occurred during initialization of VM Could not reserve enough s ...
- Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object
本地原来已经安装了JAVA JDK1.7并配置好了环境变量; 然后又安装了JDK8,想2个版本并存. 然后发现eclipse 打不开,闪退.然后查看环境: 发现 C:\Users\Administra ...
随机推荐
- 如何使用Docker部署一个Go Web应用程序
熟悉Docker如何提升你在构建.测试并部署Go Web应用程序的方式,并且理解如何使用Semaphore来持续部署. 简介 大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版 ...
- 【UOJ】67 新年的毒瘤 &【BZOJ】1123 BLO
[UOJ 67] 题目链接: 传送门 题解: 第一眼很懵逼……这什么鬼. 思考什么点复合条件……(o(>﹏<)o 1.树,也就是说还剩n-2条边,等价于要删去一个度数为m-n+2的点. 2 ...
- BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路
BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路 Description “我要成为魔法少女!” “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切, ...
- 毕业样本=[威尔士大学毕业证书]UWIC原件一模一样证书
威尔士大学毕业证[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归&am ...
- hibernate 5.2.12配置
//创建服务注册对象 ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure() ...
- hkws摄像头拆机
- 记一次重大生产事故,在那 0.1s 我想辞职不干了!
一.发生了什么? 1.那是一个阳光明媚的下午,老婆和她的闺蜜正在美丽的湖边公园闲逛(我是拎包拍照的). 2.突然接到甲方运营小妹的微信:有个顾客线上付款了,但是没有到账,后台卡在微信支付成功(正常状态 ...
- 漏洞经验分享丨Java审计之XXE(下)
上篇内容我们介绍了XXE的基础概念和审计函数的相关内容,今天我们将继续分享Blind XXE与OOB-XXE的知识点以及XXE防御方法,希望对大家的学习有所帮助! 上期回顾 ◀漏洞经验分享丨Java ...
- Python创建微信机器人
微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地,今天我们要将便是如何用Python来生成一个微信机器人,突然想起鲁迅先生曾经说过的一句话:因为是微信机器人系列的 ...
- ASP.NET Core 项目实战(持续更新~~~)
一.前言 准备写这个系列文章的设想开始于今年9月,毫无意外,期间又又又又拖了很长时间,文章主要是为了记录自己学习使用 ASP.NET Core Web API 与 Vue 创建一个前后端分离的项目的整 ...