2010-05-25 22 views
1

Nous avons un noeud HPC qui exécute certaines de nos tâches. J'ai une tâche dans mon projet .net qui donne un coup de pied à l'utilitaire bcp sur le nœud HPC et la sortie de la requête que j'ai exécutée en 9 Mo. Lorsque le noeud HPC exécute cette tâche, la sortie de la requête est déversée dans un fichier, puis, après le vidage de 5 Mo de données, il arrête soudainement de déverser d'autres données et cela arrive tout le temps. (S'il vous plaît noter que ce n'est pas un problème de données car il ne s'écrase pas sur une ligne particulière à chaque fois). Cela peut ou peut ne pas être important, mais je vider les données dans un serveur différent qui a des permissions adéquates.La tâche BCP se bloque lors de l'exécution

J'ai exécuté la commande avec la même requête directement sur le nœud hpc et sur d'autres comps et cela donne la bonne sortie.

Je suis en cours d'exécution de la commande bcp comme suit:

var ProcessInfo = new ProcessStartInfo ("bcp.exe", argument) { RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true, UseShellExecute = false }; Mon code attend donc que chaque tâche bcp soit exécutée avant de continuer, comme je l'appelle plusieurs fois.

FYI pour vous rappeler encore une fois il échoue seulement quand mon o/p dépasse un certain nombre d'octets dans ce cas environ 5mb.

Toute aide est très appréciée.

P.S: Je voudrais ajouter l'utilitaire bcp est installé sur tous les nœuds de calcul haute performance

Répondre

2

Hey ici le problème était le nœud HPC n'a pas été en mesure de rediriger la sortie de la commande bcp à la sortie standard. La sortie standard a un minimum dans de tels cas et dans notre cas, lorsque le nombre de lignes dans notre table dépassait plus de 50000, il n'était plus possible de rediriger vers la sortie standard. Sur rinçage explicite de la sortie standard à certains intervalles de temps, vous pouvez toujours rediriger vers la sortie standard sans aucun problème

+0

Merci C. dragon votre réponse a été utile aussi. – Baz1nga

2

-t-il encore se bloquer si vous changez RedirectStandardOutput=true-RedirectStandardOutput=false?

Si les modifications ci-dessus évitent le blocage, vous êtes probablement confronté à une situation de blocage pouvant survenir lors de la tentative de redirection des flux stdout et stderr via la classe .NET Process. L'article MSDN ci-dessous explique cela plus en détail et fournit un exemple de code pour lire stderr de manière asynchrone et éviter la condition de blocage.

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandarderror.aspx