Fuite mémoire sur serveur de build avec TFS 2010 non SP1
Lorsque l’on met en place un serveur de build avec TFS, on arrive vite à avoir plusieurs dizaines de builds par jour.
Je me suis récemment rendu dans une entreprise où un serveur de build TFS 2010 a été mis en place. Lors d’une discussion avec un membre de l’équipe, on m’a remonté un problème avec ce serveur. Après plusieurs jours d’utilisation, le serveur devenait inutilisable, il fallait alors rebooter : environ 1 fois par semaine.
Ce souci est un problème connu, il existe une fuite mémoire sur le serveur de build TFS 2010. Ce problème a été corrigé avec le SP1 de TFS 2010.
Plus d’informations ici : Memory leaks and performance drop on TFS 2010 Build Service under heavy load et le KB se trouve ici : Microsoft Team Foundation Server 2010 Service Pack 1.
Si toutefois vous ne pouvez pas installer le SP1, il existe une solution de contournement : relancer le service de build quotidiennement.
Tout d’abord, il faut créer un fichier bat permettant de relancer le service. Celui-ci doit contenir ces lignes :
net stop TFSBuildServiceHost
net start TFSBuildServiceHost
Ensuite, il faut créer une tâche planifiée Windows exécutant quotidiennement le script.

Attention, n’oubliez pas de cocher l’option “Run wether user is logged on or not” et la case “Run with highest privileges”.
Bien sûr, ce n’est pas idéal. Si un build est en cours, celui-ci va échouer. Il faut donc planifier la tâche lorsqu’aucune activité n’a lieu.
Il s’agit d’une solution que j’ai mise en place avant la disponibilité du SP1.
Et vous, avez-vous déjà rencontré ce problème avec le serveur de build TFS 2010 ? Avez-vous eu d’autres soucis avec celui-ci ?
EDIT :
Attention, comme me l’a fait remarquer coq, si le fichier n’est pas protégé en modification, il est facile d’avoir une élévation de privilège. Il est possible de modifier le workflow du build et ainsi modifier le fichier bat : un utilisateur peut donc executer un script en tant qu’administrateur. Une solution propre serait donc d’utiliser un compte spécifique ayant juste le droit de relancer ce service.