Jenkins上构建时报内存溢出错误OutOfMemoryError

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins上构建时报内存溢出错误OutOfMemoryError相关的知识,希望对你有一定的参考价值。

参考技术A

在Jenkins在构建时,控制台输出报如下错误:
Exception in thread "Thread-2" java.lang.OutOfMemoryError: Java heap space

网上的解决方法:

最后解决方法:

使用 Jenkins 和 Docker 构建时“设备上没有剩余空间”

【中文标题】使用 Jenkins 和 Docker 构建时“设备上没有剩余空间”【英文标题】:"no space left on device" when building with Jenkins and Docker 【发布时间】:2019-09-13 10:40:14 【问题描述】:

我们使用 Jenkins 来构建 Docker 镜像,直到上周我每次尝试在 Jenkins 中构建镜像时,它都会失败并显示“来自守护进程的错误响应:错误处理 tar 文件(退出状态 1):写入 /app /node_modules/acorn/dist/acorn_loose.es.js:设备上没有剩余空间”(它失败的文件可能取决于项目)。如果我尝试在服务器中使用 Docker 但在 Jenkins 上失败,图像将会构建。

我曾尝试删除旧容器和图像等,但无济于事。磁盘空间和 inode 似乎很好,所以我不确定现在该尝试什么。任何帮助表示赞赏。

“码头信息”的结果:

Containers: 55
 Running: 48
 Paused: 0
 Stopped: 7
Images: 59
Server Version: 17.03.2-ce
Storage Driver: overlay
 Backing Filesystem: extfs
 Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.45-rancher
Operating System: RancherOS v1.1.0
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 19.61 GiB
Name: rancher
ID: Z7Z3:T3NW:N4O3:FKMZ:7KH6:FJ7R:TJ6A:FXLW:KNUL:WMRC:ED74:KHEM
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 dockerhub.companysite.net:5000
 127.0.0.0/8
Live Restore Enabled: false

“df -h”的结果:

Filesystem      Size  Used Avail Use% Mounted on
overlay          47G   27G   18G  60% /
tmpfs           9.9G     0  9.9G   0% /dev
tmpfs           9.9G     0  9.9G   0% /sys/fs/cgroup
/dev/sda1        47G   27G   18G  60% /.r
shm              64M     0   64M   0% /dev/shm
tmpfs           9.9G     0  9.9G   0% /sys/firmware

“df -ih”的结果:

Filesystem     Inodes IUsed IFree IUse% Mounted on
overlay           13M  2.8M  9.8M   22% /
tmpfs            2.5M    16  2.5M    1% /dev
tmpfs            2.5M    15  2.5M    1% /sys/fs/cgroup
/dev/sda1         13M  2.8M  9.8M   22% /.r
shm              2.5M     1  2.5M    1% /dev/shm
tmpfs            2.5M     1  2.5M    1% /sys/firmware

【问题讨论】:

TAR 文件有多大? @vivekyad4v 仅 20.78MB 您的 Jenkins 本身是否作为 docker 容器运行?可以分享一下构建失败的 Dockerfile 吗? 【参考方案1】:

您可能会留下一堆导致问题的旧悬空图像,请尝试:

docker volume rm $(docker volume ls -qf dangling=true)

(这确实会删除内容,因此您可能需要在执行此操作之前检查是否有任何内容要保留在任何悬空卷中)

【讨论】:

我试过了,但没有解决问题,因为根据“docker volume ls -qf dangling=true”没有留下任何悬空图像 可能听起来很愚蠢,但是您是否尝试过重新启动 docker 服务?它可能正在悄悄地持有已删除的内容 由于正在运行的容器数量等原因,我不愿意重新启动 Docker 服务,我对 Docker 比较陌生,所以对我尝试的方法有点怀疑。重启 Docker 服务会影响容器等吗? 是的,这将导致您需要重新启动它们 这就是为什么我现在还不想重启服务。如果我从 RancherOS 服务器运行构建命令,那么它构建没有错误,但如果我从 Jenkins UI 运行构建,那么它会失败,“设备上没有剩余空间”,这让我相信 Docker 工作正常,但 Jenkins 不是?在 Jenkins 记录“将构建上下文发送到 Docker 守护进程 20.78MB”消息后,它立即失败。【参考方案2】:

您应该清理旧容器、图像和卷。您可以使用 prune 仅通过一个命令将其删除:

docker system prune

删除所有未使用的容器、网络、图像(包括悬空的和未引用的)以及可选的卷。

输出:

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N] y

【讨论】:

以上是关于Jenkins上构建时报内存溢出错误OutOfMemoryError的主要内容,如果未能解决你的问题,请参考以下文章

jenkins 构建部署时tomcat7 内存溢出解决方案

jenkins添加git源码目录时报Error performing command错误

java虚拟机3.运行时内存异常

Tomcat启动时报内存溢出无法正常启动

jenkins内存溢出的一些解决过程

Jenkins 多分支构建