ServiceのVMでページングファイルがCドライブ(永続ストレージ)に配置されている件でトラブった経緯と調査、解決のために行ったことについて記載します。Serviceで、ExtraSmallのVM2個で運用しています。osFamily、osVersionは未指定です。Datacenter。メモリは768MBです。VMで処理が固まる1年ほど運用してきましたが、最近処理が増えたのか、処理が途中で止まる現象が発生し出しました。具体的には、メモリを多く使うような箇所でログが途切れている物理メモリの使用率は常に100%近くで、仮想メモリも1~2GB使っているここで思ったのは、「ExtraSmallはそろそろきついか。」、「もしかしてメモリリークしてる??」でした。メモリリークについてはメモリ使用量が増え続けてないので原因候補から外しました。「じゃあ、性能不足か。予算が、、」、しかしメモリ使用量は物理、仮想合わせても3GB程度、仮想メモリは4GB確保しているので、まだ余裕はあるはず、この状況で処理が止まるなんてことあるだろうか?う~ん。ここでふと、処理負荷時にディスク使用率が100%に張り付いているのを見つけました。HDDをそんなに酷使するような処理は行っていないので、なにがそんなに負荷を与えるの?と思いました。いえばAzureのVMには永続ストレージと一時ストレージがあって、永続ストレージはものすごく遅いんだっけ、もしかして永続ストレージを使っているから重い?、とさらに調査してみることに。VMにリモートデスクトップでログインしてパフォーマンスモニターで処理負荷時の様子を眺めました。すると以下のことがわかりました。CPU負荷は問題ないメモリ使用量もまだ余裕あるCドライブのディスク負荷がヤバイ処理が止まる原因はCドライブの過負荷のようです。Cドライブに負荷をかけているのはpagefile.sys。「そうか、物理メモリが少ないから常にページングファイルでガリガリやってる状態で、処理が立て込むとついには固まる、と。状況がわかってきました。一方で、VMには3つのドライブがあって、Cドライブ以外の負荷はまったくないような状況です。ここで疑問に思ったのはCドライブは永続ストレージ?それとも一時ストレージ?ということでした。永続ストレージなら改善の余地があるかもしれません。ServiceのVMにも当てはまるのか、情報が少なくはっきりしません。そこで実際に計測してみることにしました。以下が実際のベンチマーク結果です。(x64)この結果からDドライブが一時ストレージであることがわかりました。永続ドライブに配置するのか「そもそもなぜページングファイルを永続ストレージに配置するのか。ページングファイルは揮発性の情報だから、永続化する必要はないはずなのに。単なるミス?それとももともとこのような仕様?」MSに問い合わせてみようと思いましたが、インシデント代がもったない。不具合という確証もないし。そこでMSDNフォーラムに質問してみました。VMで、pagefile.sysがCドライブに配置されている件ページングファイルの場所をDドライブにしてみる試しに手動にてページングファイルの場所をDドライブにして様子を見てみると、メモリ使用量は相変わらずですが、ディスク負荷はほぼ解消しました。これで解決しそうです。ServiceのVMはOSが自動更新されます。これによりページングファイルもCドライブに戻ってしまいます。OSが自動更新されてもページングファイルをDドライブにできるような方法はないものか。質問の回答ばかりに頼っていてもしょうがないので、自分で回避方法を探してみることにしました。Servieにはスタートアップタスクという仕組みがあり、アプリケーション配置時にバッチスクリプトなどを実行することができます。NewRelicのインストールなどを行っていますし、ここでページングファイルの配置変更ができれば解決しそうです。ページングファイルの設定変更にはOS再起動が必要です。ネットで調べてみたところ、スタートアップタスクでOS再起動している人がいました。これはできるかも!やってみよう!ページングファイルの配置変更スクリプトやってみた結果、できました。以下がページングファイルの配置変更スクリプトをスタートアップタスクとして登録する手順です。ServiceDefinition.csdefにスタートアップタスクを登録します。changePagefileLoc.cmdをロールプロジェクト直下に追加します。「出力ディレクトリにコピー」を「常にコピー」にします。文字コードはASCII。changePagefileLoc.ps1をロールプロジェクト直下に追加します。「出力ディレクトリにコピー」を「常にコピー」にします。文字コードはUTF-8(BOM付き)。end"まとめ当面の回避策が見つかってよかったです。このような仕様になっているのかは謎のままです。ネットを探しても出てこない症状。Serviceを使っている人はずっとこのような構成のOSを使わされていたということになります。物理メモリが多いVMサイズではあまり問題になる状況はないかもしれませんが、ひとたびメモリ使用量が物理メモリを超えると、ページングによりCドライブが過負荷になり、しまいにはディスクアクセスエラーになり処理落ちするわけです。ExtraSmallのように常にメモリ不足のような場合は致命的な問題です。ExtraSmallは開発・テスト用とされていますからね。素直に上のサイズ使えということですかね。MSの人はこのことに気付いているのか、何か理由があってそうしているのか、聞いてみたいです。いう窓口ってないんですかね。はてなブログProASP.NET、PHPを中心に書いています。注目記事はてなブログをはじめよう!sumi2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。