OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory failed error='Cannot allocate memory'

1.问题描述
废话不多说,直接上图:


图1 错误截图

在启动项目的时候报错,无法分配内存。

2.问题分析

  • 查看服务器的剩余内存


    图2 查看内存使用情况

如上图所示:系统一共6.8G 使用了5.9G 剩余215M,那么我们在启动项目的时候设置了JVM的最小内存参数:


图3 查看项目启动需要的最小内存

那么显而易见,内存不够用,导致项目无法启动。

  • 启动用swap交换空间
    从图2可以看出我们的服务器是没有启用swap交换空间的(打了马赛克是我开启swap之后的结果),就是说牺牲一部分磁盘存储来保证部分程序正常运行所需要的运行内存。
    第一步:创建swapfile
# 使用root权限,创建500M
dd if=/dev/zero of=swapfile bs=1024 count=500000

第二步:将swapfile设置为swap空间

mkswap swapfile

第三步:启用交换空间

swapon swapfile 

至此我们可以查看运行内存的使用情况:


图4 查看内存使用
  1. 问题解决
  • 此时启动项目,发现启动成功,同时继续查看内存使用


    图5 查看内存使用

发现swap已经使用了486M,讲道理启动我的项目需要256M~512M之间,swap空间我只开了500M虽然启动成功了,但是如果后续还有相同的服务上线的话肯定不够用,那么我们该如何去创建合适的swap呢?
可以参考:给Linux分配多少Swap空间才够呢?

  • 这里再说下在什么时候swap交换内存会被使用呢?
#内核空间交换区分利用参数查看命令
cat /proc/sys/vm/swappiness
图6 swap使用阀值
  • 内核空间交换分区利用参数说明

swappiness=0 的时候表示最大限度使用物理内存,然后才是swap空间;swappiness=100 的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面,那么我们的是30,也就是说当内存使用到30%的时候,swap内存启用。

参考地址:https://blog.csdn.net/weixin_44105991/article/details/91320644

你可能感兴趣的:(OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory failed error='Cannot allocate memory')