2012-03-16 21 views
8

私はAzure Webロール上で実行されているサイトを持っており、web.configを変更してアプリケーションを強制的に再起動できますが、IISを再起動したい場合は、リモートデスクトップ経由で手動で行うべきではないと言われています。 Azureホストされたプロセスを再起動する必要があります。プロセスを再起動せずにAzure WebロールでIISを再起動することはできますか?

これはこの意見のあるarticle seems to agreeです。

私の問題は、プロセスの再起動に約10-15分かかることがあります。これを達成するためのより速い方法がありますか?

私は現在、すべての配備と管理を行うためにwindows.azure.comのUIを使用しています。

+0

は、なぜあなたは最初の場所でIISを再起動したいチェックすることが唯一の「観察」W3WPに必要がある場合は? – astaykov

+0

@astaykovコメントには長すぎるかもしれませんが、Umbraco Acceleratorを使用しており、ロールの再起動が必要な特定のアクションがあり、IISの再起動で同じことを達成できると確信しています。これに加えて、私たちは試験段階でropeyされているAzureを使用しているので、私は時々IISを再起動できるようにする必要があります。 – Digbyswift

+0

(インスタンスベースで)iisresetなどを実行したい状況が常にあります。 –

答えて

7

ここにいくつか指摘することがあります。役割が開始されると、IISConfiguratorという名前が使用され、IISにプログラムで呼び出して、サービス定義で定義されているアプリケーション、vdir、アプリケーションプールなどを作成します。これは起動時に一度実行されます。

Webサイトをホストするw3wp.exeプロセスは、コードの実行に使用するRoleEntryPointとはまったく別物であることに注意してください。したがって、単にRoleEntryPoint.RequestRecycle()を呼び出すことはできず、IISが再起動することを期待することはできません。

IISを再起動する必要がある場合は、プログラムで実行することをお勧めします。ここではWindowsのAzureの上でIISを再起動するための私の3ラインのソリューションです:。

var mgr = new ServerManager(); 
var azurePools = mgr.ApplicationPools.Where(p => Guid.TryParse(p.Name)); 
azurePools.ToList().ForEach(p => p.Recycle()); 

私は、私が興味を持っていたものにそれらをフィルタリングするためのアプリケーションプールは、Windows AzureのでGUIDをしているという知識を使用していますが今

各インスタンスのオンデマンドで高い状態からそのコードを実行する方法が必要です。これは多くのソリューションで共通の問題です。おそらく、IISを再起動する必要があるときはいつでも、各インスタンスでファイルまたはテーブルをポーリングしてそのコードを実行させることがあります。

+0

+1これはお勧めします。私たちの場合、RoleEntryPointで実行されるコードはありません。そのため、IISの再起動は私たちのために機能します。本番環境で上記のコードを実行することをお勧めしますか? –

+0

非常に有用で、多くのおかげです。 – Digbyswift

+0

このソリューションは、iis-reset、またはRDPを使用してIISプロセスを手動で再起動する方法とどのように違いますか?これはコードを介して行います。 あなたがリンクしている記事が真であれば、これはまったく違いはありません。それは? – ryancrawcour

0

あなたは、インスタンスへのリモートデスクトップを試みることができるとリサイクルは

+1

これはまさに私がすべきでないと言われてきたものです。手動でIISを再起動します。 – Digbyswift

+0

私はあなたがdev/testで動作していたと思っています。そして、あなたが何をしているかは本当に問題になりません。その投稿に示唆されているように役割が停止した場合は、MngtコンソールまたはAPIを使用して強制的に再起動する必要があります。 – ryancrawcour

2

は、なぜあなたは、インスタンスを再起動する必要がありますそのようにIIS?運用環境でメモリリークやその他の問題が発生していますか?運用環境では、インスタンスを再起動する本当に安全な唯一の方法は、Azure管理ポータルまたはAzure管理REST APIを使用する方法です。

dev/testデプロイメントで作業している場合は、Set-RoleInstanceStatus PowerShell Cmdletを使用して、RDPでインスタンスをオフラインにできます。この時点で、IISResetを実行したり、WWW公開サービスを再起動したり、web.configを変更したり、新しいdllをbinフォルダにコピーしたりすることができます。私たちはいつも、これらのことをdev/testインスタンスで緊急の問題のトラブルシューティングを行う必要がなければ、RDPを使用して本番インスタンスを作成することは決してありません。

+0

お役立ち情報ありがとうございます。 – Digbyswift

+0

私は間違いなくここに同意するでしょう。 IISプロセスをリサイクルする必要があるのはなぜかを知る必要があります。メモリリークが発生した場合は、修正する必要があります。 – ryancrawcour

1

あなたはURL http://yourname.azurewebsites.net

Azure App Service

のようなアプリケーションサービス「YOURNAME」としてアプリケーションを配備する場合は、Azureの管理のためのと同じ資格情報を使用してhttp://yourname.scm.azurewebsites.net に接続することができるはずです。 このURLには、それぞれのアプリケーションサービスのKuduがあります。

ツール>サポートを選択してから、分析>メトリック を選択すると、「Restart w3wp」をクリックできるはずです。

Kudu UI

アプリケーションが再び動作可能にするための時間は、私がテストした3つのアプリケーションのために、予想外に長くはありませんでした。

あなたは、あなたがhttps://youname.scm.azurewebsites.net/ProcessExplorer/

関連する問題