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

版权声明

作者: 马瘦风

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

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

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

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

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

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

  2. tomcat 报错:Error occurred during initialization of VM

    Error occurred during initialization of VM Unable to load native library: Can't find dependent libra ...

  3. Error occurred during initialization of VM 附oracle官网解决方式

    java 命令 Error occurred during initialization of VM java.lang.NoClassDefFoundError: java.lang.Object ...

  4. play debug启动报错Error occurred during initialization of VM agent library failed to init: jdwp

    play 框架 部署后debug启动报错解决 错误代码: Error occurred during initialization of VM agent library failed to init ...

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

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

  6. jmeter启动报错 Error occurred during initialization of VM Could not reserve enough space for object heap

    报错为创建空间过大,没有足够空间. 解决方案: 用vs code 或 notepad++等软件打开bin文件夹里的jmeter.bat 找到set HEAP这一行,修改Xm后的数据 set HEAP= ...

  7. Android studio Error occurred during initialization of VM 问题解决

    最近开发导入其他Android项目遇见的问题,如下图: 解决办法: 将org.gradle.jvmargs=的值该为521(堆内存分配过高导致) 备忘,希望能帮助到大家 转载于:https://www ...

  8. IDEA报错Error occurred during initialization of VM

    解决方式:选的jdk有问题,要在File->Project Structured的Project中选好配置好环境变量的那个jdk才行

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

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

最新文章

  1. 实验一:使用ADO.NET方式读数据
  2. 屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键
  3. 【阿里巴巴研发效能峰会】低代码与数智化分论坛在线预约中……
  4. [渝粤教育] 江西师范大学 创业社团功能与自我发展 参考 资料
  5. mysql修改表字段小数点精度,mysql – 如何配置Rails以在表单字段中以正确的精度输出小数?...
  6. 解题报告(LeetCode):Max Points on a Line
  7. 英语单词拼写游戏开发纪录
  8. android 实现男女按钮选择
  9. 数据库分页数据丢失问题
  10. Unity3D Maze 迷宫生成算法
  11. 【数学 博弈论】JZOJ_3339 wyl8899和法法塔的游戏
  12. 目标检测实战篇1——数据集介绍(PASCAL VOC,MS COCO)
  13. 投放Google广告怎么做才是最合适的?谷歌广告的优势在哪
  14. Docker(9) 安装Oracle18c
  15. 常见的百度云搜索引擎入口合集
  16. 2001-2022年全国各城市风速数据(逐日、逐月、逐年)
  17. React框架+cesium加载GeoWebCache发布4326WMTS服务的ArcGIS切片图层请求400问题
  18. jquery图片加载失败
  19. 学习MySQLl06《存储过程与事务》
  20. 丢失api-ms-win-crt-runtime-l1-1-0.dll已解决

热门文章

  1. 2D动画——CSS制作摩天轮
  2. Android10相机,方向错了?一亿像素只是噱头?小米10pro硬刚相机评测
  3. 自学LINUX (ubuntu使用vim编写Hello world!)【4】
  4. excel求和SUM和筛选求和SUBTOTAL
  5. Cadence制作热风焊盘
  6. C++ 11语法甜点2
  7. 《文渊》期刊简介及投稿邮箱
  8. Mac 邮箱客户端 163邮箱 频繁报无法验证用户名和密码
  9. 苹果升级鸿蒙系统,华为正式官宣!首批鸿蒙系统正式版升级大名单出炉:这些用户有福了...
  10. 有声读物服务器Audiobookshelf