2016-08-11 22 views
1

私は受け入れテストスイートのパフォーマンスを微調整しようとしています。パフォーマンスのボトルネックの大部分は、MSMQストレージファイルが低速のIO VMディスク上にあることが原因であることがわかりました。 MSMQ StorageフォルダをRAMディスクに移動しようとしましたが、Windows Server 2012 R2の "コンピュータの管理"を使用してプライベートキューを作成しようとすると、奇妙な理由でI/Oデバイスのエラーが発生します。それはWindows 7,8と10でうまく動作します。だから、私は実際にRAMディスク、MSMQ、Windows 2012 R2の問題を知りません。メモリ内のMSMQインスタンス

代わりに、MSMQファイルを高速ディスクまたはRAMディスクに保存することを心配するのではなく、新しいメモリ内MSMQコンポーネントインスタンスを作成し、メモリ内にすべてのキュー。

このコードは、受諾可能なnunitテストスイートのパフォーマンスを向上させる目的でのみ使用されることに注意してください。 ATMでは、完了までに2.5時間かかります(NServiceBUS、MSMQ、RavenDBを使用して4000回テスト)。私はすべてのコンポーネントをRAMDISKに移動することができましたが、これによりランタイムがほぼ40%減少しました。 RAMDISKでMSMQを使用してWindows 7,8,10でテストするとどうなるでしょうか。 Windows 2012 R2でも同じことをすると、すべてをRAMディスクに移動しても問題ありませんが、MSMQがRAMDISKで動作するようになります。奇妙なことに、MSMQがRAMDISKにないときにすべてのパフォーマンスが失われました。私はI/Oボトルネックが本当に悪いと思う!

アドバイスはありますか?

+0

SSDを購入!何を待っていますか? ;) –

+0

MSMQキューは、デフォルトでは* NOT *永続的です。デフォルトのオプションはメモリストレージです。作成時に明示的に永続化する必要があります。 –

+0

@MatíasFidemraizer:それほど簡単ではありません。私は大企業で働き、AWSサーバーインスタンスを使用して環境をホストしています。 Team CityはAWS VMでホストされており、前述のように、テストスイートは2.5時間実行されます。このVM上のディスクは150MB/sで読み書きできますが、このサーバー上のRAMディスクでは5000MB/sが得られます – FaNIX

答えて

1

私はそれを理解しました。私が使用していたramdiskドライバは、ストレージストアでWin 2012 R2をサポートしていません。それは他のすべてのためにうまく動作しますが、何らかの理由でMSMQはそれを好まなかったのです。そこで私は別のramdiskドライバ(Primo Ramdisk Server Edition)を試してみました。そして、msmqがやっと働きました。

私は、MSMQファイルの場所を移動するには、次を使用:今、私のテストスイートを実行する

$MSMQStoragePath = "P:\MSMQ" 
$MessageFilePath = "$MSMQStoragePath\MessageFiles" 
$XactLogsPath = "$MSMQStoragePath\XactLogs" 
$StoragePath = "$MSMQStoragePath\Storage" 
Write-Host "$MessageFilePath - $XactLogsPath - $StoragePath" 
$MSMQPath = Split-Path -Path $MessageFilePath -Parent 
New-Item -ItemType Directory -Force -Path "$MessageFilePath\LQS" -Verbose 
New-Item -ItemType Directory -Force -Path $XactLogsPath -Verbose 
New-Item -ItemType Directory -Force -Path $StoragePath -Verbose 
icacls $MSMQPath /grant "NT SERVICE\MSMQ:(OI)(F)" 
icacls "$MessageFilePath\LQS" /grant "NT SERVICE\MSMQ:(OI)(F)" 
Set-MsmqQueueManager -MessageQuota 10485760 -JournalQuota 10485760 -MsgStore $MessageFilePath -MsgLogStore $XactLogsPath -TransactionLogStore $StoragePath -Verbose -Confirm:$false 
Start-Service MSMQ -Verbose 

はダウン150minから、67minを取ります!