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时就申请这么大的内存.

JVM可用内存测试方法: # 配置好JDK的环境变量后, 在终端键入如下命令:

java -Xmx32g -version

# 如果能够正常显示JDK的版本信息, 说明可以申请到指定大小的内存.

# 若报错, 说明申请的内存大小超出限制, 不被操作系统所允许.

继续查看系统资源限制情况: # 在终端键入如下命令:

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: 当前系统中所有应用申请了的总内存 —— 只是申请, 并未完全分配.

版权声明

作者: ma_shoufeng(马瘦风)

出处: 博客园 马瘦风的博客

您的支持是对博主的极大鼓励, 感谢您的阅读.

本文版权归博主所有, 欢迎转载, 但未经博主同意必须保留此段声明, 且在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.

java初始化虚拟机错误_异常 - 虚拟机初始化错误 - Error occurred during initialization of VM...相关推荐

  1. Java初始化VM时出错怎么办_异常 - 虚拟机初始化错误 - Error occurred during initialization of VM...

    1 环境配置信息 1.1 服务器配置信息 服务器是物理机, 配置信息如下: CPU型号 CPU个数 CPU核数 CPU线程数 内存 Intel(R) Xeon(R) CPU E5-2630 v4 @ ...

  2. Error occurred during initialization of VM Java虚拟机初始化失败

    遇到这个问题,其实很多人就害怕了,根本找不到问题的原因- JVM那可是一个遥不可攀的东西,我写Java的,JVM报错了我咋整? 首先,先排查一下你的环境是否按照规矩配置好了 1.如果在Eclipse上 ...

  3. Java钉钉开发_异常_01_error code:50002, error message:请求的员工userid不在授权范围内...

    一.异常原因: 请求的员工不在 应用的可见范围内. 如下图,应用的可见范围只设置为了部分员工.所以导致此异常 二.异常解决 将员工添加进可见范围即可 转载于:https://www.cnblogs.c ...

  4. JAVA类运行时,报错“Error occurred during initialization of boot layer”

    JAVA类运行时,报错"Error occurred during initialization of boot layer" 网上查原因是由于JDK9及以上版本引入了模块,所以在 ...

  5. mybatis错误:bad SQL grammar [];error occurred while setting parameters;involve defaultParameterMap处理

    业务描述:由于处理数据量庞大,多表进行拆分,每次任务新建一个表.在往新建表(表名要传参)插入数据时,提示错误: Error updating database.  Cause: java.sql.SQ ...

  6. java 虚拟机 手机_手机虚拟机是什么意思

    手机虚拟机一般指的是java虚拟机,因为手机上的程序都是用java编写的:而java程序都是在java虚拟机里运行的:java虚拟机只是一个平台而已,提供一种运行环境. 本文操作环境:Windows7 ...

  7. 卸载虚拟机出现用户已存在的错误_用虚拟机安装360全家桶是什么体验

    废话不说,直接开始 win7旗舰版x64 8线程,模拟7700k 保险点,给个12G运存 128G预分配,硬盘文件丢在PM841上,PM841什么水平在座各位心里应该有数 开始启动安装啦 先关掉UAC ...

  8. java settitle 源码_在其他初始化方法中折叠工具栏的setTitle - java代码 - 源码查

    问题 In my Fragment I have a CollapsingToolbar and it is created it in the onCreateView() method: @Ove ...

  9. java调用dll 动态链接库(dll)初始化例程失败._动态链接库(DLL)初始化例程失败,是怎么回事?...

    wzcdlg.dll 是系统文件,不要删除 文件wzcdlg.dll 包含在以下软件 * Windows XP Home Edition, Deutsch 更多信息 版本: 5.1.2600.1276 ...

最新文章

  1. 《转》java URL重写
  2. php中jquery ajax请求参数,浅谈Jquery中Ajax异步请求中的async参数的作用
  3. 洛谷 - P4062 [Code+#1]Yazid 的新生舞会(推公式+线段树)
  4. 2021“鲜美生活”新趋势:中国食品行业白皮书
  5. 腾讯打免费牌争抢市场 马化腾表示QQ旋风免费
  6. kalilinux装到u盘上的弊端_暗黑系统安装盘高达14G!kali linux在它面前顿然失色
  7. Fiddler刚使用遇到的4大问题
  8. win10 修改gitlab账号_win10--git安装以及gitlab配置
  9. springcloud如何搭建支付宝pay-service微服务
  10. Ubuntu16.04 + cuda8.0 + GTX1080 + matlab14.04a + Opencv3.0 + caffe 安装教程
  11. 进程原语和线程原语是啥意思_转换中介原语
  12. itext生成pdf加页码和总页码
  13. learning psychology
  14. 皕杰基础平台的登录方式
  15. selenium+python 的微博自动转赞评功能实现
  16. 学生成绩处理(函数版)
  17. [篇五章三]-关于 Windows 10 安装好后系统自带的微软输入法没有输入框的 BUG 解决办法
  18. C++:N阶楼梯上楼问题
  19. H5与其他平台交互框架
  20. 加密货币交易所需要怎样的透明度? |链捕手

热门文章

  1. [转]老板给你的一封信:我为什么不给你涨工资
  2. shell批量创建和删除10个系统帐号密码(密码为随机10位字符串)
  3. xwiki[未完成]
  4. zabbix添加自定义监控项目-配置邮件告警-测试告警
  5. Spring Cloud Spring Boot mybatis分布式微服务云架构(三)属性配置文件详解(1)
  6. Android 中文 SDK (47) —— Filter
  7. c++与java中子类中调用父类成员的方法
  8. logback:用slf4j+logback实现多功能日志解决方案
  9. Ubuntu(Linux) 下 unzip 命令使用详解
  10. 【案例分析】android广播接收不到原因分析