一、问题描述
Jenkins 在腾讯云服务器中用了有一段时间了,今天早上构建时出现了如下错误:
ERROR: Maven JVM terminated unexpectedly with exit code 137
看了一下 Jenkins 的构建输出日志,很明显这是服务器内存不足而导致的内存溢出现象,针对这个问题的解决方案实际上很简单,要么增加服务器内存、要么配置 JVM 的堆大小、要么配置服务器 swap 分区。由于使用的是腾讯云服务器,默认是没有开启 swap 的,因此可以暂时使用虚拟内存进行设置 swap 分区,从而避免内存溢出的现象。
二、解决方案
1、新建虚拟内存磁盘卷
mkdir /data/swap
2、设置 swap 大小
注意:这里我们bs(buff size)给的1024M, bs大小可以根据free -h命令查看的buff/cache的大小来决定,如果给大了可能会报dd: memory exhausted by input buffer of size 1073741824 bytes (1.0 GiB)
dd if=/dev/zero of=/data/swap/swapadd bs=1024M count=4
# if:从哪取
# of:取到哪
# bs:块大小
# count:共取多少(1024*4=4096M=4G)
3、初始化
mkswap /data/swap/swapadd
4、启用 swap
swapon /data/swap/swapadd
5、查看 swap 分区大小
# free -m
total used free shared buff/cache available
Swap: 4095 171 3924
再次进行 Jenkins 构建:
到此,Jenkins 构建内存溢出的问题已经解决。最后要提醒的是,对于像 CICD 这种自动化部署应用,比较消耗内存,因此在进行部署前应先规划好服务器配置,如内核、内存、磁盘等。
--end--