【问题标题】:Spring Boot : Heroku errors after successful deploymentSpring Boot:成功部署后的 Heroku 错误
【发布时间】:2020-08-05 08:10:08
【问题描述】:

我在这个问题上苦苦挣扎了几天,在 SO 上找不到任何东西,heroku 上错误代码的描述对我来说含糊不清。我创建了一个没有数据库集成的基本应用程序,使用 spring 框架,thymeleaf 和 spring mail。我没有 spring 安全性。成功将其部署到 heroku 后,我尝试启动应用程序服务器,这就是我在 heroku 日志中得到的内容。该应用程序在 localhost 上运行良好,没有问题。

2020-08-05T08:03:50.144941+00:00 app[web.1]: 2020-08-05 08:03:50.144  INFO 4 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-08-05T08:03:50.458342+00:00 app[web.1]: 2020-08-05 08:03:50.458  INFO 4 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-08-05T08:03:50.471638+00:00 app[web.1]: 2020-08-05 08:03:50.471  INFO 4 --- [           main] c.e.P.MyWebWebsiteApplication        : Started MyWebWebsiteApplication in 2.688 seconds (JVM running for 3.226)
2020-08-05T08:04:53.993643+00:00 heroku[router]: at=error code=H20 desc="App boot timeout" method=GET path="/" host=myweb01.herokuapp.com request_id=0fb69db1-5c01-412e-b01f-451a8a2b7ad8 fwd="86.124.21.129" dyno= connect= service= status=503 bytes= protocol=https
2020-08-05T08:05:16.255402+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch
2020-08-05T08:05:16.271979+00:00 heroku[web.1]: Stopping process with SIGKILL
2020-08-05T08:05:16.349020+00:00 heroku[web.1]: Process exited with status 137
2020-08-05T08:05:16.389343+00:00 heroku[web.1]: State changed from starting to crashed
2020-08-05T08:05:16.392175+00:00 heroku[web.1]: State changed from crashed to starting
2020-08-05T08:05:23.662195+00:00 heroku[web.1]: Starting process with command `java $JAVA_OPTS -jar target/MyWebWebsite-0.0.1-SNAPSHOT.jar -Dserver.port=25487 $JAR_OPTS`
2020-08-05T08:05:25.791836+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2020-08-05T08:05:25.796964+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8 

这是我的过程文件:

web: java $JAVA_OPTS -jar target/MyWebWebsite-0.0.1-SNAPSHOT.jar -Dserver.port=$PORT $JAR_OPTS

阅读日志并在这里找到这个 Tomcat started on port(s): 8080 我想可能是个问题?我的意思是 tomcat 试图在 localhost 端口而不是 heroku 端口上启动?如果是这种情况,我该如何解决?如果不是这种情况,可能是什么问题?

【问题讨论】:

标签: java spring spring-boot heroku thymeleaf


【解决方案1】:

来自文档here 错误代码 H20 表示

路由器将在等待 75 秒内将请求排入队列 启动进程以达到“启动”状态。如果 75 秒后,没有网络 测功机已达到“启动”状态,路由器记录 H20 并提供服务 标准错误页面

如果您的应用程序需要更多时间来启动,您可以使用boot timeout tool 来增加限制。但是,一般来说,缓慢的启动时间会使您的应用程序更难部署,并且会使从测功机故障中恢复的速度变慢,因此这应该被视为一种临时解决方案

【讨论】:

  • devcenter.heroku.com/articles/… -Dserver.port=$PORT 没关系。
  • 我已将启动时间从 90 秒设置为 120 秒,但问题仍然存在
  • 如果您在本地运行应用程序..启动需要多少时间?你在启动时做什么?
  • 如果我在 localhost 上运行应用程序需要 4 秒才能加载。我不认为我在启动时做任何事情?请你更明确一点吗?
  • 你说你有spring mail..作为其中的一部分正在做什么?你是连接到外部 IP 还是什么?
【解决方案2】:

尝试将启动超时设置为 120 秒 - 一些 SpringBoot 应用程序需要一些时间才能启动。请求可以如下所示完成:https://devcenter.heroku.com/changelog-items/364

此外,运行状况检查过程基于 HTTP 请求,因此请确保您的应用通过普通 Web 端口(80、8080、443)提供服务。

【讨论】:

  • 好的,我已将超时设置为 120 秒,但同样的问题仍然存在。如何通过正常的 Web 端口确保我的应用程序是服务器?
  • 好吧,通常 SpringBoot 应用程序通过端口 8080 提供服务,然后如果 SSL 开启,Heroku 会将 8080 暴露给 80 和 443。如果您通过删除 '-Dserver.port=25487' 离开标准 SpringBoot 行为会发生什么?
  • 我已经将 procfile 修改为这个web: java $JAVA_OPTS -jar target/MyWebWebsite-0.0.1-SNAPSHOT.jar $JAR_OPTS 并且我有同样的问题,我也尝试过这个web: java $JAVA_OPTS -jar target/MyWebWebsite-0.0.1-SNAPSHOT.jar -Dserver.port=25487 $JAR_OPTS same 问题。什么可能导致这个?我错过了什么?
猜你喜欢
  • 2021-05-02
  • 2017-12-03
  • 2022-08-10
  • 2017-02-23
  • 2021-11-01
  • 1970-01-01
  • 2021-08-09
  • 2021-04-15
  • 2021-01-18
相关资源
最近更新 更多