如何解决Jenkins的“磁盘空间过低”问题?

60

我已经在我的CentOS机器上部署了Jenkins,Jenkins运行良好三天,但昨天出现了磁盘空间太低。只剩下1.019GB。的问题。

我该如何解决这个问题?它让我的主节点离线几小时了?


1
当您首次部署Jenkins时,有多少可用磁盘空间?也许您应该将Jenkins托管在具有更多可用磁盘空间的机器上。 - Bernard
我有80GB的服务器,只有2个任务和5个构建。所以我不认为我的内存不足。可能是Jenkins正在记录日志。 - suresh pareek
9个回答

39

您可以轻松地从 Jenkins UI 中更改阈值(我的版本为 1.651.3):

[jenkins nodes preventing monitoring page]


更新:如何确保高磁盘空间

该功能旨在防止在空闲磁盘空间不足的从机上工作。降低阈值无法解决某些作业完成后未正确清理的问题。

根据您正在构建的内容:

  1. 确保您了解构建的磁盘输出-如果可能,请将输出限制为仅发生在作业工作区。使用工作区清理插件作为后置构建步骤来清理工作区。
  2. 如果该进程必须向外部文件夹写入一些数据-请在后置构建步骤中手动清除它们。

替代方法1 - 为每个作业提供一个新的从机(使用 spot slaves - 有许多插件与不同的云服务提供商集成,可按需动态提供计算机)

替代方法2 - 在容器内运行构建。所有内容都会在构建完成后被丢弃。


3
啊,我在看 [节点名称] > 配置。你描述的是节点 > 配置。算了,不用管了。https://imgur.com/a/CeTcA - Harry Moreno
这不应该是答案,对吧?这并没有解决低磁盘空间问题。它只是隐藏了来自节点监视的警告? - pourmesomecode
1
@TryingToLearnJS 我其实同意(我写了这个答案)- 这取决于问题是什么 - 如果有人想继续在小于1GB的从机上工作 - 它回答了如何在Jenkins上配置它。如果有人需要一些自动清理方法,那就不行了。但后者非常取决于您在Jenkins上运行的内容。 - orshachar
1
但感谢您的反馈 - 我添加了一个通用部分,可以回答这两个问题。 - orshachar
2
@orshachar 谢谢你!改变阈值确实帮了我很多。由于节点在低于阈值时会离线,所以更改阈值使我能够将它们重新上线并修复一些问题。还要感谢你的更新答案 :) - pourmesomecode

28
除了以上解决方案外,还有一种更“常见”的方式-直接从Linux机器中删除占用最大空间的文件夹。您可以按照以下步骤操作:
  1. 登录Jenkins机器(Putty)
  2. 切换到Jenkins安装路径

使用ls -lart命令列出隐藏文件夹,通常Jenkins安装在.jenkins/文件夹中

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx 4096 Feb 8 02:08 .jenkins/

  1. 列出文件夹大小

使用df -h显示磁盘空间的高级别信息

du -sh ./*/列出当前路径下每个子文件夹的总内存。

du -a /etc/ | sort -n -r | head -n 10会列出占用/etc/磁盘空间前10的目录。

  1. 删除旧的构建或其他大型文件夹

enter image description here

通常./job/文件夹或./workspace/文件夹可能是最大的文件夹。请进入其中并根据需要删除(不要删除整个文件夹)。

rm -rf 要删除的文件夹名称


10

您可以通过丢弃旧版本来限制磁盘空间的使用。在项目配置中,有一个复选框可供此用。


2
构建信息保存在主服务器上。这种问题大多发生在从服务器端,每个作业都有一个工作区,其中包含源代码和构建结果。 - Jirong Hu

4

我遇到了同样的问题。我的Jenkins版本是2.3,它的用户界面略有不同。在这里分享一下,以便帮助其他人。将两个磁盘空间阈值都增加到5GB可以解决此问题。

输入图片描述


3

这实际上是一个合法的问题,所以我不明白为什么会有负评,也许它应该属于Superuser或Serverfault。这是一个软性警告阈值,而不是硬性限制,当磁盘空间不足时。

Jenkins也是一样。结论是对于许多小型项目,可以降低名为hudson.diagnosis.HudsonHomeDiskUsageChecker.freeSpaceThreshold系统属性

话虽如此,我还没有测试过,而且有免责声明:

没有兼容性保证

总的来说,这些开关通常具有实验性质,并且可能随时更改。如果您发现其中一些有用,请提交工单以将其升级为官方功能。


设置阈值是为了防止节点因空间不足而崩溃?这并没有帮助。由于项目数量众多,我们的从服务器经常出现空间不足的问题。有什么最好的解决方案来解决这个问题? - Jirong Hu
添加另一个从节点,安装更多磁盘空间,或者更有可能的是需要让作业在完成后清理他们的工作区。你可能会发现有一些不必要和意外地占用大量空间的文件散落在周围。http://superuser.com/q/9847/81584 - KCD

3

我有一个清理任务,包括以下构建步骤。你可以每天或每周安排它。

  1. 执行系统Groovy脚本 构建步骤来清理旧的任务:
    import jenkins.model.Jenkins
    import hudson.model.Job

    BUILDS_TO_KEEP = 5

    for (job in Jenkins.instance.items) {
      println job.name

      def recent = job.builds.limit(BUILDS_TO_KEEP)

      for (build in job.builds) {
        if (!recent.contains(build)) {
          println "Preparing to delete: " + build
          build.delete()
        }
      }
    }

您需要安装Groovy插件。

  1. 执行 shell构建步骤来清理缓存目录
rm -r ~/.gradle/
rm -r ~/.m2/

echo "Disk space"
du -h -s /

1

检查空闲空间作为Jenkins任务:

参数

  • FREE_SPACE:所需的空闲空间,以GB为单位。

任务

#!/usr/bin/env bash

free_space="$(df -Ph . | awk 'NR==2 {print $4}')"

if [[ "${free_space}" = *G* ]]; then
  free_space_gb=${x/[^0-9]*/}

  if [[ ${free_space_gb} -lt ${FREE_SPACE} ]]; then
    echo "Warning! Low space: ${free_space}"
    exit 2
  fi
else
  echo "Warning! Unknown: ${free_space}"
  exit 1
fi


echo "Free space: ${free_space}"

插件

设置构建描述

构建后操作

  • 正则表达式: 可用空间: (.*)
  • 描述: 可用空间:\1

  • 失败构建的正则表达式: 警告!(.*)

  • 失败构建的描述: \1

1

对于不知道配置文件在哪里的人,可以从以下链接下载tmpcleaner: https://updates.jenkins-ci.org/download/plugins/tmpcleaner/

在此处您将获得一个hpi文件。前往“管理Jenkins”->“管理插件”->“高级”,然后在此处上传hpi文件并重新启动jenkins。

如果您前往“管理节点”,您将立即看到差异。

由于我的jenkins安装在debian服务器上,我无法找到/ etc / default文件夹或jenkins文件,因此我无法理解大多数与此相关的答案。 如果有人知道/ tmp文件夹在哪里或如何为debian配置它,请在评论中让我知道。

enter image description here


0

使用版本2.401.3

-> 管理Jenkins --> 节点 --> 节点监控。并更改/tmp目录的磁盘阈值。您还可以为“/”设置阈值值。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接