如何解决詹金斯“磁盘空间太低”的问题?

Posted

技术标签:

【中文标题】如何解决詹金斯“磁盘空间太低”的问题?【英文标题】:How to solve jenkins 'Disk space is too low' issue? 【发布时间】:2012-05-06 17:55:16 【问题描述】:

我在我的 CentOS 机器上部署了 Jenkins,Jenkins 运行了 3 天,但昨天出现了 Disk space is too low. Only 1.019GB left. 问题。

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

【问题讨论】:

第一次部署 Jenkins 时有多少可用磁盘空间?或许您应该将 Jenkins 托管在具有更多可用磁盘空间的机器上。 我有 80GB 的服务器,只有 2 个工作和 5 个构建。所以我不认为我有更少的记忆。可能是詹金斯正在记录日志 【参考方案1】:

您可以通过丢弃旧版本来限制磁盘空间的减少。项目配置中有一个复选框。

【讨论】:

谢谢,这是一个非常有用的提示。 构建信息保存在主服务器上。这种问题多发生在salve端,每个job都有一个workspace,里面包含了源代码和构建结果。【参考方案2】:

这实际上是一个合法的问题,所以我不明白反对意见,也许它属于超级用户或服务器故障。这是磁盘空间不足的软警告阈值,而不是硬限制。

对于 hudson,请参阅 where to configure hudson node disk temp space thresholds - 这是在谈论主机,而不是节点

詹金斯也是一样。结论是对于许多小型项目,称为hudson.diagnosis.HudsonHomeDiskUsageChecker.freeSpaceThreshold 的system property 可以减少。

在说我没有测试过并且有免责声明

无兼容性保证

一般来说,这些开关通常是实验性质的,如有更改,恕不另行通知。如果您觉得其中一些有用,请提交票证以将其推广到官方功能。

【讨论】:

所以设置阈值是为了防止节点因空间不足而宕机?这没有帮助。由于大量项目,我们经常在从服务器上遇到空间不足的问题。解决此问题的最佳解决方案是什么? 添加另一个从属设备,安装更多磁盘空间,或者您更有可能需要在完成后获得作业以清理其工作空间。您可能会发现 superuser.com/q/9847/81584 周围存在不必要且意外的大文件【参考方案3】:

您可以从 jenkins UI 轻松更改阈值(我的版本是 1.651.3):

[]


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

此功能旨在防止在可用磁盘空间不足的从站上工作。降低阈值并不能解决某些作业在完成后无法正确清理的事实。

取决于您要构建的内容:

    确保您了解构建的磁盘输出是什么 - 如果可能的话 - 将输出限制为仅发生在作业工作区。使用workspace cleanup plugin 清理工作区作为构建后步骤。 如果进程必须将一些数据写入外部文件夹 - 在构建后步骤中手动清理它们。

Alternative1 - 为每个作业配置一个新的从属设备(使用现场从属设备 - 有许多插件与不同的云提供商集成以按需提供动态机器)

Alternative2 - 在容器内运行构建。构建完成后,所有内容都将被丢弃

【讨论】:

啊,我在看 [节点名称] > 配置。您描述了节点>配置。 nvmimgur.com/a/CeTcA 这肯定不是答案吗?这并不能解决磁盘空间不足的问题。它只是隐藏了节点监控的警告? @TryingToLearnJS 我实际上同意(并且我写了这个答案) - 这取决于问题是什么 - 如果有人想继续使用 但感谢您的反馈 - 我添加了一个通用部分,可以回答这两个问题 @orshachar 谢谢老兄!更改阈值确实对我有所帮助。由于节点在下降到下方时会脱机,因此我可以将它们重新启动并修复一些东西。并感谢更新的答案:)【参考方案4】:

除了上述方案,还有一种更“常见”的方式——直接从Linux机器上删除最大的空间消耗者。您可以按照以下步骤操作:

    登录 Jenkins 机器 (Putty) cd 到 Jenkins 安装路径

使用ls -lart 也可以列出隐藏文件夹,通常是 jenkin 安装放在 .jenkins/ 文件夹中

[xxxxx ~]$ ls -lart

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

    列出文件夹空间

使用df -h高位显示磁盘空间

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

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

    删除旧版本或其他大型文件夹

通常./job/ 文件夹或./workspace/ 文件夹可以是最大的文件夹。请进去根据你的需要删除(不要 删除整个文件夹)。

rm -rf theFolderToDelete

【讨论】:

【参考方案5】:

我遇到了同样的问题。我的 jenkins 版本是 2.3,它的 UI 略有不同。把它放在这里,以便它可以帮助某人。将两个磁盘空间阈值提高到 5GB 即可解决此问题。

【讨论】:

【参考方案6】:

Jenkins Job 的身份检查可用空间:

参数

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"

插件

设置构建描述

构建后操作

正则表达式Free space: (.*)

说明Free space: \1

失败构建的正则表达式Warning! (.*)

构建失败的描述\1

【讨论】:

【参考方案7】:

我有以下构建步骤的清理工作。你可以安排它@daily 或@weekly。

    Execute system groovy script 清理旧作业的构建步骤:
    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 插件。

    Execute shell 清理缓存目录的构建步骤
rm -r ~/.gradle/
rm -r ~/.m2/

echo "Disk space"
du -h -s /

【讨论】:

【参考方案8】:

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

您将在此处获得一个 hpi 文件。转到Manage Jenkins-> Manage plugins-> Advanced 然后在这里上传hpi文件并重启jenkins

如果您转到管理节点,您可以立即看到不同之处。

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

【讨论】:

以上是关于如何解决詹金斯“磁盘空间太低”的问题?的主要内容,如果未能解决你的问题,请参考以下文章

出现 OutOfMemoryError:在詹金斯中执行 maven 构建时 PermGen 空间

无法为詹金斯中的对象堆错误保留足够的空间[重复]

问题解决:Ubuntu 磁盘空间占满如何清理

如何解决Oracle数据库归档日志占满磁盘空间

Azure 中如何获取未附加磁盘的磁盘容量和可用空间

换种思路解决日志占用磁盘空间问题