伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

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

来源:本站原创 浏览:157次 时间:2021-09-25

通过生产中Tomcat启动时遇到的问题, 解决 Error occurred during initialization of VM 错误, 并说明 vm.overcommit_memory 参数的用法.


目录

  • 1  环境配置信息
    • 1.1  服务器配置信息
    • 1.2  Tomcat启动参数
  • 2  问题描述
  • 3  问题解决
  • 4  关于vm.overcommit_memory参数
    • 4.1  vm.overcommit_memory=0
    • 4.2  vm.overcommit_memory=1
    • 4.3  vm.overcommit_memory=2
    • 4.4  查看系统的可用内存
  • 参考资料
  • 版权声明


1  环境配置信息1.1  服务器配置信息

服务器是物理机, 配置信息如下:

CPU型号CPU个数CPU核数CPU线程数内存Intel(R) Xeon(R) CPU  E5-2630 v4 @ 2.20GHz2个2 * 10 = 20个核2 * 20 = 40个线程126G1.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 VMCould not reserve enough space for object heapError: 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) 64max memory size         (kbytes, -m) unlimited

经过排查, 原来某同事在测试Greenplum DB时, 修改了/etc/sysctl.conf文件中的系统内核参数.

# 将如下参数的值设置为1或0vm.overcommit_memory=2# 保存退出后, 使得更改生效: sysctl -p

此时再次启动Tomcat, 发现启动成功.

4  关于vm.overcommit_memory参数

vm.overcommit_memory表示系统内核在分配内存时做检查的方式.

此参数有 [0、1、2] 3个值可选, 处理方式定义在内核源码mm/mmap.c的_vm_e����,�ֱ�nough_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/meminfoCommitLimit:    66020980 kBCommitted_AS:   100135888 kB

其中:

CommitLimit: 当前系统还可以申请的总内存;

Committed_AS: 当前系统中所有应用申请了的总内存  —— 只是申请, 并未完全分配.

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net