2012-03-16 168 views
8

我有一個網站在Azure web角色上運行,我可以通過修改web.config來強制重新啓動應用程序,但是如果我想重新啓動IIS,我被告知我不應該通過遠程桌面手動執行此操作,而是我應該重新啓動Azure託管的進程。是否可以在不重新啓動進程的情況下重新啓動Azure Web角色上的IIS?

This article seems to agree with this opinion。

我的問題是,重新啓動一個進程可能需要近10-15分鐘才能重新啓動。有沒有更快的方法來實現這一點?

我目前使用windows.azure.com用戶界面來執行所有的部署和管理。

+0

爲什麼你要重新啓動在首位的IIS? – astaykov 2012-03-16 10:53:48

+0

@astaykov可能太長以至於無法放入註釋,但我們使用的是Umbraco Accelerator,並且存在某些需要重新啓動角色的操作,並且我相信我可以通過IIS重新啓動實現同樣的操作。除此之外,我們正在使用在測試階段使用的檢查Azure,因此我需要偶爾能夠重新啓動IIS。 – Digbyswift 2012-03-16 12:30:05

+0

總有些情況下,您想要(以實例爲基礎)執行iisreset或類似操作。 – 2012-09-26 08:38:49

回答

7

在這裏指出幾件事情。當您的角色啓動時,它會使用一些名爲IISConfigurator的程序以編程方式向IIS調用,並創建如服務定義中定義的應用程序,vdirs,應用程序池等。這是在啓動時完成的。

記住,承載您的網站的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()); 

我現在用的是知識應用程序池的GUID在Windows Azure的將它們過濾到我感興趣的那些

現在,您只需要一種方法來在每個實例上按需提升狀態運行代碼。這是很多解決方案的常見問題。也許每當需要重新啓動IIS時,每個實例都會輪詢文件或表以獲取信號以運行該代碼。

+0

+1這是很好的知道。在我們的例子中,我們沒有任何在RoleEntryPoint中運行的代碼。這就是爲什麼重新啓動IIS適合我們的原因。你會建議在生產實例中運行上面的代碼嗎? – 2012-03-16 18:56:23

+0

非常有用,非常感謝。 – Digbyswift 2012-03-19 09:17:42

+0

該解決方案與iis-reset或RDP手動重啓IIS進程有何不同?這只是通過代碼來完成的。 如果您鏈接的文章是真實的,那麼這完全沒有區別。會嗎? – ryancrawcour 2012-03-22 07:50:42

0

你可以嘗試遠程桌面實例和回收IIS這樣

+1

這正是我被告知我不應該這樣做 - 手動重新啓動IIS。 – Digbyswift 2012-03-16 09:57:21

+0

我還以爲你在開發/測試中運行,然後它確實無所謂。如果該角色按照該帖子中的建議死亡,那麼您將不得不通過Mngt控制檯或API重新啓動它。 – ryancrawcour 2012-03-22 07:52:43

2

爲什麼你需要重新啓動實例?您在生產部署中是否遇到內存泄漏或其他問題?在生產環境中,唯一真正安全的重啓實例的方式是通過Azure管理門戶或Azure管理REST API。

如果你和一個開發/測試部署工作,你可以在RDP並使用Set-RoleInstanceStatus PowerShell命令把你的實例脫機。此時,您可以自由運行IISReset,重新啓動WWW發佈服務,修改web.config,將新dll複製到bin文件夾等等。我們隨時使用我們的開發/測試實例執行這些操作,而無需使用問題,但我們絕不會通過RDP修改我們的生產實例,除非我們需要解決緊急問題。

+0

有用的信息謝謝。 – Digbyswift 2012-03-16 12:31:34

+0

我肯定會在這裏同意。你需要找出爲什麼你需要回收你的IIS進程。如果你有內存泄漏,那麼你將要解決這個問題! – ryancrawcour 2012-03-22 07:51:27

1

如果您部署應用程序作爲應用服務「YOURNAME」像

Azure App Service

網址爲http://yourname.azurewebsites.net 你應該能夠使用相同的憑據作爲Azure管理連接到http://yourname.scm.azurewebsites.net 。 在這個網址找到Kudu爲各自的應用程序服務。

如果您在菜單中選擇工具>支持,然後選擇分析>度量 ,那麼您應該可以點擊「重新啓動w3wp」。

Kudu UI

時間的應用程序,以便再次運行並不意外長,我測試3個應用程序。

如果你只需要以「守」 W3WP,那麼你可以檢查https://youname.scm.azurewebsites.net/ProcessExplorer/

相關問題