【问题标题】:Large TFSUser\AppData\Local\Temp Directory on Build Machine构建机器上的大型 TFSUser\AppData\Local\Temp 目录
【发布时间】:2013-02-28 14:01:28
【问题描述】:

我在 Windows Server 2008 R2 上使用 TFS 2012 Update 1。我们在帐户 TFSUser 下运行 TFS 构建。前几天,我们的构建机器空间不足。经过调查,我发现文件夹 C:\Users\TFSUser\AppData\Local\Temp 中有超过 50GB 的文件,其中一些可以追溯到 2012 年 10 月。这些文件都不是太大,但它们不会似乎已经被清理干净了。

今天的调查表明,在自动构建过程中,文件夹被写入了很多内容。为什么这些文件没有得到清理?我可以做些什么来确保我的构建机器不会因为这个问题而再次耗尽空间?

2013-03-13 更新
我创建了一个每晚运行以删除临时目录内容的小型 powershell 脚本。这是 powershell 脚本:

Stop-Service TFSBuildServiceHost.2012
Remove-Item Drive:\Path\To\TFSUser\AppData\Local\Temp\* -recurse -exclude Build*
Start-Service TFSBuildServiceHost.2012

我以 TFSUser 帐户的身份每晚以提升的权限运行任务。需要提升的权限,因为我们需要启动和停止服务。

【问题讨论】:

    标签: visual-studio tfs tfsbuild


    【解决方案1】:

    这是一个 TFS2010 问题,我猜他们在 2012 年尚未解决。构建系统创建临时文件并且从不清理它们,最终导致失败,因为磁盘已满,或者因为它们使用有限数量的数字作为唯一 ID 并且用完了可以使用的新 ID(IIRC,它失败了65536 个文件,我们通常会在磁盘空间耗尽之前很久就访问)

    解决方案是定期删除临时文件。我每年大约手动执行 2-4 次。最安全的方法可能是禁用您的构建代理,然后清除临时文件夹,然后重新启用代理(如果服务器已经运行了几个月,同时重新启动服务器可能不是一个坏主意)。

    另一种方法可能是每天/每周设置一个小型计划任务,清除几天前的任何临时文件,并在您一无所知(如通宵构建)的半夜运行它正在运行。

    或者,如果您的服务器每年重新启动几次,在构建代理启动之前清除临时文件夹的启动脚本可能是一个干净整洁的解决方案。

    这完全取决于您的磁盘填满的速度 - 您可能会发现这是数月累积的垃圾,而不是在短时间内击中您的东西,在这种情况下,您不需要非常激进的方法来处理让事情顺利进行。

    【讨论】:

    • 谢谢杰森。我将研究一个可以运行的小脚本,因为我很健忘(因此我为什么要编程)。 :-)
    • 原来我也很健忘 :-) ...我今天早上刚刚检查了我们的服务器,我设置了一个计划任务,该任务在每个星期六晚上 11:30 运行,然后运行两行批处理脚本:del /F /S /Q "C:\Documents and Settings\TFSSERVICE\Local Settings\Temp\*.*"del /F /S /Q "C:\WINDOWS\Temp\*.*"
    • 当我们的 vdproj 安装项目在 TFS 2010 构建服务器上开始失败时,我们遇到了这个问题。 Devenv 在构建 MSI 时尝试创建临时文件。只有通过启动 VS 并创建一个新的 MSI 项目/vdproj(在构建服务器上)才发现这个问题,同时使用 ProcMon 并随后注意到 CreateFile 操作上的大量 NAME COLLISION 结果在构建服务的 AppData\Local\Temp 文件夹中。现在清除它...
    • 如果您只允许在同一台机器上一次运行一个构建,那么您可以设置一个清除 temp 的构建
    • 为什么我们必须在 2014 年做这样的事情?在我知道 TFS 这样做之前,我有超过 118K MSI 日志文件,超过 279GB。
    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多