Fra*_*rds 5 spring tomcat azure azure-web-sites spring-boot
我有一个Azure PaaS实例在Tomcat8容器中运行Spring-Boot打包的"war".问题是,经过一段时间的活动后,"java"进程被终止.
上面的图片是tomcat进程未被杀死时的样子.
只有当我再次向服务器发出任何类型的请求时,tomcat进程才会再次启动.
如果我的理解是正确的,标志'WEBSITE_SCM_ALWAYS_ON_ENABLED'是为了让实例保持活跃,即'w3wp'进程,而不是Tomcat.
解决此问题的一个方法是使用简单的"运行状况"请求"轮询"我的服务器以使其保持活动状态.
如果它的'httpPlatformHandler'有一些Azure配置或Spring-boot配置会更好,这样我就可以防止它进入睡眠状态.
任何帮助表示赞赏.
****更新****
在@DavidEbbo的进一步帮助下,问题被追溯到我从"http"到"https"网址的URL"重写"规则."AlwaysOn"请求在HTTP(端口80)上,因此每当命中Azure请求时,它都会获得重定向(301)作为响应.仍在等待解决方案.
问题的根源在于您用于将 http 重定向到 https 的 URL 重写规则阻止了 AlwaysOn 预热请求到达您的 Java 应用程序。
幸运的是,有一个解决方案。
使用以下步骤:
applicationHost.xdt(或 FTP,但这更难)在“site”文件夹(即 )下创建一个名为 file 的文件d:\home\site\applicationHost.xdt。提示:您可以touch applicationHost.xdt在 Kudu Console 中输入来创建一个空文件。请注意,AlwaysOn 请求在 http 日志中仍然看起来像 301,但正确的事情仍然会发生(即 Java 将唤醒)。
或者,如果您不想使用 XDT 转换并希望将所有内容保留在 web.config 中,则只需在其中添加缺少的部分即可。具体来说,您需要进行两项更改(与上面的 XDT 匹配):
将此条件添加到您的重写规则中:
<add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
Run Code Online (Sandbox Code Playgroud)
在下面添加此applicationInitialization部分system.webServer:
<applicationInitialization>
<add initializationPage="/" />
</applicationInitialization>
Run Code Online (Sandbox Code Playgroud)
但我建议使用 XDT 方法,因为它不需要棘手的编辑,并且可以将那些“混乱”的东西与代码库分开。
启用“始终开启”的正确方法是在 Azure 门户中将其设置为“开启”。WEBSITE_SCM_ALWAYS_ON_ENABLED不是您可以设置的内容,而是 Azure 由于启用“始终开启”而设置的内容。
一旦启用“始终在线”,站点的根目录(即/)将每隔几分钟被访问一次,这应该使其保持活动状态。
如果需要命中其他路径,可以使用 applicationInitialization。更多详细信息请参见此处。
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |