為什麼重新啟動我的 Azure WebApps 實例會導致幾個小時的停機時間?
我的 Azure WebApps 實例(在 Tomcat、Linux 上執行)已經執行了 9 個月。最近有幾個小時的停機時間,根據 Microsoft 支持工程師的說法,這是由以下原因引起的:
在此實例上重新啟動儲存文件伺服器,並且在您手動重新啟動之前,Web 應用程序無法啟動,Web 應用程序卡住了。為了避免這個孩子的問題,你可以堅持最佳實踐
- 始終使用 2 個實例
這些實例位於不同的升級域中,因此不會同時升級。當一個工作實例正在升級時,另一個仍處於活動狀態以服務 Web 請求。Web 應用程序目前配置為僅在一個實例上執行。由於您只有一個實例,因此您可能會遇到停機時間,因為升級應用服務平台時,執行 Web 應用的實例也會升級。因此,您的 Web 應用程序程序將重新啟動並經歷停機時間。
- 使用健康檢查
此功能會自動從輪換中移除故障實例,從而提高可用性。此功能將每 2 分鐘在您的 Web 應用程序的所有實例上 ping 指定的健康檢查路徑。如果一個實例在 10 分鐘(5 次 ping)內沒有響應,則該實例被確定為不健康,我們的服務將停止向其路由請求。強烈建議生產應用程序利用此功能並最大限度地減少由於故障實例導致的任何潛在停機時間。注意:健康檢查功能僅適用於託管在多個實例上的應用程序。有關更多資訊,請查看以下文件。 https://github.com/projectkudu/kudu/wiki/Health-Check-(預覽)
所以我知道我可以通過遵循最佳實踐來避免這類罕見事件。但是我想知道是否還有其他問題,因為問題是從那時起,每當我重新啟動 WebApp(通過 Azure 門戶)時,它都會遭受 2 到 5 小時的停機時間,然後它會自動修復。
Microsoft 支持工程師的回應是,這是由於臨時目錄已滿。
臨時文件空間使用幾乎用盡。該應用程序可能會遇到穩定性和性能問題。
應用程序在記憶體處理期間使用臨時文件,從 API 呼叫下載內容等。如果應用程式碼沒有清理,臨時空間就會被用完。
建議的操作要永久修復,請查看和分析此應用服務計劃中託管的每個應用程序,並確定未執行正確清理常式的應用程序。
我查看了 \tmp 目錄,它基本上是空的。WebApp 重啟也應該清除臨時目錄,所以我不明白為什麼我應該在重啟後遇到問題。
與 Microsoft 的支持請求仍處於打開狀態。我希望探索解決問題的其他可能性——因為它已經持續了兩個星期。
以下是可能相關的部分日誌(當 WebApp 離線時),其中的標識細節被混淆了。
碼頭工人
2020-09-22T16:09:57.514Z 錯誤 - 站點 examplewebapp__a81a 的容器 examplewebapp__ 未在預期的時間限制內啟動。已用時間 = 600.9031978 秒 2020-09-22T16:09:57.515Z 錯誤 - 容器 examplewebapp__ 沒有響應埠:80 上的 HTTP ping,站點啟動失敗。請參閱容器日誌以進行調試。2020-09-22T16:09:57.544Z 資訊 - 停止站點 examplewebapp__a81a,因為它在啟動期間失敗。2020-09-22T16:14:53.608Z 資訊 - 從 Docker 中心拉取圖像:mcr.microsoft.com/azure-app-service/tomcat:9.0-java11_200319054033 2020-09-22T16:14:53.687Z 資訊 - 9.0-java11_200319054033從 azure-app-service/tomcat 2020-09-22T16:14:53.720Z 資訊中提取 - 摘要:sha256:c2c5…….73d96 2020-09-22T16:14:53.722Z 資訊 - 狀態:圖像是mcr.microsoft.com/azure-app-service/tomcat:9.0-java11_200319054033 2020-09-22T16 的最新版本:
2020-09-22T16:14:56.980Z 資訊 - 為站點 examplewebapp__a81a 向容器 examplewebapp__aetete 發起預熱請求 2020-09-22T16:15:17.526Z 資訊 - 等待對容器 examplewebapp__aetete 的預熱請求的響應。經過的時間 = 20.5455075 秒 2020-09-22T16:15:33.144Z 資訊 - 等待對容器 examplewebapp__aetete 的預熱請求的響應。經過時間 = 36.1635991 秒 2020-09-22T16:15:54.629Z 資訊 - 等待對容器 examplewebapp__aetete 的預熱請求的響應。經過的時間 = 57.6488951 秒 2020-09-22T16:16:09.914Z 資訊 - 等待對容器 examplewebapp__aetete 的預熱請求的響應。經過時間 = 72.9343365 秒 2020-09-22T16:16:25.080Z 資訊 - 等待對容器 examplewebapp__aetete 的預熱請求的響應。經過時間 = 88.1001723 秒 2020-09-22T16:16:40。281Z 資訊 - 等待對容器 examplewebapp__aetete 的預熱請求的響應。經過時間 = 103.3011586 秒
Default_Docker
2020-09-22T11:45:17.432527708Z / | / /| | /| | /\ / 2020-09-22T11:45:17.432531708Z _ |__ /_____ __ / | | ___ > 2020-09-22T11:45:17.432535708Z // / 2020-09-22T11:45:17.432539208ZAPPSERVICEONLINUX 2020-09-22T11:45:17.432542708Z 2020-09-22T11:45Z8:17 文件:4 / /aka.ms/webapp-linux 2020-09-22T11:45:17.432565208Z 2020-09-22T11:45:17.432568708Z 注意:/home 之外的任何文件或系統更改都不會持續到您的應用程序的目前會話之外。/home 是您的應用程序的持久儲存,並在所有伺服器實例之間共享。2020-09-22T11:45:17.432573808Z 2020-09-22T11:45:17.432576808Z 2020-09-22T11:45:17.432836008Z 設置 openrc … 2020-09-22T11:45:20.01168.8823 記憶體服務依賴項..
$$ ok $$2020-09-22T11:45:20.040479470Z 更新 /etc/ssh/sshd_config 以使用 PORT 2222 2020-09-22T11:45:20.056556396Z 正在啟動 ssh 服務… 2020-09-22T11:45:23.318735610Z ssh-key :生成新的主機密鑰:RSA DSA ECDSA ED25519 2020-09-22T11:45:27.654655866Z *正在啟動 sshd …$$ ok $$2020-09-22T11:45:27.675340497Z ## 列印建構資訊… 2020-09-22T11:45:27.685373113Z
包 | 版本 | 送出 2020-09-22T11:45:27.685419013Z
Microsoft.AppService.EasyAuthExtensionsJava |
1.0.011720002-alpha-793ad718 | 793ad718 2020-09-22T11:45:27.685426413Z Microsoft.AppService.WebsitesExtensionsJava |
1.0.011730003-alpha-53ae38d3 | 53ae38d3 2020-09-22T11:45:27.685430813Z 自我 | 1.0.011730002-alpha-c6f00046 | c6f00046 2020-09-22T11:45:27.687085515Z ## 完成列印建構資訊。 2020-09-22T11:55:23.212406842Z _____
2020-09-22T11:55:23.212435742Z / _ \ __________ _________ ____
2020-09-22T11:55:23.212440842Z / / \ ___ / | _ __ / __ \ 2020-09-22T11:55:23.212444742Z / | / /| | /| | /\ / 2020-09-22T11:55:23.212448142Z _ |_ /_____ _ / | | ___ >
以下資訊來自 Microsoft 支持電話。
發生這種情況的原因是臨時文件儲存已用完。對於 P1V2 Linux,您可以獲得 35GB 的臨時文件儲存空間,對於 P2V2 Linux,您可以獲得 69GB 的臨時文件儲存空間。
您可以通過轉到“診斷和解決問題”然後選擇“工作人員的臨時文件使用情況”來檢查您的應用程序使用了多少
請注意,除了升級您的實例(例如從 P1V2 到 P2V2),等待 15 分鐘,然後將其降級之外,沒有 Microsoft 支持的實際訪問這些臨時文件的方法,也沒有刪除它們的方法。
請注意,必須等待 15 分鐘,否則您將面臨返回到預先存在的實例但未對其進行格式化的風險。
請注意,Microsoft 支持工程師進行了以下附加更改(我不知道這些是否是解決問題所必需的)
- 停止了我正在使用的部署槽
- 添加了應用程序槽配置參數
WEBSITES_CONTAINER_START_TIME_LIMIT = 1800
- 將 Java Web 伺服器版本從 9.0 更改為 9.0.20
- 通過轉到 /home/deployments 並執行刪除部署
rm -rf *
有關 Azure 臨時文件的詳細資訊,請參閱此問題。請注意,那裡用於查看它們的解決方案似乎不適用於適用於 Linux 的 Azure Web Apps