2010-05-25 2 views
1

У нас есть узел HPC, который выполняет некоторые из наших задач. У меня есть задача в моем проекте .net, который запускает утилиту bcp на узле HPC и вывод запроса, который у меня запущен в 9 Мб.Задача BCP висит при выполнении

Когда узел HPC запускает эту задачу, вывод запроса сбрасывается в файл, а затем после того, как он сбрасывает около 5 МБ данных, он внезапно прекращает сбрасывать больше данных, и это происходит все время. (Пожалуйста, обратите внимание, что это не проблема с данными, поскольку каждый раз он не разбивается на определенную строку). это может быть или не иметь значения, но я дам данные на другой сервер, который имеет соответствующие разрешения.

Я выполнил команду с тем же запросом непосредственно на узле hpc и на других comps, и он дает правильный вывод.

Я бегу команды BCP следующим образом:

уаг processInfo = новый ProcessStartInfo ("Bcp.exe", аргумент) { RedirectStandardOutput = верно, RedirectStandardError = верно, CreateNoWindow = верно, UseShellExecute = false };

 var proc = new Process { StartInfo = processInfo, EnableRaisingEvents = true }; 
     proc.Exited += new EventHandler(bcp_log); 
     proc.Start(); 
     proc.WaitForExit(); 

Так что мой код на самом деле ждет каждого BCP задачи для запуска, прежде чем он идет вперед, как я называю это несколько раз.

FYI, чтобы напомнить вам снова, он терпит неудачу, когда мой о/р превышает определенное количество байтов в этом случае около 5 мб.

Любая помощь очень ценится.

P.S: Я хотел бы добавить утилиту BCP устанавливается на всех КВД узлах

ответ

2

Эй проблема здесь был узел ГПЦ не смог перенаправить вывод команды BCP на стандартный вывод. Стандартный выпуск имеет минимум в таких случаях, и в нашем случае, когда количество строк в нашей таблице превысило более 50000, оно больше не могло перенаправляться на стандартный вывод. при явной промывке стандартного выхода через определенные промежутки времени вы можете перенаправить на стандартный вывод без каких-либо проблем.

+0

Спасибо C. dragon. Ваш ответ тоже был полезен. – Baz1nga

2

ли он все еще нависают, если вы измените RedirectStandardOutput=true на RedirectStandardOutput=false?

Если вышеуказанные изменения позволяют избежать зависания, возможно, вы столкнулись с ситуацией тупика, которая может возникнуть при попытке перенаправить потоки stdout и stderr через класс .NET Process. В приведенной ниже статье MSDN объясняется это более подробно и приводится пример кода, чтобы читать stderr асинхронно и избегать условия взаимоблокировки.

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