2017-09-27 23 views
0

Azureブロブストレージを使用してデータフィード(約1.5GBのデータを受信)からの受信メッセージを保存し、メッセージを介してトリガーされたメッセージを処理していますキュー(rabbitmq)。 - Azureのブロブで>ストアXMLファイル - >Azure Blobストレージ.NetクライアントライブラリとTCP接続(時間の経過)

コンシューマー・キューにブロブアドレスを公開 - >キューからブロブアドレスを読む - >メモリ

でダウンロードブロブを

プロデューサー:ここでセットアップがどのように見えるかです

private string GetBlobText(string containerName, string blobName) 
{ 
    // Parse the connection string and return a reference to the storage account. 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Settings.Default.DatafeedStorageConnString); 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
    CloudBlobContainer container = blobClient.GetContainerReference(containerName); 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); 
    return blockBlob.DownloadText(Encoding.UTF8); 
} 

このパイプラインはかなり頻繁ペースで実行されているので、我々はプログラムがソケットエラーを受信を開始時間をかけて(数週間)ことを参照してください。

そして、ここでは、各メッセージに対して実行されるダウンロードブロブ方法です。ここでは、トレースは次のとおりです。

Microsoft.WindowsAzure.Storage.StorageException: Unable to connect to the remote server ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 40.68.232.24:443 
    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.GetResponse() 
    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 695 
    --- End of inner exception stack trace --- 
    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 604 
    at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.DownloadRangeToStream(Stream target, Nullable`1 offset, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlob.cs:line 675 
    at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.DownloadToStream(Stream target, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlob.cs:line 234 
    at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.DownloadText(Encoding encoding, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 1279 

これは、私たちがblobClientを再利用しようとした接続を効率的に処理していないとの問題、のように思えるが、それは私たちを助けていません。これを解決するためにさらに何を検討すべきでしょうか?

答えて

1

Microsoft.WindowsAzure.Storage.StorageException:リモートサーバーに接続できません---> System.Net.WebException:リモートサーバーに接続できません---> System.Net.Sockets.SocketException:システムが十分なバッファスペースを欠いていたためか、キューが40.68.232.24:443いっぱいだったので(blob.am5prdstr02a.store.core.windows.net)私の理解パー

、ソケット操作を実行できませんでした、 TCP/IPポート枯渇の可能性があります。 Netstatを使ってネットワーク接続の状態や使用しているポートを問い合わせることができると私は考えました。詳細については、hereを参照して、この問題を診断する方法とその方法を調べることができます。

クライアントコンピュータでポート枯渇が発生した場合、クライアントTCP/IPソケット接続の一時的なポートの上限を増やし、クライアントのTCP/IPソケット接続タイムアウトを減らすことができます。 hereを参照してください。また、クライアントアプリケーションを異なるコンピュータ間で複数のインスタンスに拡張することもできます。

+0

異なるコンピュータ上でインスタンスを分割することによってスケーリングが間違いなく役立ちます。しかし、私たちが直面している問題は、TIME_WAITを使用したTCP接続がポートを使い果たしてしまうことです。 – maulik13

関連する問題