1

タスクの一部を実行するHPCノードがあります。.netプロジェクトに、HPCノードでbcpユーティリティを起動するタスクがあり、クエリの出力は9Mbに達します。

HPCノードがこのタスクを実行すると、クエリの出力がファイルにダンプされ、約5 MBのデータがダンプされた後、それ以上のデータのダンプが突然停止します。これは常に発生します。(毎回特定の行でクラッシュしないため、これはデータの問題ではないことに注意してください)。これは重要な場合とそうでない場合がありますが、適切な権限が設定されている別のサーバーにデータをダンプします。

同じクエリを使用して、hpcノードと他のコンプで直接コマンドを実行しましたが、正しい出力が得られます。

私は次のように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ますか?

上記の変更によってハングが回避される場合は、.NETProcessクラスを介して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 に答える