1

我们有一个 HPC 节点,可以在其中运行我们的一些任务。我的 .net 项目中有一个任务,它在 HPC 节点上启动 bcp 实用程序,并且我运行的查询输出达到 9 Mb。

当 HPC 节点运行这个任务时,查询的输出被转储到一个文件中,然后在它转储大约 5mb 的数据后,它突然停止转储任何更多的数据,这种情况一直都在发生。(请注意,这不是任何数据问题,因为它不会每次都在特定行上崩溃)。这可能重要也可能不重要,但我将数据转储到具有足够权限集的不同服务器中。

我已经直接在 hpc 节点和其他 comps 上运行具有相同查询的命令,它给出了正确的输出。

我正在运行 bcp 命令,如下所示:

var processInfo = new ProcessStartInfo("bcp.exe", argument) { RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true, UseShellExecute = false };

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

因此,我的代码实际上会等待每个 bcp 任务运行,因为我多次调用它。

仅供参考,再次提醒您,它仅在我的 o/p 超过一定字节数(在这种情况下约为 5mb)时才会失败。

任何帮助深表感谢。

PS:我想添加 bcp 实用程序安装在所有 hpc 节点上

4

2 回答 2

2

RedirectStandardOutput=true如果您更改为 ,它仍然挂起RedirectStandardOutput=false吗?

如果上述更改避免了挂起,则您可能会遇到在尝试通过 .NET Process 类重定向 stdout 和 stderr 流时可能发生的死锁情况。下面的 MSDN 文章更详细地解释了这一点,并提供了异步读取 stderr 并避免死锁情况的示例代码。

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

于 2010-05-25T22:34:38.973 回答
2

嘿,这里的问题是 HPC 节点无法将 bcp 命令的输出重定向到标准输出。在这种情况下,标准输出有最小值,在我们的例子中,当我们的表中的行数超过 50000 时,它不再能够重定向到标准输出。在以特定时间间隔显式刷新标准输出时,您仍然可以毫无问题地重定向到标准输出

于 2010-07-13T05:07:50.127 回答