2013-03-12 69 views
11

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

今天的调查显示,在自动构建过程中文件夹被写入很多内容。为什么这些文件没有被清理干净?我能做些什么来确保我的编译机器不会因为这个问题而再次耗尽空间?

更新2013年3月13日
我创建了一个在夜间运行,删除临时目录内容的小PowerShell脚本。这里的PowerShell脚本:

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

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

回答

8

这是一个TFS2010问题,我想他们在2012年还没有解决。构建系统创建临时文件并永远不清理它们,最终导致失败,因为磁盘已满或者因为它们使用有限数量的数字作为唯一ID并且用完了可用的新ID(IIRC,它会翻倒在我们通常在运行磁盘空间之前通常打的65536个文件)

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

另一种方法可能是每天/每周设置一个小型计划任务,清理掉几天前的任何临时文件,并在半夜不知其他任何东西时运行它(如过夜构建)将会运行。

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

这一切都取决于你的磁盘快速填充的速度 - 你可能会发现,这是几个月的积累,而不是在短时间内击中你的东西,在这种情况下,你不需要一个非常积极的方法让事情顺利进行。

+0

谢谢杰森。我会研究一个小脚本,因为我很健忘(因此为什么编程)。 :-) – 2013-03-13 13:20:42

+1

原来我也很健忘:-) ......我今天早上检查了我们的服务器,并且设定了一个计划任务,每个星期六晚上11点30分运行,并运行一条2线批处理脚本:'del/F/S/Q“C:\ Documents and Settings \ TFSSERVICE \ Local Settings \ Temp \ *。*”' 'del/F/S/Q“C:\ WINDOWS \ Temp \ *。 *“' – 2013-03-13 15:07:02

+0

当我们的vdproj安装项目在TFS 2010构建服务器上失败时,我们遇到了这个问题。 Devenv在构建MSI时尝试创建临时文件。通过启动VS并在构建服务器上创建一个新的MSI项目/ vdproj,同时使用ProcMon并随后在构建服务的AppData中的CreateFile操作中发现了大量的* NAME COLLISION *结果,才发现了这个问题\ Local \ Temp文件夹。清除这个现在... – 2013-06-11 11:18:23

相关问题