Azure Filesパフォーマンスの問題のトラブルシューティング
注:
この記事で参照されている CentOS は Linux ディストリビューションであり、End Of Life (EOL) に到達します。 使用を検討し、それに応じて計画します。 詳細については、「 CentOS End Of Life ガイダンス」を参照してください。
この記事では、Azure ファイル共有のパフォーマンスに関連する一般的な問題の一覧と、考えられる原因と回避策について説明します。 このトラブルシューティング ガイドから最大限の価値を得るには、まず「Azure Filesパフォーマンスについて」を読むことをお勧めします。
適用対象
ファイル共有の種類 | SMB | Nfs |
---|---|---|
標準ファイル共有 (GPv2)、LRS/ZRS | ||
標準ファイル共有 (GPv2)、GRS/GZRS | ||
Premium ファイル共有 (FileStorage)、LRS/ZRS |
一般的なパフォーマンスのトラブルシューティング
まず、パフォーマンスの問題が発生する可能性がある一般的な理由を除外します。
古いオペレーティング システムを実行している
クライアント仮想マシン (VM) が R2 Windows 8.1または Windows Server 2012、または古い Linux ディストリビューションまたはカーネルを実行している場合、Azure ファイル共有にアクセスするときにパフォーマンスの問題が発生する可能性があります。 クライアント OS をアップグレードするか、以下の修正プログラムを適用します。
R2 のWindows 8.1とWindows Server 2012に関する考慮事項
Windows 8.1または R2 Windows Server 2012を実行しているクライアントでは、I/O 集中型ワークロードの Azure ファイル共有にアクセスするときに予想よりも長い待機時間が発生する可能性があります。 KB3114025修正プログラムがインストールされていることを確認します。 この修正プログラムは、作成ハンドルと閉じるハンドルのパフォーマンスを向上させます。
次のスクリプトを実行して、修正プログラムがインストールされているかどうかをチェックできます。
reg query HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\Policies
修正プログラムがインストールされている場合は、次の出力が表示されます。
HKEY_Local_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\Policies {96c345ef-3cac-477b-8fcd-bea1a564241c} REG_DWORD 0x1
注:
Azure Marketplace Windows Server 2012 R2 イメージには、2015 年 12 月から修正プログラム KB3114025が既定でインストールされています。
ワークロードの調整中
要求は、1 秒あたりの I/O 操作 (IOPS)、イングレス、またはエグレスの制限に達すると調整されます。 たとえば、クライアントがベースライン IOPS を超えると、Azure Files サービスによって調整されます。 調整すると、クライアントのパフォーマンスが低下する可能性があります。
標準ファイル共有と Premium ファイル共有の制限については、「 ファイル共有とファイル スケール ターゲット」を参照してください。 ワークロードによっては、Standard から Premium Azure ファイル共有に移行することで、調整を回避できることがよくあります。
共有レベルまたはストレージ アカウント レベルでの調整によって待機時間が長く、スループットが低く、一般的なパフォーマンスの問題が発生する方法の詳細については、「 共有またはストレージ アカウントの調整中」を参照してください。
待機時間が長い、スループットが低い、または IOPS が低い
原因 1: 共有アカウントまたはストレージ アカウントが調整中
共有アカウントまたはストレージ アカウントが調整されているかどうかを確認するには、ポータルで Azure メトリックにアクセスして使用できます。 また、共有が調整されているか、調整しようとしている場合に通知するアラートを作成することもできます。 アラートを作成したAzure Filesのトラブルシューティングに関するページを参照してください。
重要
大きなファイル共有 (LFS) が有効になっている標準ストレージ アカウントでは、アカウント レベルで調整が行われます。 LFSが有効になっていない Premium ファイル共有と標準ファイル共有の場合、共有レベルで調整が行われます。
Azure portalで、ストレージ アカウントに移動します。
左側のウィンドウの [ 監視] で、[ メトリック] を選択します。
ストレージ アカウント スコープのメトリック名前空間として [ ファイル ] を選択します。
メトリックとして [ トランザクション] を 選択します。
応答の種類のフィルターを追加し、チェックして、要求が調整されているかどうかを確認します。
大きなファイル共有が有効になっていない標準ファイル共有の場合、要求が共有レベルで調整された場合、次の応答の種類がログに記録されます。
- SuccessWithThrottling
- SuccessWithShareIopsThrottling
- ClientShareIopsThrottlingError
大きなファイル共有が有効になっている標準ファイル共有の場合、要求がクライアント アカウント レベルで調整された場合、次の応答の種類がログに記録されます。
- ClientAccountRequestThrottlingError
- ClientAccountBandwidthThrottlingError
Premium ファイル共有の場合、要求が共有レベルで調整された場合、次の応答の種類がログに記録されます。
- SuccessWithShareEgressThrottling
- SuccessWithShareIngressThrottling
- SuccessWithShareIopsThrottling
- ClientShareEgressThrottlingError
- ClientShareIngressThrottlingError
- ClientShareIopsThrottlingError
調整された要求が Kerberos で認証された場合、次のような認証プロトコルを示すプレフィックスが表示されることがあります。
- KerberosSuccessWithShareEgressThrottling
- KerberosSuccessWithShareIngressThrottling
各応答の種類の詳細については、「 メトリック ディメンション」を参照してください。
ソリューション
- 標準のファイル共有を使用している場合は、ストレージ アカウントで 大きなファイル共有を有効に し、 ファイル共有クォータのサイズを大きくして、大きなファイル共有のサポートを利用します。 大きなファイル共有では、優れた IOPS と帯域幅の制限がサポートされます。 詳細については、「Azure Filesスケーラビリティとパフォーマンスのターゲット」を参照してください。
- Premium ファイル共有を使用している場合は、プロビジョニングされたファイル共有サイズを増やして IOPS 制限を増やします。 詳細については、「 Premium ファイル共有のプロビジョニングについて」を参照してください。
原因 2: メタデータまたは名前空間の負荷の高いワークロード
要求の大部分がメタデータ中心 (、openfile
、closefile
、queryinfo
、または querydirectory
などcreatefile
) の場合、待機時間は読み取り/書き込み操作の待機時間よりも悪くなります。
ほとんどの要求がメタデータ中心であるかどうかを判断するには、前に「原因 1」で説明したように、手順 1 から 4 に従って開始します。 手順 5 では、 Response 型のフィルターを追加する代わりに、 API 名のプロパティ フィルターを追加します。
回避策
メタデータ操作の数を減らすためにアプリケーションを変更できるかどうかを確認します。
ファイル共有を同じストレージ アカウント内の複数のファイル共有に分割します。
ファイル共有に仮想ハード ディスク (VHD) を追加し、クライアントから VHD をマウントして、データに対してファイル操作を実行します。 このアプローチは、複数のリーダーを持ち、ライターを持たない単一のライター/リーダーシナリオまたはシナリオに適しています。 ファイル システムはAzure Filesではなくクライアントによって所有されているため、メタデータ操作をローカルにできます。 セットアップでは、ローカル直接接続ストレージと同様のパフォーマンスが提供されます。 ただし、データは VHD 内にあるため、REST API などの SMB マウント以外の方法や、Azure portalを介してアクセスすることはできません。
- Azure ファイル共有にアクセスする必要があるマシンから、ストレージ アカウント キーを使用してファイル共有をマウントし、使用可能なネットワーク ドライブ (Z:など) にマップします。
- [ディスクの管理] に移動し、[アクションの作成 VHD] を選択します>。
- [ 場所] を Azure ファイル共有のマップ先のネットワーク ドライブに設定し、必要に応じて [仮想ハード ディスク サイズ ] を設定し、[ 固定サイズ] を選択します。
- [OK] を選択します。 VHD の作成が完了すると、自動的にマウントされ、新しい未割り当てディスクが表示されます。
- 新しい不明なディスクを右クリックし、[ ディスクの初期化] を選択します。
- 未割り当て領域を右クリックし、 新しい単純ボリュームを作成します。
- 読み取り/書き込みアクセス権を持つこの VHD を表す新しいドライブ文字が ディスク管理 に表示されます (例: E:)。 エクスプローラーでは、マップされた Azure ファイル共有のネットワーク ドライブ (この例では Z: ) に新しい VHD が表示されます。 明確にするために、2 つのドライブ文字が存在する必要があります。Z:の標準の Azure ファイル共有ネットワーク マッピングと、E: ドライブ上の VHD マッピングです。
- VHD マップ ドライブ (E:) 上のファイルに対する大量のメタデータ操作と Azure ファイル共有のマップされたドライブ (Z:) のパフォーマンスが大幅に向上する必要があります。 必要に応じて、マップされたネットワーク ドライブ (Z:) を切断し、マウントされた VHD ドライブ (E:) にアクセスできます。
- Windows クライアントに VHD をマウントするには、PowerShell コマンドレットを
Mount-DiskImage
使用することもできます。 - Linux に VHD をマウントするには、Linux ディストリビューションのドキュメントを参照してください。 例を次に示します。
原因 3: シングル スレッド アプリケーション
使用しているアプリケーションがシングル スレッドの場合、この設定により、プロビジョニングされた共有サイズに応じて、可能な最大スループットよりも IOPS スループットが大幅に低下する可能性があります。
ソリューション
- スレッドの数を増やすことで、アプリケーションの並列処理を増やします。
- 並列処理が可能なアプリケーションに切り替えます。 たとえば、コピー操作の場合は、Windows クライアントの AzCopy または RoboCopy、Linux クライアントの 並列 コマンドを使用できます。
原因 4: SMB チャネルの数が 4 を超える
SMB MultiChannel を使用していて、チャネル数が 4 を超えると、パフォーマンスが低下します。 接続数が 4 を超えているかどうかを判断するには、PowerShell コマンドレット get-SmbClientConfiguration
を使用して現在の接続数の設定を表示します。
ソリューション
合計チャネル数が 4 を超えないように、SMB の NIC ごとの Windows 設定を設定します。 たとえば、NIC が 2 つある場合は、次の PowerShell コマンドレット Set-SmbClientConfiguration -ConnectionCountPerRssNetworkInterface 2
を使用して、NIC あたりの最大値を 2 に設定できます。
原因 5: 先読みサイズが小さすぎます (NFS のみ)
Linux カーネル バージョン 5.4 以降、Linux NFS クライアントは既定値 read_ahead_kb
の 128 kibibytes (KiB) を使用します。 この値が小さいと、大きなファイルの読み取りスループットが低下する可能性があります。
ソリューション
カーネル パラメーターの値を read_ahead_kb
15 メガバイト (MiB) に増やすことをお勧めします。 この値を変更するには、Linux カーネル デバイス マネージャーである udev にルールを追加して、先読みサイズを永続的に設定します。 次の手順を実行します。
テキスト エディターで、次のテキストを入力して保存して、 /etc/udev/rules.d/99-nfs.rules ファイルを作成します。
SUBSYSTEM=="bdi" \ , ACTION=="add" \ , PROGRAM="/usr/bin/awk -v bdi=$kernel 'BEGIN{ret=1} {if ($4 == bdi) {ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes" \ , ATTR{read_ahead_kb}="15360"
コンソールで udev ルールを適用するには、 udevadm コマンドをスーパーユーザーとして実行し、ルール ファイルやその他のデータベースを再読み込みします。 udev で新しいファイルを認識するには、このコマンドを 1 回だけ実行する必要があります。
sudo udevadm control --reload
要求の待機時間が非常に長い
原因
クライアント VM は、ファイル共有とは異なるリージョンに配置できます。 待機時間が長いその他の理由は、クライアントまたはネットワークによって発生する待機時間が原因である可能性があります。
ソリューション
- ファイル共有と同じリージョンにある VM からアプリケーションを実行します。
- ストレージ アカウントについては、Azure portalの Azure Monitor を使用してトランザクション メトリック SuccessE2ELatency と SuccessServerLatency を確認します。 SuccessE2ELatency と SuccessServerLatency メトリックの値の大きな違いは、ネットワークまたはクライアントによって発生する可能性のある待機時間を示しています。 「Azure Files監視データ リファレンス」の「トランザクション メトリック」を参照してください。
クライアントがネットワークでサポートされている最大スループットを達成できない
原因
考えられる原因の 1 つは、標準ファイル共有に対する SMB マルチチャネル サポートの欠如です。 現在、Azure Filesでは標準ファイル共有に対して 1 つのチャネルのみがサポートされているため、クライアント VM からサーバーへの接続は 1 つだけです。 この 1 つの接続はクライアント VM 上の 1 つのコアにペギングされるため、VM から達成できる最大スループットは 1 つのコアによってバインドされます。
回避策
- Premium ファイル共有の場合は、 SMB マルチチャネルを有効にします。
- より大きなコアを持つ VM を取得すると、スループットが向上する可能性があります。
- 複数の VM からクライアント アプリケーションを実行すると、スループットが向上します。
- 可能な場合は REST API を使用します。
- NFS Azure ファイル共有の場合は、
nconnect
を使用できます。 nconnect を使用した NFS Azure ファイル共有のパフォーマンスの向上に関するページを参照してください。
Linux VM にマウントされている Azure ファイル共有のパフォーマンスが低下する
原因 1: キャッシュ
パフォーマンスが低下する原因の 1 つは、キャッシュを無効にすることです。 キャッシュは、ファイルに繰り返しアクセスする場合に役立ちます。 それ以外の場合は、オーバーヘッドになる可能性があります。 キャッシュを無効にする前に、キャッシュを使用しているかどうかを確認します。
原因 1 の解決策
キャッシュが無効かどうかをチェックするには、エントリをcache=
探します。
Cache=none
は、キャッシュが無効になっていることを示します。 既定の mount コマンドを使用するか、mount コマンドにオプションを cache=strict
明示的に追加して共有を再マウントし、既定のキャッシュまたは "strict" キャッシュ モードが有効になっていることを確認します。
一部のシナリオでは、 serverino
マウント オプションを使用すると、 ls
すべてのディレクトリ エントリに対してコマンドが実行 stat
される可能性があります。 この動作により、大規模なディレクトリを一覧表示するときにパフォーマンスが低下します。 /etc/fstab エントリでマウント オプションをチェックできます。
//azureuser.file.core.windows.net/cifs /cifs cifs vers=2.1,serverino,username=xxx,password=xxx,dir_mode=0777,file_mode=0777
コマンドを実行sudo mount | grep cifs
して出力を確認することで、正しいオプションが使用されているかどうかをチェックすることもできます。 出力例を次に示します。
//azureuser.file.core.windows.net/cifs on /cifs type cifs (rw,relatime,vers=2.1,sec=ntlmssp,cache=strict,username=xxx,domain=X,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.10.1,file_mode=0777, dir_mode=0777,persistenthandles,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,actimeo=1)
または オプションが存在しない場合は、ドキュメントの mount コマンドを実行して、Azure Filesマウントを解除してマウントし直します。serverino
cache=strict
次に、 /etc/fstab エントリに正しいオプションがあることを再確認します。
原因 2: 調整
調整が発生し、要求がキューに送信されている可能性があります。 これを確認するには、 Azure Monitor で Azure Storage メトリックを利用します。 また、共有が調整されているか、調整が予定されているかを通知するアラートを作成することもできます。 アラートを作成したAzure Filesのトラブルシューティングに関するページを参照してください。
原因 2 の解決策
アプリがAzure Filesスケール ターゲット内にあることを確認します。 標準の Azure ファイル共有を使用している場合は、Premium への切り替えを検討してください。
Linux クライアントのスループットが Windows クライアントのスループットよりも低い
原因
これは、Linux での SMB クライアントの実装に関する既知の問題です。
回避策
- 複数の VM に負荷を分散します。
- 同じ VM で、オプションで複数のマウント ポイントを
nosharesock
使用し、これらのマウント ポイント全体に負荷を分散します。 - Linux では、すべての
fsync
呼び出しで SMB フラッシュをnostrictsync
強制しないようにオプションを使用してマウントしてみてください。 Azure Filesの場合、このオプションはデータの整合性に干渉しませんが、ディレクトリ一覧 (ls -l
コマンド) で古いファイル メタデータが発生する可能性があります。 コマンドを使用してファイル メタデータにstat
直接クエリを実行すると、最新のファイル メタデータが返されます。
広範なオープン/クローズ操作を伴うメタデータ負荷の高いワークロードの待機時間が長い
原因
ディレクトリ リースのサポートが不足しています。
回避策
- 可能であれば、短時間で同じディレクトリで過剰な開閉ハンドルを使用しないようにしてください。
- Linux VM の場合は、マウント オプションとして を指定して、ディレクトリ エントリのキャッシュ タイムアウトを
actimeo=<sec>
増やします。 既定では、タイムアウトは 1 秒であるため、30 秒などの大きな値が役立つ場合があります。 - CentOS Linux または Red Hat Enterprise Linux (RHEL) VM の場合は、システムを CentOS Linux 8.2 または RHEL 8.2 にアップグレードします。 その他の Linux ディストリビューションの場合は、カーネルを 5.0 以降にアップグレードします。
ファイルとフォルダーの列挙が遅い
原因
この問題は、大きなディレクトリに対してクライアント マシンに十分なキャッシュがない場合に発生する可能性があります。
ソリューション
この問題を解決するには、レジストリ値を DirectoryCacheEntrySizeMax
調整して、クライアント コンピューターで大規模なディレクトリ一覧をキャッシュできるようにします。
- 場所:
HKEY_LOCAL_MACHINE\System\CCS\Services\Lanmanworkstation\Parameters
- 値名:
DirectoryCacheEntrySizeMax
- 値の種類: DWORD
たとえば、 に 0x100000
設定し、パフォーマンスが向上するかどうかを確認できます。
Azure ファイル共有との間でのファイルのコピーが遅い
Azure Files サービスにファイルを転送しようとすると、パフォーマンスが低下することがあります。 特定の最小 I/O サイズ要件がない場合は、最適なパフォーマンスを得るには、I/O サイズとして 1 MiB を使用することをお勧めします。
Windows のAzure Filesとの間でのファイルのコピーが遅い
過剰な DirectoryOpen/DirectoryClose 呼び出し
原因
DirectoryOpen/DirectoryClose 呼び出しの数が上位の API 呼び出しの中にあり、クライアントがその多くの呼び出しを行うとは思わない場合は、Azure クライアント VM にインストールされているウイルス対策ソフトウェアによって問題が発生する可能性があります。
回避策
この問題の修正プログラムは、 4 月の Windows プラットフォーム更新プログラムで入手できます。
SMB マルチチャネルがトリガーされていない
原因
再マウントなしの SMB マルチチャネル構成設定に対する最近の変更。
ソリューション
- Windows SMB クライアントまたはアカウントの SMB マルチチャネル構成設定に変更が加えられたら、共有のマウントを解除し、60 秒間待ってから、共有を再マウントしてマルチチャネルをトリガーする必要があります。
- Windows クライアント OS の場合、キューの深さが高い IO 負荷を生成します (たとえば、ファイルをコピーして SMB マルチチャネルをトリガーするなど)。 サーバー OS の場合、SMB マルチチャネルは QD=1 でトリガーされます。つまり、共有への IO を開始するとすぐに実行されます。
ファイルを解凍するときのパフォーマンスが低下する
使用される正確な圧縮方法と解凍操作によっては、圧縮解除操作がローカル ディスクよりも Azure ファイル共有で実行される速度が遅くなる場合があります。 これは、圧縮解除ツールが圧縮アーカイブの圧縮解除を実行するプロセスで多数のメタデータ操作を実行するためです。 最適なパフォーマンスを得るには、圧縮されたアーカイブを Azure ファイル共有からローカル ディスクにコピーし、そこで解凍してから、Robocopy (または AzCopy) などのコピー ツールを使用して Azure ファイル共有にコピーバックすることをお勧めします。 Robocopy のようなコピー ツールを使用すると、複数のスレッドを使用してデータを並列にコピーすることで、ローカル ディスクに対するAzure Filesのメタデータ操作のパフォーマンスの低下を補正できます。
ファイル共有でホストされている Web サイトでの待機時間が長い
原因
ファイル共有のファイル変更通知の数が多い場合、待機時間が長くなる可能性があります。 これは通常、深い入れ子になったディレクトリ構造を持つファイル共有でホストされている Web サイトで発生します。 一般的なシナリオは、IIS でホストされている Web アプリケーションで、既定の構成でディレクトリごとにファイル変更通知が設定されます。 クライアントが登録されている共有の各変更 (ReadDirectoryChangesW) は、ファイル サービスからクライアントに変更通知をプッシュし、システム リソースを受け取り、変更の数によって問題が悪化します。 これにより、共有の調整が発生し、クライアント側の待機時間が長くなる可能性があります。
確認するには、ポータルで Azure メトリックを使用できます。
- Azure portalで、ストレージ アカウントに移動します。
- 左側のメニューの [ 監視] で、[ メトリック] を選択します。
- ストレージ アカウント スコープのメトリック名前空間として [ ファイル ] を選択します。
- メトリックとして [ トランザクション] を 選択します。
- ResponseType と チェック のフィルターを追加して、応答コード
SuccessWithThrottling
が (SMB または NFS の場合) またはClientThrottlingError
(REST の場合) の要求があるかどうかを確認します。
ソリューション
ファイル変更通知が使用されていない場合は、ファイル変更通知を無効にします (推奨)。
- FCNMode を更新して、ファイル変更通知を無効にします。
- レジストリで設定
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\ConfigPollMilliSeconds
して IIS Worker Process (W3WP) ポーリング間隔を 0 に更新し、W3WP プロセスを再起動します。 この設定の詳細については、「 IIS の多くの部分で使用される一般的なレジストリ キー」を参照してください。
ファイル変更通知ポーリング間隔の頻度を増やして、ボリュームを減らします。
要件に基づいて、W3WP ワーカー プロセスのポーリング間隔を高い値 (10 分や 30 分など) に更新します。 レジストリに設定
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\ConfigPollMilliSeconds
し、W3WP プロセスを再起動します。Web サイトのマップされた物理ディレクトリに入れ子になったディレクトリ構造がある場合は、ファイル変更通知のスコープを制限して通知量を減らすことができます。 既定では、IIS では、仮想ディレクトリがマップされる物理ディレクトリ内の Web.config ファイルと、その物理ディレクトリ内のすべての子ディレクトリの構成が使用されます。 子ディレクトリで Web.config ファイルを使用しない場合は、仮想ディレクトリの 属性に を
allowSubDirConfig
指定false
します。 詳細については、 こちらを参照してください。Web.Configの IIS 仮想ディレクトリ
allowSubDirConfig
設定を に設定して、false
マップされた物理子ディレクトリをスコープから除外します。
関連項目
- Azure Filesのトラブルシューティング
- アラートを作成してAzure Filesのトラブルシューティングを行う
- Azure Filesのパフォーマンスを理解する
- Microsoft Azure でのアラートの概要
- Azure Files FAQ
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示