2013-03-12 68 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

相關問題